diff --git a/.editorconfig b/.editorconfig index e273afa92..a2cc31dc1 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,9 +1,16 @@ [*] end_of_line = lf -[*.{cpp,h,lua,txt,glsl,md,c,cmake,java,gradle}] +[*.{cpp,h,lua,txt,glsl,c,cmake,java,gradle}] charset = utf-8 indent_size = 4 indent_style = tab insert_final_newline = true trim_trailing_whitespace = true + +[*.md] +charset = utf-8 +indent_size = 4 +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = true diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 6b7b95369..51a7eae63 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -36,6 +36,9 @@ Contributions are welcome! Here's how you can help: - Follow the [C/C++](http://dev.minetest.net/Code_style_guidelines) and [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. + - 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) - Commit messages should: diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 0896d9abc..34db1a662 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -35,7 +35,12 @@ jobs: - name: Install deps run: | sudo apt-get update - sudo apt-get install -y --no-install-recommends gettext openjdk-17-jdk-headless + sudo apt-get install -y --no-install-recommends gettext + - name: Set up JDK 17 + uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: '17' - name: Build AAB with Gradle # We build an AAB as well for uploading to the the Play Store. run: cd android; ./gradlew bundlerelease diff --git a/.github/workflows/lua.yml b/.github/workflows/lua.yml index 0073eca2e..1f83c7688 100644 --- a/.github/workflows/lua.yml +++ b/.github/workflows/lua.yml @@ -35,7 +35,7 @@ jobs: - name: Integration test + devtest run: | - ./util/test_multiplayer.sh + serverconf="profiler.load=true" ./util/test_multiplayer.sh luacheck: name: "Builtin Luacheck and Unit Tests" diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index ad9982f66..e193c828d 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -10,6 +10,7 @@ on: - 'src/**.cpp' - 'irr/**.[ch]' - 'irr/**.cpp' + - 'irr/**.mm' # Objective-C(++) - '**/CMakeLists.txt' - 'cmake/Modules/**' - '.github/workflows/macos.yml' @@ -28,7 +29,8 @@ on: jobs: build: - runs-on: macos-latest + # use lowest possible macOS running on x86_64 to support more users + runs-on: macos-12 steps: - uses: actions/checkout@v4 - name: Install deps @@ -58,6 +60,7 @@ jobs: - name: CPack run: | cd build + rm -rf macos cmake .. -DINSTALL_DEVTEST=FALSE cpack -G ZIP -B macos diff --git a/.github/workflows/whitespace_checks.yml b/.github/workflows/whitespace_checks.yml new file mode 100644 index 000000000..cc16e7b22 --- /dev/null +++ b/.github/workflows/whitespace_checks.yml @@ -0,0 +1,45 @@ +name: whitespace_checks + +# Check whitespaces of the following file types +# Not checked: .lua, .yml, .properties, .conf, .java, .py, .svg, .gradle, .xml, ... +# (luacheck already checks .lua files) +on: + push: + paths: + - '**.txt' + - '**.md' + - '**.[ch]' + - '**.cpp' + - '**.hpp' + - '**.sh' + - '**.cmake' + - '**.glsl' + pull_request: + paths: + - '**.txt' + - '**.md' + - '**.[ch]' + - '**.cpp' + - '**.hpp' + - '**.sh' + - '**.cmake' + - '**.glsl' + +jobs: + trailing_whitespaces: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + # Line endings are already ensured by .gitattributes + - name: Check trailing whitespaces + run: if git ls-files | grep -E '\.txt$|\.md$|\.[ch]$|\.cpp$|\.hpp$|\.sh$|\.cmake$|\.glsl$' | xargs grep -n '\s$'; then echo -e "\033[0;31mFound trailing whitespace"; (exit 1); else (exit 0); fi + + tabs_lua_api_files: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + # Some files should not contain tabs + - name: Check tabs in Lua API files + run: if grep -n $'\t' doc/lua_api.md doc/client_lua_api.md; then echo -e "\033[0;31mFound tab in markdown file"; (exit 1); else (exit 0); fi + + diff --git a/.gitignore b/.gitignore index 047a24c70..8ff758720 100644 --- a/.gitignore +++ b/.gitignore @@ -43,6 +43,10 @@ build/.cmake/ *.zsync appimage-build AppDir +# Direnv +.direnv/ +# Nix +/result ## Files related to Minetest development cycle /*.patch diff --git a/.luacheckrc b/.luacheckrc index fcc04cab3..afc136c7c 100644 --- a/.luacheckrc +++ b/.luacheckrc @@ -20,7 +20,7 @@ read_globals = { "PerlinNoise", "PerlinNoiseMap", string = {fields = {"split", "trim"}}, - table = {fields = {"copy", "getn", "indexof", "insert_all"}}, + table = {fields = {"copy", "getn", "indexof", "keyof", "insert_all"}}, math = {fields = {"hypot", "round"}}, } @@ -37,6 +37,12 @@ files["builtin/client/register.lua"] = { } } +files["builtin/common/math.lua"] = { + globals = { + "math", + }, +} + files["builtin/common/misc_helpers.lua"] = { globals = { "dump", "dump2", "table", "math", "string", @@ -46,7 +52,7 @@ files["builtin/common/misc_helpers.lua"] = { } files["builtin/common/vector.lua"] = { - globals = { "vector" }, + globals = { "vector", "math" }, } files["builtin/game/voxelarea.lua"] = { diff --git a/CMakeLists.txt b/CMakeLists.txt index 2cd2e7336..a9a0ef000 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,7 +11,7 @@ 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 9) +set(VERSION_MINOR 10) set(VERSION_PATCH 0) set(VERSION_EXTRA "" CACHE STRING "Stuff to append to version string") @@ -56,6 +56,11 @@ if((WIN32 AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU") OR APPLE) endif() set(ENABLE_LTO ${DEFAULT_ENABLE_LTO} CACHE BOOL "Use Link Time Optimization") +set(BUILD_WITH_TRACY FALSE CACHE BOOL + "Fetch and build with the Tracy profiler client") +set(FETCH_TRACY_GIT_TAG "master" CACHE STRING + "Git tag for fetching Tracy client. Match with your server (gui) version") + set(DEFAULT_RUN_IN_PLACE FALSE) if(WIN32) set(DEFAULT_RUN_IN_PLACE TRUE) @@ -156,7 +161,7 @@ elseif(UNIX) # Linux, BSD etc set(EXAMPLE_CONF_DIR ".") set(MANDIR "unix/man") set(XDG_APPS_DIR "unix/applications") - set(APPDATADIR "unix/metainfo") + set(METAINFODIR "unix/metainfo") set(ICONDIR "unix/icons") set(LOCALEDIR "locale") else() @@ -167,7 +172,7 @@ elseif(UNIX) # Linux, BSD etc set(MANDIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_MANDIR}") set(EXAMPLE_CONF_DIR ${DOCDIR}) set(XDG_APPS_DIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATADIR}/applications") - set(APPDATADIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATADIR}/metainfo") + set(METAINFODIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATADIR}/metainfo") set(ICONDIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATADIR}/icons") set(LOCALEDIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LOCALEDIR}") endif() @@ -258,7 +263,7 @@ 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 "misc/net.minetest.minetest.desktop" DESTINATION "${XDG_APPS_DIR}") - install(FILES "misc/net.minetest.minetest.appdata.xml" DESTINATION "${APPDATADIR}") + 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" DESTINATION "${ICONDIR}/hicolor/128x128/apps" @@ -283,6 +288,8 @@ if(BUILD_UNITTESTS OR BUILD_BENCHMARKS) add_subdirectory(lib/catch2) endif() +add_subdirectory(lib/tiniergltf) + # Subdirectories # Be sure to add all relevant definitions above this add_subdirectory(src) @@ -368,3 +375,19 @@ if(BUILD_DOCUMENTATION) ) endif() endif() + +# Fetch Tracy +if(BUILD_WITH_TRACY) + include(FetchContent) + + message(STATUS "Fetching Tracy (${FETCH_TRACY_GIT_TAG})...") + FetchContent_Declare( + tracy + GIT_REPOSITORY https://github.com/wolfpld/tracy.git + GIT_TAG ${FETCH_TRACY_GIT_TAG} + GIT_SHALLOW TRUE + GIT_PROGRESS TRUE + ) + FetchContent_MakeAvailable(tracy) + message(STATUS "Fetching Tracy - done") +endif() diff --git a/README.md b/README.md index 5724359d6..919cb144c 100644 --- a/README.md +++ b/README.md @@ -119,6 +119,7 @@ Command-line options Compiling --------- +- [Compiling - common information](doc/compiling/README.md) - [Compiling on GNU/Linux](doc/compiling/linux.md) - [Compiling on Windows](doc/compiling/windows.md) - [Compiling on MacOS](doc/compiling/macos.md) diff --git a/android/app/build.gradle b/android/app/build.gradle index 30ee19c95..cefc473af 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -1,15 +1,18 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 33 - buildToolsVersion '33.0.2' ndkVersion "$ndk_version" defaultConfig { applicationId 'net.minetest.minetest' minSdkVersion 21 - targetSdkVersion 33 + compileSdk 34 + targetSdkVersion 34 versionName "${versionMajor}.${versionMinor}.${versionPatch}" - versionCode project.versionCode + versionCode versionMajor * 1000000 + versionMinor * 10000 + versionPatch * 100 + versionBuild + } + + buildFeatures { + buildConfig true } // load properties @@ -49,6 +52,7 @@ android { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } + namespace 'net.minetest.minetest' } task prepareAssets() { @@ -112,18 +116,6 @@ clean { delete new File("src/main/assets", "Minetest.zip") } -// Map for the version code that gives each ABI a value. -import com.android.build.OutputFile - -def abiCodes = ['armeabi-v7a': 0, 'arm64-v8a': 1] -android.applicationVariants.all { variant -> - variant.outputs.each { - output -> - def abiName = output.getFilter(OutputFile.ABI) - output.versionCodeOverride = abiCodes.get(abiName, 0) + variant.versionCode - } -} - dependencies { implementation project(':native') implementation 'androidx.appcompat:appcompat:1.6.1' diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index b629610d8..9197b9131 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,8 +1,7 @@ + android:installLocation="auto"> diff --git a/android/app/src/main/java/net/minetest/minetest/MainActivity.java b/android/app/src/main/java/net/minetest/minetest/MainActivity.java index 9eaa7316d..7735e8b3d 100644 --- a/android/app/src/main/java/net/minetest/minetest/MainActivity.java +++ b/android/app/src/main/java/net/minetest/minetest/MainActivity.java @@ -20,6 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc., package net.minetest.minetest; +import android.annotation.SuppressLint; import android.app.NotificationChannel; import android.app.NotificationManager; import android.content.BroadcastReceiver; @@ -83,13 +84,18 @@ public class MainActivity extends AppCompatActivity { } }; + @SuppressLint("UnspecifiedRegisterReceiverFlag") @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); IntentFilter filter = new IntentFilter(ACTION_UPDATE); - registerReceiver(myReceiver, filter); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + registerReceiver(myReceiver, filter, RECEIVER_NOT_EXPORTED); + } else { + registerReceiver(myReceiver, filter); + } mProgressBar = findViewById(R.id.progressBar); mTextView = findViewById(R.id.textView); diff --git a/android/app/src/main/java/net/minetest/minetest/UnzipService.java b/android/app/src/main/java/net/minetest/minetest/UnzipService.java index 5dccc4563..261eebb8e 100644 --- a/android/app/src/main/java/net/minetest/minetest/UnzipService.java +++ b/android/app/src/main/java/net/minetest/minetest/UnzipService.java @@ -186,6 +186,7 @@ public class UnzipService extends IntentService { private void publishProgress(@Nullable Notification.Builder notificationBuilder, @StringRes int message, int progress) { Intent intentUpdate = new Intent(ACTION_UPDATE); + intentUpdate.setPackage(getPackageName()); intentUpdate.putExtra(ACTION_PROGRESS, progress); intentUpdate.putExtra(ACTION_PROGRESS_MESSAGE, message); if (!isSuccess) diff --git a/android/build.gradle b/android/build.gradle index 1805ba856..2017c536c 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -1,13 +1,12 @@ // 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", 9) // Version Minor +project.ext.set("versionMinor", 10) // Version Minor project.ext.set("versionPatch", 0) // Version Patch // ^ keep in sync with cmake -project.ext.set("versionCode", 46) // Android Version Code -// NOTE: +2 after each release! -// +1 for ARM and +1 for ARM64 APK's, because -// each APK must have a larger `versionCode` than the previous + +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' @@ -16,7 +15,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.4.1' + classpath 'com.android.tools.build:gradle:8.5.1' classpath 'de.undercouch:gradle-download-task:4.1.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/android/gradle.properties b/android/gradle.properties index 333d3ad95..238ccd7a7 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -9,3 +9,5 @@ org.gradle.parallel.threads=8 org.gradle.configureondemand=true android.enableJetifier=false android.useAndroidX=true +android.nonTransitiveRClass=false +android.nonFinalResIds=false diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index 1af9e0930..b82aa23a4 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/android/icons/gear_icon.svg b/android/icons/gear_icon.svg deleted file mode 100644 index b44685ade..000000000 --- a/android/icons/gear_icon.svg +++ /dev/null @@ -1,194 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - diff --git a/android/icons/rare_controls.svg b/android/icons/overflow_btn.svg similarity index 90% rename from android/icons/rare_controls.svg rename to android/icons/overflow_btn.svg index c9991ec7a..455dcc35a 100644 --- a/android/icons/rare_controls.svg +++ b/android/icons/overflow_btn.svg @@ -2,23 +2,23 @@ + inkscape:export-ydpi="24.000002" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + showguides="false" + inkscape:showpageshadow="2" + inkscape:deskcolor="#d1d1d1"> + empopacity="0.25098039" + originx="0" + originy="0" + units="px" + visible="true" /> @@ -432,7 +438,6 @@ image/svg+xml - @@ -496,26 +501,27 @@ x="264.65997" y="124.10143" style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-opacity:1" /> + id="flowPara4724" /> - + width="96.212502" + height="0.61243516" + x="19.62678" + y="33.575779" /> + + diff --git a/android/native/build.gradle b/android/native/build.gradle index 96a7739c0..806dda2f0 100644 --- a/android/native/build.gradle +++ b/android/native/build.gradle @@ -2,14 +2,13 @@ apply plugin: 'com.android.library' apply plugin: 'de.undercouch.download' android { - compileSdkVersion 33 - buildToolsVersion '33.0.2' ndkVersion "$ndk_version" defaultConfig { minSdkVersion 21 - targetSdkVersion 33 + compileSdk 34 + targetSdkVersion 34 externalNativeBuild { - cmake { + cmake { arguments "-DANDROID_STL=c++_shared", "-DENABLE_CURL=1", "-DENABLE_SOUND=1", "-DENABLE_GETTEXT=1", @@ -40,6 +39,7 @@ android { } } } + namespace 'net.minetest' } // get precompiled deps diff --git a/android/native/src/main/AndroidManifest.xml b/android/native/src/main/AndroidManifest.xml index 19451c7fd..cc947c567 100644 --- a/android/native/src/main/AndroidManifest.xml +++ b/android/native/src/main/AndroidManifest.xml @@ -1 +1 @@ - + diff --git a/builtin/client/death_formspec.lua b/builtin/client/death_formspec.lua deleted file mode 100644 index c25c799ab..000000000 --- a/builtin/client/death_formspec.lua +++ /dev/null @@ -1,15 +0,0 @@ --- CSM death formspec. Only used when clientside modding is enabled, otherwise --- handled by the engine. - -core.register_on_death(function() - local formspec = "size[11,5.5]bgcolor[#320000b4;true]" .. - "label[4.85,1.35;" .. fgettext("You died") .. - "]button_exit[4,3;3,0.5;btn_respawn;".. fgettext("Respawn") .."]" - core.show_formspec("bultin:death", formspec) -end) - -core.register_on_formspec_input(function(formname, fields) - if formname == "bultin:death" then - core.send_respawn() - end -end) diff --git a/builtin/client/init.lua b/builtin/client/init.lua index 301a8050c..8d01c99a4 100644 --- a/builtin/client/init.lua +++ b/builtin/client/init.lua @@ -9,6 +9,5 @@ dofile(commonpath .. "mod_storage.lua") dofile(commonpath .. "chatcommands.lua") dofile(commonpath .. "information_formspecs.lua") dofile(clientpath .. "chatcommands.lua") -dofile(clientpath .. "death_formspec.lua") dofile(clientpath .. "misc.lua") assert(loadfile(commonpath .. "item_s.lua"))({}) -- Just for push/read node functions diff --git a/builtin/common/information_formspecs.lua b/builtin/common/information_formspecs.lua index 3fa397d25..270631fc9 100644 --- a/builtin/common/information_formspecs.lua +++ b/builtin/common/information_formspecs.lua @@ -69,7 +69,7 @@ local function build_chatcommands_formspec(name, sel, copy) description = cmds[2].description if copy then local msg = S("Command: @1 @2", - core.colorize("#0FF", "/" .. cmds[1]), cmds[2].params) + core.colorize("#0FF", (INIT == "client" and "." or "/") .. cmds[1]), cmds[2].params) if INIT == "client" then core.display_chat_message(msg) else diff --git a/builtin/common/math.lua b/builtin/common/math.lua new file mode 100644 index 000000000..84c6c619b --- /dev/null +++ b/builtin/common/math.lua @@ -0,0 +1,41 @@ +--[[ + Math utils. +--]] + +function math.hypot(x, y) + return math.sqrt(x * x + y * y) +end + +function math.sign(x, tolerance) + tolerance = tolerance or 0 + if x > tolerance then + return 1 + elseif x < -tolerance then + return -1 + end + return 0 +end + +function math.factorial(x) + assert(x % 1 == 0 and x >= 0, "factorial expects a non-negative integer") + if x >= 171 then + -- 171! is greater than the biggest double, no need to calculate + return math.huge + end + local v = 1 + for k = 2, x do + v = v * k + end + return v +end + +function math.round(x) + if x < 0 then + local int = math.ceil(x) + local frac = x - int + return int - ((frac <= -0.5) and 1 or 0) + end + local int = math.floor(x) + local frac = x - int + return int + ((frac >= 0.5) and 1 or 0) +end diff --git a/builtin/common/metatable.lua b/builtin/common/metatable.lua index b402dd63a..40003d293 100644 --- a/builtin/common/metatable.lua +++ b/builtin/common/metatable.lua @@ -1,6 +1,6 @@ -- Registered metatables, used by the C++ packer local known_metatables = {} -function core.register_async_metatable(name, mt) +function core.register_portable_metatable(name, mt) assert(type(name) == "string", ("attempt to use %s value as metatable name"):format(type(name))) assert(type(mt) == "table", ("attempt to register a %s value as metatable"):format(type(mt))) assert(known_metatables[name] == nil or known_metatables[name] == mt, @@ -10,4 +10,10 @@ function core.register_async_metatable(name, mt) end core.known_metatables = known_metatables -core.register_async_metatable("__builtin:vector", vector.metatable) +function core.register_async_metatable(...) + core.log("deprecated", "minetest.register_async_metatable is deprecated. " .. + "Use minetest.register_portable_metatable instead.") + return core.register_portable_metatable(...) +end + +core.register_portable_metatable("__builtin:vector", vector.metatable) diff --git a/builtin/common/misc_helpers.lua b/builtin/common/misc_helpers.lua index 424eb26d2..9c25b826f 100644 --- a/builtin/common/misc_helpers.lua +++ b/builtin/common/misc_helpers.lua @@ -3,6 +3,7 @@ -------------------------------------------------------------------------------- -- Localize functions to avoid table lookups (better performance). local string_sub, string_find = string.sub, string.find +local math = math -------------------------------------------------------------------------------- local function basic_dump(o) @@ -205,49 +206,21 @@ function table.indexof(list, val) return -1 end +-------------------------------------------------------------------------------- +function table.keyof(tb, val) + for k, v in pairs(tb) do + if v == val then + return k + end + end + return nil +end + -------------------------------------------------------------------------------- function string:trim() return self:match("^%s*(.-)%s*$") end --------------------------------------------------------------------------------- -function math.hypot(x, y) - return math.sqrt(x * x + y * y) -end - --------------------------------------------------------------------------------- -function math.sign(x, tolerance) - tolerance = tolerance or 0 - if x > tolerance then - return 1 - elseif x < -tolerance then - return -1 - end - return 0 -end - --------------------------------------------------------------------------------- -function math.factorial(x) - assert(x % 1 == 0 and x >= 0, "factorial expects a non-negative integer") - if x >= 171 then - -- 171! is greater than the biggest double, no need to calculate - return math.huge - end - local v = 1 - for k = 2, x do - v = v * k - end - return v -end - - -function math.round(x) - if x >= 0 then - return math.floor(x + 0.5) - end - return math.ceil(x - 0.5) -end - local formspec_escapes = { ["\\"] = "\\\\", ["["] = "\\[", @@ -689,6 +662,7 @@ function core.privs_to_string(privs, delim) list[#list + 1] = priv end end + table.sort(list) return table.concat(list, delim) end diff --git a/builtin/common/tests/after_spec.lua b/builtin/common/tests/after_spec.lua index cca1871a5..f23bbd70d 100644 --- a/builtin/common/tests/after_spec.lua +++ b/builtin/common/tests/after_spec.lua @@ -1,6 +1,7 @@ _G.core = {} _G.vector = {metatable = {}} +dofile("builtin/common/math.lua") dofile("builtin/common/vector.lua") dofile("builtin/common/misc_helpers.lua") diff --git a/builtin/common/tests/math_spec.lua b/builtin/common/tests/math_spec.lua new file mode 100644 index 000000000..108ab2b6a --- /dev/null +++ b/builtin/common/tests/math_spec.lua @@ -0,0 +1,16 @@ +_G.core = {} +dofile("builtin/common/math.lua") + +describe("math", function() + it("round()", function() + assert.equal(0, math.round(0)) + assert.equal(10, math.round(10.3)) + assert.equal(11, math.round(10.5)) + assert.equal(11, math.round(10.7)) + assert.equal(-10, math.round(-10.3)) + assert.equal(-11, math.round(-10.5)) + assert.equal(-11, math.round(-10.7)) + assert.equal(0, math.round(0.49999999999999994)) + assert.equal(0, math.round(-0.49999999999999994)) + end) +end) diff --git a/builtin/common/tests/misc_helpers_spec.lua b/builtin/common/tests/misc_helpers_spec.lua index 73a66737f..10e2bf277 100644 --- a/builtin/common/tests/misc_helpers_spec.lua +++ b/builtin/common/tests/misc_helpers_spec.lua @@ -1,4 +1,5 @@ _G.core = {} +dofile("builtin/common/math.lua") dofile("builtin/common/vector.lua") dofile("builtin/common/misc_helpers.lua") @@ -166,6 +167,16 @@ describe("table", function() it("indexof()", function() assert.equal(1, table.indexof({"foo", "bar"}, "foo")) assert.equal(-1, table.indexof({"foo", "bar"}, "baz")) + assert.equal(-1, table.indexof({[2] = "foo", [3] = "bar"}, "foo")) + assert.equal(-1, table.indexof({[1] = "foo", [3] = "bar"}, "bar")) + end) + + it("keyof()", function() + assert.equal("a", table.keyof({a = "foo", b = "bar"}, "foo")) + assert.equal(nil, table.keyof({a = "foo", b = "bar"}, "baz")) + assert.equal(1, table.keyof({"foo", "bar"}, "foo")) + assert.equal(2, table.keyof({[2] = "foo", [3] = "bar"}, "foo")) + assert.equal(3, table.keyof({[1] = "foo", [3] = "bar"}, "bar")) end) end) @@ -176,3 +187,17 @@ describe("formspec_escape", function() assert.equal("\\[Hello\\\\\\[", core.formspec_escape("[Hello\\[")) end) end) + +describe("math", function() + it("round()", function() + assert.equal(0, math.round(0)) + assert.equal(10, math.round(10.3)) + assert.equal(11, math.round(10.5)) + assert.equal(11, math.round(10.7)) + assert.equal(-10, math.round(-10.3)) + assert.equal(-11, math.round(-10.5)) + assert.equal(-11, math.round(-10.7)) + assert.equal(0, math.round(0.49999999999999994)) + assert.equal(0, math.round(-0.49999999999999994)) + end) +end) diff --git a/builtin/common/tests/vector_spec.lua b/builtin/common/tests/vector_spec.lua index 67dbd2d6b..9a0458be4 100644 --- a/builtin/common/tests/vector_spec.lua +++ b/builtin/common/tests/vector_spec.lua @@ -1,4 +1,5 @@ _G.vector = {} +dofile("builtin/common/math.lua") dofile("builtin/common/vector.lua") describe("vector", function() @@ -113,12 +114,35 @@ describe("vector", function() assert.equal(vector.new(0, 1, -1), a:round()) end) + it("ceil()", function() + local a = vector.new(0.1, 0.9, -0.5) + assert.equal(vector.new(1, 1, 0), vector.ceil(a)) + assert.equal(vector.new(1, 1, 0), a:ceil()) + end) + + it("sign()", function() + local a = vector.new(-120.3, 0, 231.5) + assert.equal(vector.new(-1, 0, 1), vector.sign(a)) + assert.equal(vector.new(-1, 0, 1), a:sign()) + assert.equal(vector.new(0, 0, 1), vector.sign(a, 200)) + assert.equal(vector.new(0, 0, 1), a:sign(200)) + end) + + it("abs()", function() + local a = vector.new(-123.456, 0, 13) + assert.equal(vector.new(123.456, 0, 13), vector.abs(a)) + assert.equal(vector.new(123.456, 0, 13), a:abs()) + end) + it("apply()", function() local i = 0 local f = function(x) i = i + 1 return x + i end + local f2 = function(x, opt1, opt2, opt3) + return x + opt1 + opt2 + opt3 + end local a = vector.new(0.1, 0.9, -0.5) assert.equal(vector.new(1, 1, 0), vector.apply(a, math.ceil)) assert.equal(vector.new(1, 1, 0), a:apply(math.ceil)) @@ -126,6 +150,9 @@ describe("vector", function() assert.equal(vector.new(0.1, 0.9, 0.5), a:apply(math.abs)) assert.equal(vector.new(1.1, 2.9, 2.5), vector.apply(a, f)) assert.equal(vector.new(4.1, 5.9, 5.5), a:apply(f)) + local b = vector.new(1, 2, 3) + assert.equal(vector.new(4, 5, 6), vector.apply(b, f2, 1, 1, 1)) + assert.equal(vector.new(4, 5, 6), b:apply(f2, 1, 1, 1)) end) it("combine()", function() @@ -469,4 +496,13 @@ describe("vector", function() assert.True(vector.in_area(vector.new(-10, -10, -10), vector.new(-10, -10, -10), vector.new(10, 10, 10))) assert.False(vector.in_area(vector.new(-10, -10, -10), vector.new(10, 10, 10), vector.new(-11, -10, -10))) end) + + it("random_in_area()", function() + local min = vector.new(-100, -100, -100) + local max = vector.new(100, 100, 100) + for i = 1, 1000 do + local random = vector.random_in_area(min, max) + assert.True(vector.in_area(random, min, max)) + end + end) end) diff --git a/builtin/common/vector.lua b/builtin/common/vector.lua index e2008a9d7..fb1d2a7d9 100644 --- a/builtin/common/vector.lua +++ b/builtin/common/vector.lua @@ -5,6 +5,7 @@ Note: The vector.*-functions must be able to accept old vectors that had no meta -- localize functions local setmetatable = setmetatable +local math = math vector = {} @@ -97,18 +98,26 @@ function vector.floor(v) end function vector.round(v) - return fast_new( - math.round(v.x), - math.round(v.y), - math.round(v.z) - ) + return vector.apply(v, math.round) end -function vector.apply(v, func) +function vector.ceil(v) + return vector.apply(v, math.ceil) +end + +function vector.sign(v, tolerance) + return vector.apply(v, math.sign, tolerance) +end + +function vector.abs(v) + return vector.apply(v, math.abs) +end + +function vector.apply(v, func, ...) return fast_new( - func(v.x), - func(v.y), - func(v.z) + func(v.x, ...), + func(v.y, ...), + func(v.z, ...) ) end @@ -375,6 +384,26 @@ function vector.in_area(pos, min, max) (pos.z >= min.z) and (pos.z <= max.z) end +function vector.random_direction() + -- Generate a random direction of unit length, via rejection sampling + local x, y, z, l2 + repeat -- expected less than two attempts on average (volume sphere vs. cube) + x, y, z = math.random() * 2 - 1, math.random() * 2 - 1, math.random() * 2 - 1 + l2 = x*x + y*y + z*z + until l2 <= 1 and l2 >= 1e-6 + -- normalize + local l = math.sqrt(l2) + return fast_new(x/l, y/l, z/l) +end + +function vector.random_in_area(min, max) + return fast_new( + math.random(min.x, max.x), + math.random(min.y, max.y), + math.random(min.z, max.z) + ) +end + if rawget(_G, "core") and core.set_read_vector and core.set_push_vector then local function read_vector(v) return v.x, v.y, v.z diff --git a/builtin/emerge/env.lua b/builtin/emerge/env.lua index 2b32a0339..5beb6285c 100644 --- a/builtin/emerge/env.lua +++ b/builtin/emerge/env.lua @@ -23,6 +23,8 @@ core.add_node = core.set_node -- we don't deal with metadata currently core.swap_node = core.set_node +core.bulk_swap_node = core.bulk_set_node + function core.remove_node(pos) return core.vmanip:set_node_at(pos, {name="air"}) end diff --git a/builtin/fstk/buttonbar.lua b/builtin/fstk/buttonbar.lua index c7da41280..e53814751 100644 --- a/builtin/fstk/buttonbar.lua +++ b/builtin/fstk/buttonbar.lua @@ -19,7 +19,7 @@ local BASE_SPACING = 0.1 local function get_scroll_btn_width() - return core.settings:get_bool("enable_touch") and 0.8 or 0.5 + return core.settings:get_bool("touch_gui") and 0.8 or 0.5 end local function buttonbar_formspec(self) @@ -28,10 +28,8 @@ local function buttonbar_formspec(self) end local formspec = { - "style_type[box;noclip=true]", string.format("box[%f,%f;%f,%f;%s]", self.pos.x, self.pos.y, self.size.x, self.size.y, self.bgcolor), - "style_type[box;noclip=false]", } local btn_size = self.size.y - 2*BASE_SPACING @@ -71,7 +69,7 @@ local function buttonbar_formspec(self) y = self.pos.y + BASE_SPACING, } - table.insert(formspec, string.format("image_button[%f,%f;%f,%f;%s;%s;%s;true;false]tooltip[%s;%s]", + table.insert(formspec, string.format("image_button[%f,%f;%f,%f;%s;%s;%s;false;false]tooltip[%s;%s]", btn_pos.x, btn_pos.y, btn_size, btn_size, btn.image, btn.name, btn.caption, btn.name, btn.tooltip)) end @@ -86,9 +84,6 @@ local function buttonbar_formspec(self) y = self.pos.y + BASE_SPACING, } - table.insert(formspec, string.format("style[%s,%s;noclip=true]", - self.btn_prev_name, self.btn_next_name)) - table.insert(formspec, string.format("button[%f,%f;%f,%f;%s;<]", btn_prev_pos.x, btn_prev_pos.y, get_scroll_btn_width(), btn_size, self.btn_prev_name)) @@ -102,14 +97,24 @@ local function buttonbar_formspec(self) end local function buttonbar_buttonhandler(self, fields) - if fields[self.btn_prev_name] and self.cur_page > 1 then - self.cur_page = self.cur_page - 1 - return true + if fields[self.btn_prev_name] then + if self.cur_page > 1 then + self.cur_page = self.cur_page - 1 + return true + elseif self.cur_page == 1 then + self.cur_page = self.num_pages + return true + end end - if fields[self.btn_next_name] and self.cur_page < self.num_pages then - self.cur_page = self.cur_page + 1 - return true + if fields[self.btn_next_name] then + if self.cur_page < self.num_pages then + self.cur_page = self.cur_page + 1 + return true + elseif self.cur_page == self.num_pages then + self.cur_page = 1 + return true + end end for _, btn in ipairs(self.buttons) do diff --git a/builtin/fstk/tabview.lua b/builtin/fstk/tabview.lua index f09c4df2d..9f8889143 100644 --- a/builtin/fstk/tabview.lua +++ b/builtin/fstk/tabview.lua @@ -66,11 +66,22 @@ local function get_formspec(self) local content, prepend = tab.get_formspec(self, tab.name, tab.tabdata, tab.tabsize) - local tsize = tab.tabsize or { width = self.width, height = self.height } + local ENABLE_TOUCH = core.settings:get_bool("enable_touch") + + local orig_tsize = tab.tabsize or { width = self.width, height = self.height } + local tsize = { width = orig_tsize.width, height = orig_tsize.height } + tsize.height = tsize.height + + TABHEADER_H -- tabheader included in formspec size + + (ENABLE_TOUCH and GAMEBAR_OFFSET_TOUCH or GAMEBAR_OFFSET_DESKTOP) + + GAMEBAR_H -- gamebar included in formspec size + if self.parent == nil and not prepend then prepend = string.format("size[%f,%f,%s]", tsize.width, tsize.height, dump(self.fixed_size)) + local anchor_pos = TABHEADER_H + orig_tsize.height / 2 + prepend = prepend .. ("anchor[0.5,%f]"):format(anchor_pos / tsize.height) + if tab.formspec_version then prepend = ("formspec_version[%d]"):format(tab.formspec_version) .. prepend end @@ -78,12 +89,15 @@ local function get_formspec(self) local end_button_size = 0.75 - local tab_header_size = { width = tsize.width, height = 0.85 } + local tab_header_size = { width = tsize.width, height = TABHEADER_H } if self.end_button then tab_header_size.width = tab_header_size.width - end_button_size - 0.1 end - local formspec = (prepend or "") .. self:tab_header(tab_header_size) .. content + local formspec = (prepend or "") + formspec = formspec .. ("bgcolor[;neither]container[0,%f]box[0,0;%f,%f;#0000008C]"):format( + TABHEADER_H, orig_tsize.width, orig_tsize.height) + formspec = formspec .. self:tab_header(tab_header_size) .. content if self.end_button then formspec = formspec .. @@ -98,6 +112,8 @@ local function get_formspec(self) self.end_button.name) end + formspec = formspec .. "container_end[]" + return formspec end diff --git a/builtin/game/chat.lua b/builtin/game/chat.lua index baab5212f..b7e2aea50 100644 --- a/builtin/game/chat.lua +++ b/builtin/game/chat.lua @@ -221,6 +221,7 @@ core.register_chatcommand("haspriv", { return true, S("No online player has the \"@1\" privilege.", param) else + table.sort(players_with_priv) return true, S("Players online with the \"@1\" privilege: @2", param, table.concat(players_with_priv, ", ")) diff --git a/builtin/game/death_screen.lua b/builtin/game/death_screen.lua new file mode 100644 index 000000000..77f56aaff --- /dev/null +++ b/builtin/game/death_screen.lua @@ -0,0 +1,31 @@ +local F = core.formspec_escape +local S = core.get_translator("__builtin") + +function core.show_death_screen(player, _reason) + local fs = { + "formspec_version[1]", + "size[11,5.5,true]", + "bgcolor[#320000b4;true]", + "label[4.85,1.35;", F(S("You died")), "]", + "button_exit[4,3;3,0.5;btn_respawn;", F(S("Respawn")), "]", + } + core.show_formspec(player:get_player_name(), "__builtin:death", table.concat(fs, "")) +end + +core.register_on_dieplayer(function(player, reason) + core.show_death_screen(player, reason) +end) + +core.register_on_joinplayer(function(player) + if player:get_hp() == 0 then + core.show_death_screen(player, nil) + end +end) + +core.register_on_player_receive_fields(function(player, formname, fields) + if formname == "__builtin:death" and fields.quit and player:get_hp() == 0 then + player:respawn() + core.log("action", player:get_player_name() .. " respawns at " .. + player:get_pos():to_string()) + end +end) diff --git a/builtin/game/features.lua b/builtin/game/features.lua index 22bf1859d..81b291e6c 100644 --- a/builtin/game/features.lua +++ b/builtin/game/features.lua @@ -42,6 +42,8 @@ core.features = { node_interaction_actor = true, moveresult_new_pos = true, override_item_remove_fields = true, + hotbar_hud_element = true, + bulk_lbms = true, } function core.has_feature(arg) diff --git a/builtin/game/hud.lua b/builtin/game/hud.lua index 1bc4b48d7..eaf037e68 100644 --- a/builtin/game/hud.lua +++ b/builtin/game/hud.lua @@ -251,11 +251,31 @@ register_builtin_hud_element("minimap", { position = {x = 1, y = 0}, alignment = {x = -1, y = 1}, offset = {x = -10, y = 10}, - size = {x = 256, y = 256}, + size = {x = 0, y = -25}, }, show_elem = function(player, flags) + local proto_ver = core.get_player_information(player:get_player_name()).protocol_version -- Don't add a minimap for clients which already have it hardcoded in C++. - return flags.minimap and - core.get_player_information(player:get_player_name()).protocol_version >= 44 + return flags.minimap and proto_ver >= 44 + end, + update_def = function(player, elem_def) + local proto_ver = core.get_player_information(player:get_player_name()).protocol_version + -- Only use percentage when the client supports it. + elem_def.size = proto_ver >= 45 and {x = 0, y = -25} or {x = 256, y = 256} + end, +}) + +--- Hotbar + +register_builtin_hud_element("hotbar", { + elem_def = { + type = "hotbar", + position = {x = 0.5, y = 1}, + direction = 0, + alignment = {x = 0, y = -1}, + offset = {x = 0, y = -4}, -- Extra padding below. + }, + show_elem = function(player, flags) + return flags.hotbar end, }) diff --git a/builtin/game/init.lua b/builtin/game/init.lua index 4e16c686d..b3c64e729 100644 --- a/builtin/game/init.lua +++ b/builtin/game/init.lua @@ -38,6 +38,7 @@ dofile(gamepath .. "forceloading.lua") dofile(gamepath .. "hud.lua") dofile(gamepath .. "knockback.lua") dofile(gamepath .. "async.lua") +dofile(gamepath .. "death_screen.lua") core.after(0, builtin_shared.cache_content_ids) diff --git a/builtin/game/misc.lua b/builtin/game/misc.lua index dc394a00c..25e19ddb0 100644 --- a/builtin/game/misc.lua +++ b/builtin/game/misc.lua @@ -6,14 +6,14 @@ local S = core.get_translator("__builtin") -- Misc. API functions -- --- @spec core.kick_player(String, String) :: Boolean -function core.kick_player(player_name, reason) +-- @spec core.kick_player(String, String, Boolean) :: Boolean +function core.kick_player(player_name, reason, reconnect) if type(reason) == "string" then reason = "Kicked: " .. reason else reason = "Kicked." end - return core.disconnect_player(player_name, reason) + return core.disconnect_player(player_name, reason, reconnect) end function core.check_player_privs(name, ...) @@ -272,3 +272,54 @@ function core.get_globals_to_transfer() } return all end + +do + local function valid_object_iterator(objects) + local i = 0 + local function next_valid_object() + i = i + 1 + local obj = objects[i] + if obj == nil then + return + end + if obj:is_valid() then + return obj + end + return next_valid_object() + end + return next_valid_object + end + + function core.objects_inside_radius(center, radius) + return valid_object_iterator(core.get_objects_inside_radius(center, radius)) + end + + function core.objects_in_area(min_pos, max_pos) + return valid_object_iterator(core.get_objects_in_area(min_pos, max_pos)) + end +end + +-- +-- Helper for LBM execution, called from C++ +-- + +function core.run_lbm(id, pos_list, dtime_s) + local lbm = core.registered_lbms[id] + assert(lbm, "Entry with given id not found in registered_lbms table") + core.set_last_run_mod(lbm.mod_origin) + if lbm.bulk_action then + return lbm.bulk_action(pos_list, dtime_s) + end + -- emulate non-bulk LBMs + local expect = core.get_node(pos_list[1]).name + -- engine guarantees that + -- 1) all nodes are the same content type + -- 2) the list is up-to-date when we're called + assert(expect ~= "ignore") + for _, pos in ipairs(pos_list) do + local n = core.get_node(pos) + if n.name == expect then -- might have been changed by previous call + lbm.action(pos, n, dtime_s) + end + end +end diff --git a/builtin/game/register.lua b/builtin/game/register.lua index 76cb72f87..3d99a6925 100644 --- a/builtin/game/register.lua +++ b/builtin/game/register.lua @@ -105,7 +105,12 @@ function core.register_lbm(spec) -- Add to core.registered_lbms check_modname_prefix(spec.name) check_node_list(spec.nodenames, "nodenames") - assert(type(spec.action) == "function", "Required field 'action' of type function") + local have = spec.action ~= nil + local have_bulk = spec.bulk_action ~= nil + assert(not have or type(spec.action) == "function", "Field 'action' must be a function") + assert(not have_bulk or type(spec.bulk_action) == "function", "Field 'bulk_action' must be a function") + assert(have ~= have_bulk, "Either 'action' or 'bulk_action' must be present") + core.registered_lbms[#core.registered_lbms + 1] = spec spec.mod_origin = core.get_current_modname() or "??" end diff --git a/builtin/init.lua b/builtin/init.lua index 49df70971..415087a54 100644 --- a/builtin/init.lua +++ b/builtin/init.lua @@ -42,6 +42,7 @@ local scriptdir = core.get_builtin_path() local commonpath = scriptdir .. "common" .. DIR_DELIM local asyncpath = scriptdir .. "async" .. DIR_DELIM +dofile(commonpath .. "math.lua") dofile(commonpath .. "vector.lua") dofile(commonpath .. "strict.lua") dofile(commonpath .. "serialize.lua") diff --git a/builtin/locale/__builtin.be.tr b/builtin/locale/__builtin.be.tr new file mode 100644 index 000000000..bd8ea999e --- /dev/null +++ b/builtin/locale/__builtin.be.tr @@ -0,0 +1,3 @@ +# textdomain: __builtin +You died=Вы загінулі +Respawn=Адрадзіцца diff --git a/builtin/locale/__builtin.bg.tr b/builtin/locale/__builtin.bg.tr new file mode 100644 index 000000000..43fe8f31e --- /dev/null +++ b/builtin/locale/__builtin.bg.tr @@ -0,0 +1,3 @@ +# textdomain: __builtin +You died=Умряхте +Respawn=Прераждане diff --git a/builtin/locale/__builtin.ca.tr b/builtin/locale/__builtin.ca.tr new file mode 100644 index 000000000..5cde155f9 --- /dev/null +++ b/builtin/locale/__builtin.ca.tr @@ -0,0 +1,3 @@ +# textdomain: __builtin +You died=Has mort +Respawn=Reaparèixer diff --git a/builtin/locale/__builtin.cs.tr b/builtin/locale/__builtin.cs.tr new file mode 100644 index 000000000..4f4b592e4 --- /dev/null +++ b/builtin/locale/__builtin.cs.tr @@ -0,0 +1,3 @@ +# textdomain: __builtin +You died=Zemřel jsi +Respawn=Oživit diff --git a/builtin/locale/__builtin.cy.tr b/builtin/locale/__builtin.cy.tr new file mode 100644 index 000000000..372da1a89 --- /dev/null +++ b/builtin/locale/__builtin.cy.tr @@ -0,0 +1,3 @@ +# textdomain: __builtin +You died=Buest ti farw +Respawn=Atgyfodi diff --git a/builtin/locale/__builtin.da.tr b/builtin/locale/__builtin.da.tr new file mode 100644 index 000000000..c34eceeb9 --- /dev/null +++ b/builtin/locale/__builtin.da.tr @@ -0,0 +1,3 @@ +# textdomain: __builtin +You died=Du døde +Respawn=Genopstå diff --git a/builtin/locale/__builtin.de.tr b/builtin/locale/__builtin.de.tr index 0552ef88b..3665a3f54 100644 --- a/builtin/locale/__builtin.de.tr +++ b/builtin/locale/__builtin.de.tr @@ -244,3 +244,5 @@ A total of @1 sample(s) were taken.=Es wurden insgesamt @1 Datenpunkt(e) aufgeze The output is limited to '@1'.=Die Ausgabe ist beschränkt auf „@1“. Saving of profile failed: @1=Speichern des Profils fehlgeschlagen: @1 Profile saved to @1=Profil abgespeichert nach @1 +You died=Sie sind gestorben +Respawn=Wiederbeleben diff --git a/builtin/locale/__builtin.el.tr b/builtin/locale/__builtin.el.tr new file mode 100644 index 000000000..c14180a62 --- /dev/null +++ b/builtin/locale/__builtin.el.tr @@ -0,0 +1,3 @@ +# textdomain: __builtin +You died=Πέθανες +Respawn=Επανεμφάνηση diff --git a/builtin/locale/__builtin.eo.tr b/builtin/locale/__builtin.eo.tr index c3fec6c37..f1fe5333b 100644 --- a/builtin/locale/__builtin.eo.tr +++ b/builtin/locale/__builtin.eo.tr @@ -244,3 +244,5 @@ A total of @1 sample(s) were taken.=Sume @1 ekzemplero(j) konserviĝis. The output is limited to '@1'.=La eligo estas limigita al «@1». Saving of profile failed: @1=Konservado de profilo malsukcesis: @1 Profile saved to @1=Profilo konservita al @1 +You died=Vi mortis +Respawn=Renaskiĝi diff --git a/builtin/locale/__builtin.es.tr b/builtin/locale/__builtin.es.tr new file mode 100644 index 000000000..3c4a66933 --- /dev/null +++ b/builtin/locale/__builtin.es.tr @@ -0,0 +1,3 @@ +# textdomain: __builtin +You died=Has muerto +Respawn=Reaparecer diff --git a/builtin/locale/__builtin.et.tr b/builtin/locale/__builtin.et.tr new file mode 100644 index 000000000..e0745c24a --- /dev/null +++ b/builtin/locale/__builtin.et.tr @@ -0,0 +1,3 @@ +# textdomain: __builtin +You died=Said surma +Respawn=Ärka ellu diff --git a/builtin/locale/__builtin.eu.tr b/builtin/locale/__builtin.eu.tr new file mode 100644 index 000000000..77f510855 --- /dev/null +++ b/builtin/locale/__builtin.eu.tr @@ -0,0 +1,3 @@ +# textdomain: __builtin +You died=Hil zara +Respawn=Birsortu diff --git a/builtin/locale/__builtin.fi.tr b/builtin/locale/__builtin.fi.tr new file mode 100644 index 000000000..f7c0ee038 --- /dev/null +++ b/builtin/locale/__builtin.fi.tr @@ -0,0 +1,3 @@ +# textdomain: __builtin +You died=Kuolit +Respawn=Synny uudelleen diff --git a/builtin/locale/__builtin.fil.tr b/builtin/locale/__builtin.fil.tr new file mode 100644 index 000000000..0755234a1 --- /dev/null +++ b/builtin/locale/__builtin.fil.tr @@ -0,0 +1,3 @@ +# textdomain: __builtin +You died=Namatay ka +Respawn=Mag-respawn diff --git a/builtin/locale/__builtin.fr.tr b/builtin/locale/__builtin.fr.tr new file mode 100644 index 000000000..d36574afd --- /dev/null +++ b/builtin/locale/__builtin.fr.tr @@ -0,0 +1,248 @@ +# textdomain: __builtin +Invalid parameters (see /help @1).=Paramètres invalides (voir /help @1). +Too many arguments, try using just /help =Trop de paramètres, essayez /help +Available commands: @1=Commandes disponibles : @1 +Use '/help ' to get more information, or '/help all' to list everything.=Essayez '/help ' pour obtenir plus d'informations, ou '/help all' pour tout lister. +Available commands:=Commandes disponibles : +Command not available: @1=Commande non disponible : @1 +[all | privs | ] [-t]=[all | privs | ] [-t] +Get help for commands or list privileges (-t: output in chat)=Obtenir de l'aide pour les commandes ou pour lister les privilèges (-t : affichage dans le tchat) +Available privileges:=Privilèges disponibles : +Command=Commande +Parameters=Paramètres +For more information, click on any entry in the list.=Pour plus d'informations, cliquez sur une entrée dans la liste. +Double-click to copy the entry to the chat history.=Double-cliquez pour copier une entrée dans l'historique du tchat. +Command: @1 @2=Commande : @1 @2 +Available commands: (see also: /help )=Commandes disponibles : (voir aussi : /help ) +Close=Fermer +Privilege=Privilège +Description=Description +Empty command.=Commande vide. +Invalid command: @1=Commande invalide : @1 +Invalid command usage.=Usage invalide de la commande. + (@1 s)= (@1 s) +Command execution took @1 s=L'exécution de la commande a pris @1 s. +You don't have permission to run this command (missing privileges: @1).=Vous n'avez pas la permission d'exécuter cette commande (privilèges manquants : @1) +Unable to get position of player @1.=Impossible d'obtenir la position du joueur @1. +Incorrect area format. Expected: (x1,y1,z1) (x2,y2,z2)=Format incorrect de la zone. Demandé : (x1, y1, z1) (x2, y2, z2) += +Show chat action (e.g., '/me orders a pizza' displays ' orders a pizza')=Affiche une action de tchat (ex : '/me commande une pizza' affichage ' commande une pizza') +Show the name of the server owner=Affiche le nom du propriétaire du serveur +The administrator of this server is @1.=L'administrateur de ce serveur est @1. +There's no administrator named in the config file.=Il n'y a pas d'administrateur indiqué dans le fichier de configuration. +@1 does not have any privileges.=@1 ne possède aucun privilège. +Privileges of @1: @2=Privilège(s) de @1 : @2 +[]=[] +Show privileges of yourself or another player=Affiche vos privilèges ou ceux d'un autre joueur. +Player @1 does not exist.=Le joueur @1 n'existe pas. += +Return list of all online players with privilege=Renvoie la liste de tous les joueurs en ligne avec un privilège. +Invalid parameters (see /help haspriv).=Paramètres invalides (voir /help haspriv) +Unknown privilege!=Privilège inconnu ! +No online player has the "@1" privilege.=Aucun joueur en ligne avant le privilège « @1 » +Players online with the "@1" privilege: @2=Joueurs en ligne avec le privilège « @1 » : @2 +Your privileges are insufficient.=Vos privilèges sont insuffisants. +Your privileges are insufficient. '@1' only allows you to grant: @2=Vos privilèges sont insuffisants. '@1' vous autorise seulement d'accorder : @2 +Unknown privilege: @1=Privilège inconnu : @1 +@1 granted you privileges: @2=@1 vous a accordé les privilèges : @2 + ( [, [<...>]] | all)= ( [, [<...>]] | all) +Give privileges to player=Accorder le privilège au joueur +Invalid parameters (see /help grant).=Paramètres invalides (voir /help grant) + [, [<...>]] | all= [, [<...>]] | all +Grant privileges to yourself=Accorder des privilèges à vous-même +Invalid parameters (see /help grantme).=Paramètres invalides (voir /help grantme) +Your privileges are insufficient. '@1' only allows you to revoke: @2=Vos privilèges sont insuffisants. '@1' vous autorise seulement à révoquer : @2 +Note: Cannot revoke in singleplayer: @1=Note : Impossible de révoquer en solo : @1 +Note: Cannot revoke from admin: @1=Note : Impossible de révoquer à l'administrateur : @1 +No privileges were revoked.=Aucun privilège n'a été révoqué. +@1 revoked privileges from you: @2=@1 vous a révoqué le privilège : @2 +Remove privileges from player=Révoquer les privilèges au joueur +Invalid parameters (see /help revoke).=Paramètres invalides (voir /help revoke). +Revoke privileges from yourself=Révoquer des privilèges à vous-même +Invalid parameters (see /help revokeme).=Paramètres invalides (voir /help revokeme). + = +Set player's password (sent unencrypted, thus insecure)=Voir le mot de passe d'un joueur (envoyé non crypté, soit non sécurisé) +Name field required.=Le champ « nom » est requis. +Your password was cleared by @1.=Votre mot de passe a été effacé par @1. +Password of player "@1" cleared.=Mot de passe du joueur « @1 » effacé. +Your password was set by @1.=Votre mot de passe a été défini par @1. +Password of player "@1" set.=Mot de passe « @1 » défini. += +Set empty password for a player=Définir un mot de passe pour un joueur +Reload authentication data=Recharger les données d'authentification +Done.=Fait. +Failed.=Échoué. +Remove a player's data=Supprimer les données d'un joueur +Player "@1" removed.=Joueur « @1 » supprimé. +No such player "@1" to remove.=Aucun joueur « @1 » à supprimer. +Player "@1" is connected, cannot remove.=Le joueur « @1 » est connecté, impossible de supprimer. +Unhandled remove_player return code @1.=La commande remove_player non gérée a retourné le code @1. +Cannot teleport out of map bounds!=Impossible de téléporter en dehors des limites de la carte ! +Cannot get player with name @1.=Impossible d'obtenir le joueur @1. +Cannot teleport, @1 is attached to an object!=Impossible de téléporter, @1 est lié à un objet ! +Teleporting @1 to @2.=Téléportation de @1 vers @2. +One does not teleport to oneself.=Impossible de se téléporter vers soi-même. +Cannot get teleportee with name @1.=Impossible d'obtenir le téléporté @1. +Cannot get target player with name @1.=Impossible d'obtenir le joueur cible @1. +Teleporting @1 to @2 at @3.=Téléportation de @1 vers @2 à @3. +,, | | ,, | =, , | | , , | +Teleport to position or player=Se téléporter vers une position ou un joueur. +You don't have permission to teleport other players (missing privilege: @1).=Vous n'avez pas la permission de téléporter des joueurs (privilège manquant : @1). +([-n] ) | =([-n] ) | +Set or read server configuration setting=Définir ou lire un paramètre de configuration du serveur. +Failed. Cannot modify secure settings. Edit the settings file manually.=Échoué. Impossible de modifier les paramètres sécurisés. Éditez le fichier manuellement. +Failed. Use '/set -n ' to create a new setting.=Échoué. Utilisez '/set -n ' pour créer un nouveau paramètre. +@1 @= @2=@1 @= @2 += +Invalid parameters (see /help set).=Paramètres invalides (voir /help set). +Finished emerging @1 blocks in @2ms.=Fini de générer @1 blocks en @2 ms. +emergeblocks update: @1/@2 blocks emerged (@3%)=Mise à jour de emergeblocks : @1/@2 de blocs générés (@3%) +(here []) | ( )=(here []) | ( ) +Load (or, if nonexistent, generate) map blocks contained in area pos1 to pos2 ( and must be in parentheses)=Charger (ou, si inexistant, générer), des blocs contenus dans la zone de pos1 à pos2 ( et doivent être entre parenthèses) +Started emerge of area ranging from @1 to @2.=Début de la génération de la zone de @1 à @2. +Delete map blocks contained in area pos1 to pos2 ( and must be in parentheses)=Supprimer les blocs contenus dans la zone de pos1 à pos2 ( et doivent être entre parenthèses) +Successfully cleared area ranging from @1 to @2.=La zone de @1 à @2 a été nettoyée avec succès. +Failed to clear one or more blocks in area.=Le nettoyage d'un ou plusieurs blocs dans la zone a echoué. +Resets lighting in the area between pos1 and pos2 ( and must be in parentheses)=Réinitialiser l'éclairage dans la zone de pos1 à pos2 ( et doivent être entre parenthèses) +Successfully reset light in the area ranging from @1 to @2.=L'éclairage dans la zone de @1 à @2 a été réinitialisé avec succès. +Failed to load one or more blocks in area.=Le chargement d'un ou plusieurs blocs dans la zone a échoué. +List mods installed on the server=Liste les modules installés sur le serveur. +No mods installed.=Aucun module installé. +Cannot give an empty item.=Impossible de donner un objet vide. +Cannot give an unknown item.=Impossible de donner un objet inconnu. +Giving 'ignore' is not allowed.=Donner 'ignore' n'est pas autorisé. +@1 is not a known player.=Le joueur @1 est inconnu. +@1 partially added to inventory.=@1 été partiellement rajouté à l'inventaire. +@1 could not be added to inventory.=@1 n'a pas pu être rajouté à l'inventaire. +@1 added to inventory.=@1 a été rajouté à l'inventaire. +@1 partially added to inventory of @2.=@1 a été partiellement rajouté à l'inventaire de @2. +@1 could not be added to inventory of @2.=@1 n'a pas pu être rajouté à l'inventaire de @2. +@1 added to inventory of @2.=@1 a été rajouté à l'inventaire de @2. + [ []]= [ []] +Give item to player=Donner un objet à un joueur +Name and ItemString required.=Le nom et le code de l'objet sont requis + [ []]= [ []] +Give item to yourself=Donner un objet à vous-même +ItemString required.=Code objet requis. + [,,]= [, , ] +Spawn entity at given (or your) position=Faire apparaître une entité à une position donnée (ou la vôtre) +EntityName required.=Nom de l'entité requis. +Unable to spawn entity, player is nil.=Impossible de faire apparaître l'entité, le joueur est inexistant. +Cannot spawn an unknown entity.=Impossible de faire apparaître une entité inconnue. +Invalid parameters (@1).=Paramètres invalides (@1). +@1 spawned.=@1 a apparu. +@1 failed to spawn.=@1 a échoué à apparaître. +Destroy item in hand=Détruire l'objet dans la main +Unable to pulverize, no player.=Impossible de détruire, pas de joueur. +Unable to pulverize, no item in hand.=Impossible de détruire, pas d'objet dans la main. +An item was pulverized.=Un objet a été détruit. +[] [] []=[] [] [] +Check who last touched a node or a node near it within the time specified by . Default: range @= 0, seconds @= 86400 @= 24h, limit @= 5. Set to inf for no time limit=Vérifier qui a le dernier touché un nœud ou un autre aux environs dans le temps spécifié par . Par défaut : rayon @= 0, secondes @= 86400 @= 24h, limite @= 5. Définissez à inf pour aucune limite de temps. +Rollback functions are disabled.=Les fonctions retour sont désactivées. +That limit is too high!=Cette limite est trop grande ! +Checking @1 ...=Vérification de @1 ... +Nobody has touched the specified location in @1 seconds.=Personne n'as touché la position spécificée dans les dernières @1 secondes. +@1 @2 @3 -> @4 @5 seconds ago.=@1 @2 @3 -> @4 il y a @5 secondes. +Punch a node (range@=@1, seconds@=@2, limit@=@3).=Taper un nœud (rayon @= @1, secondes @= @2, limite @= @3). +( []) | (: [])=( []) | (: []) +Revert actions of a player. Default for is 60. Set to inf for no time limit=Annuler les actions d'un joueur. La valeur par défaut de est 60. Définissez à inf pour aucune limite de temps. +Invalid parameters. See /help rollback and /help rollback_check.=Paramètres invalides. Voir /help rollback et /help rollback_check. +Reverting actions of player '@1' since @2 seconds.=Annuler les actions du joueur '@1' depuis @2 secondes. +Reverting actions of @1 since @2 seconds.=Annuler les actions de @1 depuis @2 secondes. +(log is too long to show)=(le journal est trop long à afficher) +Reverting actions succeeded.=Les actions ont été annulées avec succès. +Reverting actions FAILED.=L'annulation des actions a échoué. +Show server status=Afficher le statut du serveur. +This command was disabled by a mod or game.=Cette commande a été désactivée par un module ou un jeu. +[<0..23>:<0..59> | <0..24000>]=[<0..23>:<0..59> | <0.24000>] +Show or set time of day=Afficher ou définir l'heure du jour. +Current time is @1:@2.=L'heure actuelle est @1:@2. +You don't have permission to run this command (missing privilege: @1).=Vous n'avez pas la permission d'exécuter cette commande (privilège manquant : @1) +Invalid time (must be between 0 and 24000).=Heure invalide (doit être comprise entre 0 et 24000). +Time of day changed.=L'heure du jour a changé. +Invalid hour (must be between 0 and 23 inclusive).=Heure invalide (doit être comprise entre 0 et 23 inclus). +Invalid minute (must be between 0 and 59 inclusive).=Minute invalide (doit être comprise entre 0 et 59 inclus). +Show day count since world creation=Afficher le nombre de jours écoulés depuis la création du monde. +Current day is @1.=Le jour actuel est @1. +[ | -1] [-r] []=[ | -1] [-r] [] +Shutdown server (-1 cancels a delayed shutdown, -r allows players to reconnect)=Éteindre le serveur (-1 annule une extinction programmée, -r autorise les joueurs à se reconnecter) +Server shutting down (operator request).=Extinction du serveur (requête de l'opérateur). +Ban the IP of a player or show the ban list=Bannir l'IP d'un joueur ou affiche la liste des bans. +The ban list is empty.=La liste des bans est vide. +Ban list: @1=Liste de bans : @1 +You cannot ban players in singleplayer!=Vous ne pouvez pas bannir des joueurs en solo ! +Player is not online.=Le joueur n'est pas en ligne. +Failed to ban player.=Le bannissement du joueur a échoué. +Banned @1.=@1 a été banni. + | = | +Remove IP ban belonging to a player/IP=Rétablir un IP appartenant à un joueur ou une adresse IP. +Failed to unban player/IP.=Le rétablissement du joueur ou de l'adresse IP a échoué. +Unbanned @1.=@1 a été rétabli. + []= [] +Kick a player=Expulser un joueur +Failed to kick player @1.=L'expulsion du joueur @1 a échoué. +Kicked @1.=@1 a été expulsé. +[full | quick]=[full | quick] +Clear all objects in world=Nettoyer tous les objets dans le monde +Invalid usage, see /help clearobjects.=Usage invalide, voir /help clearobjects. +Clearing all objects. This may take a long time. You may experience a timeout. (by @1)=Nettoyage de tous les objects. Cela peut prendre du temps. Une inactivité peut surveni (par @1). +Cleared all objects.=Tous les objets ont été nettoyés. + = +Send a direct message to a player=Envoyer un message privé à un joueur. +Invalid usage, see /help msg.=Usage invalide, voir /help msg. +The player @1 is not online.=Le joueur @1 n'est pas en ligne. +DM from @1: @2=Message privé de @1 : @2 +Message sent.=Message privé envoyé. +Get the last login time of a player or yourself=Obtenir l'horodatage de la dernière connexion d'un joueur ou de vous-même. +@1's last login time was @2.=@1 s'est connecté pour la dernière fois au @2. +@1's last login time is unknown.=L'horodatage de la dernière connexion de @1 est inconnu. +Clear the inventory of yourself or another player=Vider votre inventaire ou celui d'un autre joueur. +You don't have permission to clear another player's inventory (missing privilege: @1).=Vous n'avez pas la permission de vider l'inventaire d'un autre joueur (privilège manquant : @1). +@1 cleared your inventory.=@1 a vidé votre inventaire. +Cleared @1's inventory.=L'inventaire de @1 a été vidé. +Player must be online to clear inventory!=Le joueur doit être en ligne pour pouvoir vider son inventaire. +Players can't be killed, damage has been disabled.=Les joueurs ne peuvent pas être tués, les dommages ont été désactivés. +Player @1 is not online.=Le joueur @1 n'est pas en ligne. +You are already dead.=Vous êtes déjà mort. +@1 is already dead.=@1 est déjà mort. +@1 has been killed.=@1 a été tué. +Kill player or yourself=Tuer un joueur ou vous-même. +@1 joined the game.=@1 a rejoint la partie. +@1 left the game.=@1 a quitté la partie. +@1 left the game (timed out).=@1 a quitté la partie (inactivité). +(no description)=(sans description) +Can interact with things and modify the world=Peut interagir avec des éléments ou modifier le monde. +Can speak in chat=Peut écrire dans le tchat. +Can modify basic privileges (@1)=Peut modifier les privilèges basiques (@1) +Can modify privileges=Peut modifier les privilèges +Can teleport self=Peut se téléporter +Can teleport other players=Peut téléporter d'autres joueurs +Can set the time of day using /time=Peut définir l'heure du jour avec /time +Can do server maintenance stuff=Peut effectuer des tâches de maintenance du serveur +Can bypass node protection in the world=Peut outrepasser la protection des nœuds dans le monde. +Can ban and unban players=Peut bannir et rétablir des joueurs. +Can kick players=Peut expulser des joueurs. +Can use /give and /giveme=Peut utiliser /give et /giveme +Can use /setpassword and /clearpassword=Peut utiliser /setpassword et /clearpassword +Can use fly mode=Peut utiliser le mode vol +Can use fast mode=Peut utiliser le mode rapide +Can fly through solid nodes using noclip mode=Peut voler à travers des nœuds solides en utilisant le mode de collisions désactivées. +Can use the rollback functionality=Peut utiliser la fonctionnalité de retour +Can enable wireframe=Peut activer la vue fil de fer +Unknown Item=Objet inconnu +Air=Air +Ignore=Ignorer +You can't place 'ignore' nodes!=Vous ne pouvez pas placé de nœuds 'ignorés' ! +print [] | dump [] | save [ []] | reset=print [] | dump [] | save [ []] | reset +Handle the profiler and profiling data=Traiter le profileur et les données de profilage +Statistics written to action log.=Les statistiques sont écrites dans les journaux d'actions. +Statistics were reset.=Les statistiques ont été réinitialisées. +Usage: @1=Usage : @1 +Format can be one of txt, csv, lua, json, json_pretty (structures may be subject to change).=Le format peut être txt, csv, lua, json ou json_pretty (les structures sont sujettes au changement). +Values below show absolute/relative times spend per server step by the instrumented function.=Les valeurs inférieures affichent les temps absolu et relatif dépensés par étape du serveur par la fonction utilisée. +A total of @1 sample(s) were taken.=@1 échantillons ont été collectés. +The output is limited to '@1'.=La sortie est limitée à '@1'. +Saving of profile failed: @1=La sauvegarde du profil a échoué : @1 +Profile saved to @1=Le profil a été sauvegardé dans @1 +You died=Vous êtes mort +Respawn=Réapparaître diff --git a/builtin/locale/__builtin.ga.tr b/builtin/locale/__builtin.ga.tr new file mode 100644 index 000000000..e19959b10 --- /dev/null +++ b/builtin/locale/__builtin.ga.tr @@ -0,0 +1,3 @@ +# textdomain: __builtin +You died=Fuair tú bás +Respawn=Athsceith diff --git a/builtin/locale/__builtin.gl.tr b/builtin/locale/__builtin.gl.tr new file mode 100644 index 000000000..7f692f633 --- /dev/null +++ b/builtin/locale/__builtin.gl.tr @@ -0,0 +1,3 @@ +# textdomain: __builtin +You died=Morreches +Respawn=Reaparecer diff --git a/builtin/locale/__builtin.hu.tr b/builtin/locale/__builtin.hu.tr new file mode 100644 index 000000000..d7eebf7a0 --- /dev/null +++ b/builtin/locale/__builtin.hu.tr @@ -0,0 +1,3 @@ +# textdomain: __builtin +You died=Meghaltál +Respawn=Újraéledés diff --git a/builtin/locale/__builtin.id.tr b/builtin/locale/__builtin.id.tr index a541b0f8c..a7eba8c1c 100644 --- a/builtin/locale/__builtin.id.tr +++ b/builtin/locale/__builtin.id.tr @@ -244,3 +244,5 @@ A total of @1 sample(s) were taken.=Total @1 sampel yang diambil. The output is limited to '@1'.=Keluaran dibatasi ke '@1'. Saving of profile failed: @1=Penyimpanan profil gagal: @1 Profile saved to @1=Profil disimpan ke @1 +You died=Anda mati +Respawn=Bangkit kembali diff --git a/builtin/locale/__builtin.it.tr b/builtin/locale/__builtin.it.tr index aecb80a9a..24cf38104 100644 --- a/builtin/locale/__builtin.it.tr +++ b/builtin/locale/__builtin.it.tr @@ -245,3 +245,5 @@ A total of @1 sample(s) were taken.=Son stati ottenuti campioni per un totale di The output is limited to '@1'.=L'output è limitato a '@1'. Saving of profile failed: @1=Errore nel salvare il profilo: @1 Profile saved to @1=Profilo salvato in @1 +You died=Sei morto +Respawn=Rinasci diff --git a/builtin/locale/__builtin.ja.tr b/builtin/locale/__builtin.ja.tr new file mode 100644 index 000000000..1138edddd --- /dev/null +++ b/builtin/locale/__builtin.ja.tr @@ -0,0 +1,3 @@ +# textdomain: __builtin +You died=死んでしまった +Respawn=リスポーン diff --git a/builtin/locale/__builtin.jbo.tr b/builtin/locale/__builtin.jbo.tr new file mode 100644 index 000000000..fe492bcdb --- /dev/null +++ b/builtin/locale/__builtin.jbo.tr @@ -0,0 +1,3 @@ +# textdomain: __builtin +You died=.i do morsi +Respawn=tolcanci diff --git a/builtin/locale/__builtin.jv.tr b/builtin/locale/__builtin.jv.tr new file mode 100644 index 000000000..282cc5476 --- /dev/null +++ b/builtin/locale/__builtin.jv.tr @@ -0,0 +1,3 @@ +# textdomain: __builtin +You died=Panjenengan pejah +Respawn=Bangkit Malilh diff --git a/builtin/locale/__builtin.ko.tr b/builtin/locale/__builtin.ko.tr new file mode 100644 index 000000000..0d5d35a90 --- /dev/null +++ b/builtin/locale/__builtin.ko.tr @@ -0,0 +1,3 @@ +# textdomain: __builtin +You died=사망했습니다 +Respawn=리스폰 diff --git a/builtin/locale/__builtin.kv.tr b/builtin/locale/__builtin.kv.tr new file mode 100644 index 000000000..f985d2ac4 --- /dev/null +++ b/builtin/locale/__builtin.kv.tr @@ -0,0 +1,3 @@ +# textdomain: __builtin +You died=Кулінныд +Respawn=Ловзьыны diff --git a/builtin/locale/__builtin.ky.tr b/builtin/locale/__builtin.ky.tr new file mode 100644 index 000000000..9ad468aa0 --- /dev/null +++ b/builtin/locale/__builtin.ky.tr @@ -0,0 +1,3 @@ +# textdomain: __builtin +You died=Сиз өлдүңүз. +Respawn=Кайтадан жаралуу diff --git a/builtin/locale/__builtin.lt.tr b/builtin/locale/__builtin.lt.tr new file mode 100644 index 000000000..cc613162c --- /dev/null +++ b/builtin/locale/__builtin.lt.tr @@ -0,0 +1,3 @@ +# textdomain: __builtin +You died=Jūs numirėte +Respawn=Prisikelti diff --git a/builtin/locale/__builtin.lv.tr b/builtin/locale/__builtin.lv.tr new file mode 100644 index 000000000..1da1fe3d8 --- /dev/null +++ b/builtin/locale/__builtin.lv.tr @@ -0,0 +1,3 @@ +# textdomain: __builtin +You died=Jūs nomirāt +Respawn=Atdzīvoties diff --git a/builtin/locale/__builtin.lzh.tr b/builtin/locale/__builtin.lzh.tr new file mode 100644 index 000000000..1af6aba98 --- /dev/null +++ b/builtin/locale/__builtin.lzh.tr @@ -0,0 +1,3 @@ +# textdomain: __builtin +You died=尔死矣 +Respawn=复生 diff --git a/builtin/locale/__builtin.mn.tr b/builtin/locale/__builtin.mn.tr new file mode 100644 index 000000000..dd9a3465b --- /dev/null +++ b/builtin/locale/__builtin.mn.tr @@ -0,0 +1,3 @@ +# textdomain: __builtin +You died=Та үхсэн +Respawn=Дахин төрөх diff --git a/builtin/locale/__builtin.mr.tr b/builtin/locale/__builtin.mr.tr new file mode 100644 index 000000000..e4fcfb9b1 --- /dev/null +++ b/builtin/locale/__builtin.mr.tr @@ -0,0 +1,3 @@ +# textdomain: __builtin +You died=तू मेलास +Respawn=पुनर्जन्म diff --git a/builtin/locale/__builtin.ms.tr b/builtin/locale/__builtin.ms.tr index ebf794e97..65ac557bf 100644 --- a/builtin/locale/__builtin.ms.tr +++ b/builtin/locale/__builtin.ms.tr @@ -244,3 +244,5 @@ A total of @1 sample(s) were taken.=Sebanyak @1 sampel telah diambil secara kese The output is limited to '@1'.=Output dihadkan kepada '@1'. Saving of profile failed: @1=Penyimpanan profil telah gagal: @1 Profile saved to @1=Profil telah disimpan ke @1 +You died=Anda telah meninggal +Respawn=Jelma semula diff --git a/builtin/locale/__builtin.nb.tr b/builtin/locale/__builtin.nb.tr new file mode 100644 index 000000000..b02a2d282 --- /dev/null +++ b/builtin/locale/__builtin.nb.tr @@ -0,0 +1,3 @@ +# textdomain: __builtin +You died=Du døde +Respawn=Gjenoppstå diff --git a/builtin/locale/__builtin.nl.tr b/builtin/locale/__builtin.nl.tr new file mode 100644 index 000000000..bd23c04b0 --- /dev/null +++ b/builtin/locale/__builtin.nl.tr @@ -0,0 +1,3 @@ +# textdomain: __builtin +You died=Je bent gestorven +Respawn=Herboren worden diff --git a/builtin/locale/__builtin.nn.tr b/builtin/locale/__builtin.nn.tr new file mode 100644 index 000000000..240191f73 --- /dev/null +++ b/builtin/locale/__builtin.nn.tr @@ -0,0 +1,3 @@ +# textdomain: __builtin +You died=Du døydde +Respawn=Kom opp att diff --git a/builtin/locale/__builtin.oc.tr b/builtin/locale/__builtin.oc.tr new file mode 100644 index 000000000..34b6577ad --- /dev/null +++ b/builtin/locale/__builtin.oc.tr @@ -0,0 +1,3 @@ +# textdomain: __builtin +You died=Setz mòrt·a +Respawn=Tornar diff --git a/builtin/locale/__builtin.pl.tr b/builtin/locale/__builtin.pl.tr new file mode 100644 index 000000000..ec0a9b7c1 --- /dev/null +++ b/builtin/locale/__builtin.pl.tr @@ -0,0 +1,3 @@ +# textdomain: __builtin +You died=Nie żyjesz +Respawn=Wróć do gry diff --git a/builtin/locale/__builtin.pt.tr b/builtin/locale/__builtin.pt.tr new file mode 100644 index 000000000..fbdb461e5 --- /dev/null +++ b/builtin/locale/__builtin.pt.tr @@ -0,0 +1,3 @@ +# textdomain: __builtin +You died=Você morreu +Respawn=Renascer diff --git a/builtin/locale/__builtin.pt_BR.tr b/builtin/locale/__builtin.pt_BR.tr new file mode 100644 index 000000000..e48425bda --- /dev/null +++ b/builtin/locale/__builtin.pt_BR.tr @@ -0,0 +1,248 @@ +# textdomain: __builtin +Invalid parameters (see /help @1).=Parâmetros inválidos (veja /help @1). +Too many arguments, try using just /help =Muitos argumentos, tente usar apenas /help +Available commands: @1=Comandos disponíveis: @1 +Use '/help ' to get more information, or '/help all' to list everything.=Use '/help ' para obter mais informações, ou '/help all' para listar tudo. +Available commands:=Comandos disponíveis: +Command not available: @1=Comando não disponível: @1 +[all | privs | ] [-t]=[all | privs | ] [-t] +Get help for commands or list privileges (-t: output in chat)=Obtenha ajuda para comandos ou liste privilégios (-t: saída no chat) +Available privileges:=Privilégios disponíveis: +Command=Comando +Parameters=Parâmetros +For more information, click on any entry in the list.=Para mais informações, clique em qualquer entrada na lista. +Double-click to copy the entry to the chat history.=Clique duas vezes para copiar a entrada para o histórico do chat. +Command: @1 @2=Comando: @1 @2 +Available commands: (see also: /help )=Comandos disponíveis: (veja também: /help ) +Close=Fechar +Privilege=Privilégio +Description=Descrição +Empty command.=Comando vazio. +Invalid command: @1=Comando inválido: @1 +Invalid command usage.=Uso de comando inválido. + (@1 s)= (@1 s) +Command execution took @1 s=A execução do comando levou @1 s +You don't have permission to run this command (missing privileges: @1).=Você não tem permissão para executar este comando (privilégios faltando: @1). +Unable to get position of player @1.=Incapaz de obter a posição do jogador @1. +Incorrect area format. Expected: (x1,y1,z1) (x2,y2,z2)=Formato de área incorreto. Esperado: (x1,y1,z1) (x2,y2,z2) += +Show chat action (e.g., '/me orders a pizza' displays ' orders a pizza')=Mostra a ação do chat (por exemplo, '/me orders a pizza' exibe ' pede uma pizza') +Show the name of the server owner=Mostra o nome do dono do servidor +The administrator of this server is @1.=O administrador deste servidor é @1. +There's no administrator named in the config file.=Não há administrador nomeado no arquivo de configuração. +@1 does not have any privileges.=@1 não tem nenhum privilégio. +Privileges of @1: @2=Privilégios de @1: @2 +[]=[] +Show privileges of yourself or another player=Mostrar privilégios seus ou de outro jogador +Player @1 does not exist.=O jogador @1 não existe. += +Return list of all online players with privilege=Retornar lista de todos os jogadores online com privilégio +Invalid parameters (see /help haspriv).=Parâmetros inválidos (veja /help haspriv). +Unknown privilege!=Privilégio desconhecido! +No online player has the "@1" privilege.=Nenhum jogador online tem o privilégio "@1". +Players online with the "@1" privilege: @2=Jogadores online com o privilégio "@1": @2 +Your privileges are insufficient.=Seus privilégios são insuficientes. +Your privileges are insufficient. '@1' only allows you to grant: @2=Seus privilégios são insuficientes. '@1' só permite que você conceda: @2 +Unknown privilege: @1=Privilégio desconhecido: @1 +@1 granted you privileges: @2=@1 concedeu-lhe privilégios: @2 + ( [, [<...>]] | all)= ( [, [<...>]] | all) +Give privileges to player=Conceder privilégios ao jogador +Invalid parameters (see /help grant).=Parâmetros inválidos (veja /help grant). + [, [<...>]] | all= [, [<...>]] | all +Grant privileges to yourself=Concede privilégios a você mesmo +Invalid parameters (see /help grantme).=Parâmetros inválidos (veja /help grantme). +Your privileges are insufficient. '@1' only allows you to revoke: @2=Seus privilégios são insuficientes. '@1' só permite que você revogue: @2 +Note: Cannot revoke in singleplayer: @1=Nota: Não é possível revogar em singleplayer: @1 +Note: Cannot revoke from admin: @1=Nota: Não é possível revogar do administrador: @1 +No privileges were revoked.=Nenhum privilégio foi revogado. +@1 revoked privileges from you: @2=@1 revogou seus privilégios: @2 +Remove privileges from player=Remover privilégios do jogador +Invalid parameters (see /help revoke).=Parâmetros inválidos (veja /help revoke). +Revoke privileges from yourself=Revogar privilégios de si mesmo +Invalid parameters (see /help revokeme).=Parâmetros inválidos (veja /help revokeme). + = +Set player's password (sent unencrypted, thus insecure)=Definir a senha do jogador (enviada sem criptografia, portanto insegura) +Name field required.=Campo de nome obrigatório. +Your password was cleared by @1.=Sua senha foi limpa por @1. +Password of player "@1" cleared.=Senha do jogador "@1" limpa. +Your password was set by @1.=Sua senha foi definida por @1. +Password of player "@1" set.=Senha do jogador "@1" definida. += +Set empty password for a player=Definir senha vazia para um jogador +Reload authentication data=Recarregar dados de autenticação +Done.=Pronto. +Failed.=Erro. +Remove a player's data=Remover dados de um jogador +Player "@1" removed.=Jogador "@1" removido. +No such player "@1" to remove.=Não existe tal jogador "@1" para remover. +Player "@1" is connected, cannot remove.=Jogador "@1" está conectado, não pode ser removido. +Unhandled remove_player return code @1.=Código de retorno remove_player não tratado @1. +Cannot teleport out of map bounds!=Não é possível teleportar para fora dos limites do mapa! +Cannot get player with name @1.=Não é possível obter jogador com o nome @1. +Cannot teleport, @1 is attached to an object!=Não é possível teleportar, @1 está anexado a um objeto! +Teleporting @1 to @2.=Teleportando @1 para @2. +One does not teleport to oneself.=Não tem como se teletransportar para você mesmo. +Cannot get teleportee with name @1.=Não é possível teletransportar com o nome @1. +Cannot get target player with name @1.=Não é possível obter jogador alvo com o nome @1. +Teleporting @1 to @2 at @3.=Teleportando @1 para @2 em @3. +,, | | ,, | =,, | | ,, | +Teleport to position or player=Teleportar para posição ou um jogador +You don't have permission to teleport other players (missing privilege: @1).=Você não tem permissão para teleportar outros jogadores (privilégio faltando: @1). +([-n] ) | =([-n] ) | +Set or read server configuration setting=Definir ou ler configuração do servidor +Failed. Cannot modify secure settings. Edit the settings file manually.=Falha. Não é possível modificar configurações seguras. Edite o arquivo de configurações manualmente. +Failed. Use '/set -n ' to create a new setting.=Falhou. Use '/set -n ' para criar uma nova configuração. +@1 @= @2=@1 @= @2 += +Invalid parameters (see /help set).=Parâmetros inválidos (veja /help set). +Finished emerging @1 blocks in @2ms.=Finalizada a emergência de @1 blocos em @2ms. +emergeblocks update: @1/@2 blocks emerged (@3%)=atualização de emergeblocks: @1/@2 blocos emergidos (@3%) +(here []) | ( )=(aqui []) | ( ) +Load (or, if nonexistent, generate) map blocks contained in area pos1 to pos2 ( and must be in parentheses)=Carregar (ou, se inexistente, gerar) blocos de mapa contidos na área pos1 a pos2 ( e devem estar entre parênteses) +Started emerge of area ranging from @1 to @2.=Iniciada o surgimento de áreas que vão de @1 a @2. +Delete map blocks contained in area pos1 to pos2 ( and must be in parentheses)=Excluir blocos de mapa contidos na área pos1 a pos2 ( e devem estar entre parênteses) +Successfully cleared area ranging from @1 to @2.=Área limpa com sucesso variando de @1 a @2. +Failed to clear one or more blocks in area.=Falha ao limpar um ou mais blocos na área. +Resets lighting in the area between pos1 and pos2 ( and must be in parentheses)=Redefine a iluminação na área entre pos1 e pos2 ( e devem estar entre parênteses) +Successfully reset light in the area ranging from @1 to @2.=Iluminação redefinida com sucesso na área variando de @1 a @2. +Failed to load one or more blocks in area.=Falha ao carregar um ou mais blocos na área. +List mods installed on the server=Listar mods instalados no servidor +No mods installed.=Sem mods instalados. +Cannot give an empty item.=Não é possível dar um item vazio. +Cannot give an unknown item.=Não é possível dar um item desconhecido. +Giving 'ignore' is not allowed.=Não é permitido dar 'ignore'. +@1 is not a known player.=@1 não é um jogador conhecido. +@1 partially added to inventory.=@1 parcialmente adicionado ao inventário. +@1 could not be added to inventory.=@1 não pôde ser adicionado ao inventário. +@1 added to inventory.=@1 adicionado ao inventário. +@1 partially added to inventory of @2.=@1 parcialmente adicionado ao inventário de @2. +@1 could not be added to inventory of @2.=@1 não pôde ser adicionado ao inventário de @2. +@1 added to inventory of @2.=@1 adicionado ao inventário de @2. + [ []]= [ []] +Give item to player=Dar item ao jogador +Name and ItemString required.=Nome e ItemString são obrigatórios. + [ []]= [ []] +Give item to yourself=Dar item a si mesmo +ItemString required.=ItemString é obrigatório. + [,,]= [,,] +Spawn entity at given (or your) position=Gerar entidade na posição fornecida (ou na sua) +EntityName required.=NomeDaEntidade é obrigatório. +Unable to spawn entity, player is nil.=Não é possível gerar a entidade, jogador é nulo. +Cannot spawn an unknown entity.=Não é possível gerar uma entidade desconhecida. +Invalid parameters (@1).=Parâmetros inválidos (@1). +@1 spawned.=@1 gerado. +@1 failed to spawn.=Falha ao gerar @1. +Destroy item in hand=Destruir item na mão +Unable to pulverize, no player.=Incapaz de pulverizar, sem jogador. +Unable to pulverize, no item in hand.=Incapaz de pulverizar, sem item na mão. +An item was pulverized.=Um item foi pulverizado. +[] [] []=[] [] [] +Check who last touched a node or a node near it within the time specified by . Default: range @= 0, seconds @= 86400 @= 24h, limit @= 5. Set to inf for no time limit=Verificar quem tocou pela última vez um nó ou um nó próximo dentro do tempo especificado por . Padrão: alcance @= 0, segundos @= 86400 @= 24h, limite @= 5. Defina como inf para sem limite de tempo +Rollback functions are disabled.=Funções de rollback estão desativadas. +That limit is too high!=Esse limite é muito alto! +Checking @1 ...=Verificando @1 ... +Nobody has touched the specified location in @1 seconds.=Ninguém tocou a localização especificada em @1 segundos. +@1 @2 @3 -> @4 @5 seconds ago.=@1 @2 @3 -> @4 @5 segundos atrás. +Punch a node (range@=@1, seconds@=@2, limit@=@3).=Golpeie um nó (alcance@=@1, segundos@=@2, limite@=@3). +( []) | (: [])=( []) | (: []) +Revert actions of a player. Default for is 60. Set to inf for no time limit=Reverter ações de um jogador. O padrão para é 60. Defina como inf para sem limite de tempo +Invalid parameters. See /help rollback and /help rollback_check.=Parâmetros inválidos. Veja /help rollback e /help rollback_check. +Reverting actions of player '@1' since @2 seconds.=Revertendo ações do jogador '@1' desde @2 segundos. +Reverting actions of @1 since @2 seconds.=Revertendo ações de @1 desde @2 segundos. +(log is too long to show)=O log é muito longo para mostrar +Reverting actions succeeded.=Ações revertidas com sucesso. +Reverting actions FAILED.=Reversão de ações FALHOU. +Show server status=Mostrar status do servidor +This command was disabled by a mod or game.=Este comando foi desativado por um mod ou jogo. +[<0..23>:<0..59> | <0..24000>]=[<0..23>:<0..59> | <0..24000>] +Show or set time of day=Mostrar ou definir hora do dia +Current time is @1:@2.=A hora atual é @1:@2. +You don't have permission to run this command (missing privilege: @1).=Você não tem permissão para executar este comando (privilégio faltando: @1). +Invalid time (must be between 0 and 24000).=Hora inválida (deve estar entre 0 e 24000). +Time of day changed.=Hora do dia alterada. +Invalid hour (must be between 0 and 23 inclusive).=Hora inválida (deve estar entre 0 e 23 inclusivo). +Invalid minute (must be between 0 and 59 inclusive).=Minuto inválido (deve estar entre 0 e 59 inclusivo). +Show day count since world creation=Mostrar contagem de dias desde a criação do mundo +Current day is @1.=O dia atual é @1. +[ | -1] [-r] []=[ | -1] [-r] [] +Shutdown server (-1 cancels a delayed shutdown, -r allows players to reconnect)=Desligar servidor (-1 cancela o desligamento adiado, -r permite que os jogadores se reconectem) +Server shutting down (operator request).=Servidor desligando (solicitação do operador). +Ban the IP of a player or show the ban list=Banir o IP de um jogador ou mostrar a lista de banimentos +The ban list is empty.=A lista de banimentos está vazia. +Ban list: @1=Lista de banimentos: @1 +You cannot ban players in singleplayer!=Você não pode banir jogadores em singleplayer! +Player is not online.=Jogador não está online. +Failed to ban player.=Falha ao banir jogador. +Banned @1.=Banido @1. + | = | +Remove IP ban belonging to a player/IP=Remover banimento de IP pertencente a um jogador/IP +Failed to unban player/IP.=Falha ao desbanir jogador/IP. +Unbanned @1.=Desbanido @1. + []= [] +Kick a player=Expulsar um jogador +Failed to kick player @1.=Falha ao expulsar jogador @1. +Kicked @1.=Expulso @1. +[full | quick]=[full | quick] +Clear all objects in world=Limpar todos os objetos no mundo +Invalid usage, see /help clearobjects.=Uso inválido, veja /help clearobjects. +Clearing all objects. This may take a long time. You may experience a timeout. (by @1)=Limpeza de todos os objetos. Isso pode levar muito tempo. Você pode experimentar um tempo limite. (por @1) +Cleared all objects.=Todos os objetos foram limpos. + = +Send a direct message to a player=Enviar uma mensagem direta a um jogador +Invalid usage, see /help msg.=Uso inválido, veja /help msg. +The player @1 is not online.=O jogador @1 não está online. +DM from @1: @2=DM de @1: @2 +Message sent.=Mensagem enviada. +Get the last login time of a player or yourself=Pegue o último horário de login de um jogador ou de você mesmo +@1's last login time was @2.=O último login de @1 foi às @2. +@1's last login time is unknown.=O último login de @1 é desconhecido. +Clear the inventory of yourself or another player=Limpar o inventário de você mesmo ou de outro jogador +You don't have permission to clear another player's inventory (missing privilege: @1).=Você não tem permissão para limpar o inventário de outro jogador (privilégio faltando: @1). +@1 cleared your inventory.=@1 limpou seu inventário. +Cleared @1's inventory.=Inventário de @1 limpo. +Player must be online to clear inventory!=O jogador deve estar online para limpar o inventário! +Players can't be killed, damage has been disabled.=Jogadores não podem ser mortos, o dano foi desativado. +Player @1 is not online.=Jogador @1 não está online. +You are already dead.=Você já está morto. +@1 is already dead.=@1 já está morto. +@1 has been killed.=@1 foi morto. +Kill player or yourself=Matar jogador ou a si mesmo +@1 joined the game.=@1 entrou no jogo. +@1 left the game.=@1 saiu do jogo. +@1 left the game (timed out).=@1 saiu do jogo (tempo esgotado) +(no description)=(sem descrição) +Can interact with things and modify the world=Pode interagir com as coisas e modificar o mundo +Can speak in chat=Pode falar no chat +Can modify basic privileges (@1)=Pode modificar privilégios básicos (@1) +Can modify privileges=Pode modificar privilégios +Can teleport self=Pode se teletransportar +Can teleport other players=Pode teletransportar outros jogadores +Can set the time of day using /time=Pode definir a hora do dia usando /time +Can do server maintenance stuff=Pode realizar tarefas de manutenção do servidor +Can bypass node protection in the world=Pode ignorar a proteção de nós no mundo +Can ban and unban players=Pode banir e desbanir jogadores +Can kick players=Pode chutar jogadores +Can use /give and /giveme=Pode usar /give e /giveme +Can use /setpassword and /clearpassword=Pode usar /setpassword e /clearpassword +Can use fly mode=Pode usar o modo voar +Can use fast mode=Pode usar o modo rápido +Can fly through solid nodes using noclip mode=Pode voar através de nós sólidos usando o modo noclip +Can use the rollback functionality=Pode usar a funcionalidade de reversão +Can enable wireframe=Pode ativar wireframe +Unknown Item=Item desconhecido +Air=Ar +Ignore=Ignorar +You can't place 'ignore' nodes!=Você não pode colocar nós 'ignorar'! +print [] | dump [] | save [ []] | reset=print [] | dump [] | save [ []] | reset +Handle the profiler and profiling data=Lidar com o criador de perfil e os dados de criação de perfil +Statistics written to action log.=Estatísticas salvas no log de ações. +Statistics were reset.=As estatísticas foram redefinidas. +Usage: @1=Uso: @1 +Format can be one of txt, csv, lua, json, json_pretty (structures may be subject to change).=O formato pode ser txt, csv, lua, json, json_pretty (as estruturas podem estar sujeitas a alterações). +Values below show absolute/relative times spend per server step by the instrumented function.=Os valores abaixo mostram os tempos absolutos/relativos gastos por etapa do servidor pela função instrumentada. +A total of @1 sample(s) were taken.=Um total de @1 amostra(s) foi coletada. +The output is limited to '@1'.=A saída é limitada a '@1'. +Saving of profile failed: @1=Falha ao salvar o perfil: @1 +Profile saved to @1=Perfil salvo em @1 +You died=Você morreu +Respawn=Reviver diff --git a/builtin/locale/__builtin.ro.tr b/builtin/locale/__builtin.ro.tr new file mode 100644 index 000000000..7ff5e3c38 --- /dev/null +++ b/builtin/locale/__builtin.ro.tr @@ -0,0 +1,3 @@ +# textdomain: __builtin +You died=Ai murit +Respawn=Reînviere diff --git a/builtin/locale/__builtin.ru.tr b/builtin/locale/__builtin.ru.tr index d43fbc589..863cdd638 100644 --- a/builtin/locale/__builtin.ru.tr +++ b/builtin/locale/__builtin.ru.tr @@ -244,3 +244,5 @@ A total of @1 sample(s) were taken.=Всего было взято @1 образ The output is limited to '@1'.=Вывод ограничен значением '@1'. Saving of profile failed: @1=Не удалось сохранить данные профилирования: @1 Profile saved to @1=Данные профилирования сохранены в @1 +You died=Вы умерли +Respawn=Возродиться diff --git a/builtin/locale/__builtin.sk.tr b/builtin/locale/__builtin.sk.tr new file mode 100644 index 000000000..e9e93f6a3 --- /dev/null +++ b/builtin/locale/__builtin.sk.tr @@ -0,0 +1,3 @@ +# textdomain: __builtin +You died=Zomrel si +Respawn=Oživiť diff --git a/builtin/locale/__builtin.sl.tr b/builtin/locale/__builtin.sl.tr new file mode 100644 index 000000000..6dc77c3b2 --- /dev/null +++ b/builtin/locale/__builtin.sl.tr @@ -0,0 +1,3 @@ +# textdomain: __builtin +You died=Umrl si +Respawn=Ponovno oživi diff --git a/builtin/locale/__builtin.sr_Cyrl.tr b/builtin/locale/__builtin.sr_Cyrl.tr new file mode 100644 index 000000000..68551e77a --- /dev/null +++ b/builtin/locale/__builtin.sr_Cyrl.tr @@ -0,0 +1,3 @@ +# textdomain: __builtin +You died=Умро си +Respawn=Врати се у живот diff --git a/builtin/locale/__builtin.sr_Latn.tr b/builtin/locale/__builtin.sr_Latn.tr new file mode 100644 index 000000000..4adc496b4 --- /dev/null +++ b/builtin/locale/__builtin.sr_Latn.tr @@ -0,0 +1,3 @@ +# textdomain: __builtin +You died=Umro/la si. +Respawn=Vrati se u zivot diff --git a/builtin/locale/__builtin.sv.tr b/builtin/locale/__builtin.sv.tr new file mode 100644 index 000000000..115014506 --- /dev/null +++ b/builtin/locale/__builtin.sv.tr @@ -0,0 +1,3 @@ +# textdomain: __builtin +You died=Du dog +Respawn=Återuppstå diff --git a/builtin/locale/__builtin.sw.tr b/builtin/locale/__builtin.sw.tr new file mode 100644 index 000000000..92aa1f3e1 --- /dev/null +++ b/builtin/locale/__builtin.sw.tr @@ -0,0 +1,3 @@ +# textdomain: __builtin +You died=Umekufa. +Respawn=Respawn diff --git a/builtin/locale/__builtin.tok.tr b/builtin/locale/__builtin.tok.tr new file mode 100644 index 000000000..14d131d6a --- /dev/null +++ b/builtin/locale/__builtin.tok.tr @@ -0,0 +1,3 @@ +# textdomain: __builtin +You died=sina moli +Respawn=o kama sin diff --git a/builtin/locale/__builtin.tr.tr b/builtin/locale/__builtin.tr.tr new file mode 100644 index 000000000..dafec5630 --- /dev/null +++ b/builtin/locale/__builtin.tr.tr @@ -0,0 +1,3 @@ +# textdomain: __builtin +You died=Öldün +Respawn=Yeniden Canlan diff --git a/builtin/locale/__builtin.tt.tr b/builtin/locale/__builtin.tt.tr new file mode 100644 index 000000000..a162cd9b7 --- /dev/null +++ b/builtin/locale/__builtin.tt.tr @@ -0,0 +1,3 @@ +# textdomain: __builtin +You died=Сез үлдегез +Respawn=Тергезелергә diff --git a/builtin/locale/__builtin.uk.tr b/builtin/locale/__builtin.uk.tr new file mode 100644 index 000000000..e82a10bde --- /dev/null +++ b/builtin/locale/__builtin.uk.tr @@ -0,0 +1,3 @@ +# textdomain: __builtin +You died=Ви загинули +Respawn=Відродитися diff --git a/builtin/locale/__builtin.vi.tr b/builtin/locale/__builtin.vi.tr new file mode 100644 index 000000000..53caac93c --- /dev/null +++ b/builtin/locale/__builtin.vi.tr @@ -0,0 +1,3 @@ +# textdomain: __builtin +You died=Bạn đã bị chết +Respawn=Hồi sinh diff --git a/builtin/locale/__builtin.zh_CN.tr b/builtin/locale/__builtin.zh_CN.tr new file mode 100644 index 000000000..5b1077429 --- /dev/null +++ b/builtin/locale/__builtin.zh_CN.tr @@ -0,0 +1,3 @@ +# textdomain: __builtin +You died=您已死亡 +Respawn=重生 diff --git a/builtin/locale/__builtin.zh_TW.tr b/builtin/locale/__builtin.zh_TW.tr new file mode 100644 index 000000000..5b1077429 --- /dev/null +++ b/builtin/locale/__builtin.zh_TW.tr @@ -0,0 +1,3 @@ +# textdomain: __builtin +You died=您已死亡 +Respawn=重生 diff --git a/builtin/mainmenu/content/contentdb.lua b/builtin/mainmenu/content/contentdb.lua index 849f7152d..e0479cb4c 100644 --- a/builtin/mainmenu/content/contentdb.lua +++ b/builtin/mainmenu/content/contentdb.lua @@ -133,6 +133,8 @@ local function start_install(package, reason) conf:set("release", package.release) conf:write() end + + pkgmgr.reload_by_type(package.type) end end @@ -146,7 +148,6 @@ local function start_install(package, reason) start_install(next.package, next.reason) end - ui.update() end @@ -181,14 +182,26 @@ function contentdb.get_package_by_id(id) end -local function get_raw_dependencies(package) - if package.type ~= "mod" then - return {} - end - if package.raw_deps then - return package.raw_deps +-- Create a coroutine from `fn` and provide results to `callback` when complete (dead). +-- Returns a resumer function. +local function make_callback_coroutine(fn, callback) + local co = coroutine.create(fn) + + local function resumer(...) + local ok, result = coroutine.resume(co, ...) + + if not ok then + error(result) + elseif coroutine.status(co) == "dead" then + callback(result) + end end + return resumer +end + + +local function get_raw_dependencies_async(package) local url_fmt = "/api/packages/%s/dependencies/?only_hard=1&protocol_version=%s&engine_version=%s" local version = core.get_version() local base_url = core.settings:get("contentdb_url") @@ -197,11 +210,25 @@ local function get_raw_dependencies(package) local http = core.get_http_api() local response = http.fetch_sync({ url = url }) if not response.succeeded then - core.log("error", "Unable to fetch dependencies for " .. package.url_part) - return + return nil + end + return core.parse_json(response.data) or {} +end + + +local function get_raw_dependencies_co(package, resumer) + if package.type ~= "mod" then + return {} + end + if package.raw_deps then + return package.raw_deps end - local data = core.parse_json(response.data) or {} + core.handle_async(get_raw_dependencies_async, package, resumer) + local data = coroutine.yield() + if not data then + return nil + end for id, raw_deps in pairs(data) do local package2 = contentdb.package_by_id[id:lower()] @@ -222,8 +249,8 @@ local function get_raw_dependencies(package) end -function contentdb.has_hard_deps(package) - local raw_deps = get_raw_dependencies(package) +local function has_hard_deps_co(package, resumer) + local raw_deps = get_raw_dependencies_co(package, resumer) if not raw_deps then return nil end @@ -238,8 +265,14 @@ function contentdb.has_hard_deps(package) end +function contentdb.has_hard_deps(package, callback) + local resumer = make_callback_coroutine(has_hard_deps_co, callback) + resumer(package, resumer) +end + + -- Recursively resolve dependencies, given the installed mods -local function resolve_dependencies_2(raw_deps, installed_mods, out) +local function resolve_dependencies_2_co(raw_deps, installed_mods, out, resumer) local function resolve_dep(dep) -- Check whether it's already installed if installed_mods[dep.name] then @@ -289,9 +322,9 @@ local function resolve_dependencies_2(raw_deps, installed_mods, out) local result = resolve_dep(dep) out[dep.name] = result if result and result.package and not result.installed then - local raw_deps2 = get_raw_dependencies(result.package) + local raw_deps2 = get_raw_dependencies_co(result.package, resumer) if raw_deps2 then - resolve_dependencies_2(raw_deps2, installed_mods, out) + resolve_dependencies_2_co(raw_deps2, installed_mods, out, resumer) end end end @@ -301,11 +334,10 @@ local function resolve_dependencies_2(raw_deps, installed_mods, out) end --- Resolve dependencies for a package, calls the recursive version. -function contentdb.resolve_dependencies(package, game) +local function resolve_dependencies_co(package, game, resumer) assert(game) - local raw_deps = get_raw_dependencies(package) + local raw_deps = get_raw_dependencies_co(package, resumer) local installed_mods = {} local mods = {} @@ -319,7 +351,7 @@ function contentdb.resolve_dependencies(package, game) end local out = {} - if not resolve_dependencies_2(raw_deps, installed_mods, out) then + if not resolve_dependencies_2_co(raw_deps, installed_mods, out, resumer) then return nil end @@ -336,6 +368,13 @@ function contentdb.resolve_dependencies(package, game) end +-- Resolve dependencies for a package, calls the recursive version. +function contentdb.resolve_dependencies(package, game, callback) + local resumer = make_callback_coroutine(resolve_dependencies_co, callback) + resumer(package, game, resumer) +end + + local function fetch_pkgs(params) local version = core.get_version() local base_url = core.settings:get("contentdb_url") @@ -427,8 +466,9 @@ end function contentdb.update_paths() + pkgmgr.load_all() + local mod_hash = {} - pkgmgr.refresh_globals() for _, mod in pairs(pkgmgr.global_mods:get_list()) do local cdb_id = pkgmgr.get_contentdb_id(mod) if cdb_id then @@ -437,7 +477,6 @@ function contentdb.update_paths() end local game_hash = {} - pkgmgr.update_gamelist() for _, game in pairs(pkgmgr.games) do local cdb_id = pkgmgr.get_contentdb_id(game) if cdb_id then @@ -446,7 +485,7 @@ function contentdb.update_paths() end local txp_hash = {} - for _, txp in pairs(pkgmgr.get_texture_packs()) do + for _, txp in pairs(pkgmgr.texture_packs) do local cdb_id = pkgmgr.get_contentdb_id(txp) if cdb_id then txp_hash[contentdb.aliases[cdb_id] or cdb_id] = txp diff --git a/builtin/mainmenu/content/dlg_contentdb.lua b/builtin/mainmenu/content/dlg_contentdb.lua index a975e1326..bcc89f7cd 100644 --- a/builtin/mainmenu/content/dlg_contentdb.lua +++ b/builtin/mainmenu/content/dlg_contentdb.lua @@ -63,21 +63,12 @@ local function install_or_update_package(this, package) end local function on_confirm() - local has_hard_deps = contentdb.has_hard_deps(package) - if has_hard_deps then - local dlg = create_install_dialog(package) - dlg:set_parent(this) - this:hide() - dlg:show() - elseif has_hard_deps == nil then - local dlg = messagebox("error_checking_deps", - fgettext("Error getting dependencies for package")) - dlg:set_parent(this) - this:hide() - dlg:show() - else - contentdb.queue_download(package, package.path and contentdb.REASON_UPDATE or contentdb.REASON_NEW) - end + local dlg = create_install_dialog(package) + dlg:set_parent(this) + this:hide() + dlg:show() + + dlg:load_deps() end if package.type == "mod" and #pkgmgr.games == 0 then @@ -190,7 +181,7 @@ local function get_info_formspec(text) return table.concat({ "formspec_version[6]", "size[15.75,9.5]", - core.settings:get_bool("enable_touch") and "padding[0.01,0.01]" or "position[0.5,0.55]", + core.settings:get_bool("touch_gui") and "padding[0.01,0.01]" or "position[0.5,0.55]", "label[4,4.35;", text, "]", "container[0,", H - 0.8 - 0.375, "]", @@ -221,7 +212,7 @@ local function get_formspec(dlgdata) local formspec = { "formspec_version[6]", "size[15.75,9.5]", - core.settings:get_bool("enable_touch") and "padding[0.01,0.01]" or "position[0.5,0.55]", + core.settings:get_bool("touch_gui") and "padding[0.01,0.01]" or "position[0.5,0.55]", "style[status,downloading,queued;border=false]", @@ -472,7 +463,7 @@ end local function handle_events(event) if event == "DialogShow" then -- On touchscreen, don't show the "MINETEST" header behind the dialog. - mm_game_theme.set_engine(core.settings:get_bool("enable_touch")) + mm_game_theme.set_engine(core.settings:get_bool("touch_gui")) -- If ContentDB is already loaded, auto-install packages here. do_auto_install() diff --git a/builtin/mainmenu/content/dlg_install.lua b/builtin/mainmenu/content/dlg_install.lua index 11cb0674b..89819be2a 100644 --- a/builtin/mainmenu/content/dlg_install.lua +++ b/builtin/mainmenu/content/dlg_install.lua @@ -15,7 +15,31 @@ --with this program; if not, write to the Free Software Foundation, Inc., --51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +local function is_still_visible(dlg) + local this = ui.find_by_name("install_dialog") + return this == dlg and not dlg.hidden +end + + +local function get_loading_formspec() + local TOUCH_GUI = core.settings:get_bool("touch_gui") + local w = TOUCH_GUI and 14 or 7 + + local formspec = { + "formspec_version[3]", + "size[", w, ",9.05]", + TOUCH_GUI and "padding[0.01,0.01]" or "position[0.5,0.55]", + "label[3,4.525;", fgettext("Loading..."), "]", + } + return table.concat(formspec) +end + + local function get_formspec(data) + if not data.has_hard_deps_ready then + return get_loading_formspec() + end + local selected_game, selected_game_idx = pkgmgr.find_by_gameid(core.settings:get("menu_last_game")) if not selected_game_idx then selected_game_idx = 1 @@ -27,15 +51,35 @@ local function get_formspec(data) game_list[i] = core.formspec_escape(game.title) end + if not data.deps_ready[selected_game_idx] and + not data.deps_loading[selected_game_idx] then + data.deps_loading[selected_game_idx] = true + + contentdb.resolve_dependencies(data.package, selected_game, function(deps) + if not is_still_visible(data.dlg) then + return + end + data.deps_ready[selected_game_idx] = deps + ui.update() + end) + end + + -- The value of `data.deps_ready[selected_game_idx]` may have changed + -- since the last if statement since `contentdb.resolve_dependencies` + -- calls the callback immediately if the dependencies are already cached. + if not data.deps_ready[selected_game_idx] then + return get_loading_formspec() + end + local package = data.package local will_install_deps = data.will_install_deps local deps_to_install = 0 local deps_not_found = 0 - data.dependencies = contentdb.resolve_dependencies(package, selected_game) + data.deps_chosen = data.deps_ready[selected_game_idx] local formatted_deps = {} - for _, dep in pairs(data.dependencies) do + for _, dep in pairs(data.deps_chosen) do formatted_deps[#formatted_deps + 1] = "#fff" formatted_deps[#formatted_deps + 1] = core.formspec_escape(dep.name) if dep.installed then @@ -66,18 +110,18 @@ local function get_formspec(data) message_bg = mt_color_orange end - local ENABLE_TOUCH = core.settings:get_bool("enable_touch") + local TOUCH_GUI = core.settings:get_bool("touch_gui") - local w = ENABLE_TOUCH and 14 or 7 + local w = TOUCH_GUI and 14 or 7 local padded_w = w - 2*0.375 - local dropdown_w = ENABLE_TOUCH and 10.2 or 4.25 + local dropdown_w = TOUCH_GUI and 10.2 or 4.25 local button_w = (padded_w - 0.25) / 3 local button_pad = button_w / 2 local formspec = { "formspec_version[3]", "size[", w, ",9.05]", - ENABLE_TOUCH and "padding[0.01,0.01]" or "position[0.5,0.55]", + TOUCH_GUI and "padding[0.01,0.01]" or "position[0.5,0.55]", "style[title;border=false]", "box[0,0;", w, ",0.8;#3333]", "button[0,0;", w, ",0.8;title;", fgettext("Install $1", package.title) , "]", @@ -128,7 +172,7 @@ local function handle_submit(this, fields) contentdb.queue_download(data.package, contentdb.REASON_NEW) if data.will_install_deps then - for _, dep in pairs(data.dependencies) do + for _, dep in pairs(data.deps_chosen) do if not dep.is_optional and not dep.installed and dep.package then contentdb.queue_download(dep.package, contentdb.REASON_DEPENDENCY) end @@ -153,10 +197,50 @@ local function handle_submit(this, fields) end +local function load_deps(dlg) + local package = dlg.data.package + + contentdb.has_hard_deps(package, function(result) + if not is_still_visible(dlg) then + return + end + + if result == nil then + local parent = dlg.parent + dlg:delete() + local dlg2 = messagebox("error_checking_deps", + fgettext("Error getting dependencies for package $1", package.url_part)) + dlg2:set_parent(parent) + parent:hide() + dlg2:show() + elseif result == false then + contentdb.queue_download(package, package.path and contentdb.REASON_UPDATE or contentdb.REASON_NEW) + dlg:delete() + else + assert(result == true) + dlg.data.has_hard_deps_ready = true + end + ui.update() + end) +end + + function create_install_dialog(package) local dlg = dialog_create("install_dialog", get_formspec, handle_submit, nil) - dlg.data.dependencies = nil + dlg.data.deps_chosen = nil dlg.data.package = package dlg.data.will_install_deps = true + + dlg.data.has_hard_deps_ready = false + dlg.data.deps_ready = {} + dlg.data.deps_loading = {} + + dlg.load_deps = load_deps + + -- `get_formspec` needs to access `dlg` to check whether it's still open. + -- It doesn't suffice to check that any "install_dialog" instance is open + -- via `ui.find_by_name`, it's necessary to check for this exact instance. + dlg.data.dlg = dlg + return dlg end diff --git a/builtin/mainmenu/content/pkgmgr.lua b/builtin/mainmenu/content/pkgmgr.lua index b167e1423..5a4aa6c17 100644 --- a/builtin/mainmenu/content/pkgmgr.lua +++ b/builtin/mainmenu/content/pkgmgr.lua @@ -110,7 +110,7 @@ pkgmgr = {} -- @param modpack Currently processing modpack or nil/"" if none (recursion) function pkgmgr.get_mods(path, virtual_path, listing, modpack) local mods = core.get_dir_list(path, true) - + local added = {} for _, name in ipairs(mods) do if name:sub(1, 1) ~= "." then local mod_path = path .. DIR_DELIM .. name @@ -120,6 +120,7 @@ function pkgmgr.get_mods(path, virtual_path, listing, modpack) parent_dir = path, } listing[#listing + 1] = toadd + added[#added + 1] = toadd -- Get config file local mod_conf @@ -150,8 +151,6 @@ function pkgmgr.get_mods(path, virtual_path, listing, modpack) toadd.virtual_path = mod_virtual_path toadd.type = "mod" - pkgmgr.update_translations({ toadd }) - -- Check modpack.txt -- Note: modpack.conf is already checked above local modpackfile = io.open(mod_path .. DIR_DELIM .. "modpack.txt") @@ -171,6 +170,8 @@ function pkgmgr.get_mods(path, virtual_path, listing, modpack) end end + pkgmgr.update_translations(added) + if not modpack then -- Sort all when the recursion is done table.sort(listing, function(a, b) @@ -180,12 +181,13 @@ function pkgmgr.get_mods(path, virtual_path, listing, modpack) end -------------------------------------------------------------------------------- -function pkgmgr.get_texture_packs() +function pkgmgr.reload_texture_packs() local txtpath = core.get_texturepath() local txtpath_system = core.get_texturepath_share() local retval = {} load_texture_packs(txtpath, retval) + -- on portable versions these two paths coincide. It avoids loading the path twice if txtpath ~= txtpath_system then load_texture_packs(txtpath_system, retval) @@ -197,11 +199,13 @@ function pkgmgr.get_texture_packs() return a.title:lower() < b.title:lower() end) - return retval + pkgmgr.texture_packs = retval end -------------------------------------------------------------------------------- function pkgmgr.get_all() + pkgmgr.load_all() + local result = {} for _, mod in pairs(pkgmgr.global_mods:get_list()) do @@ -210,7 +214,7 @@ function pkgmgr.get_all() for _, game in pairs(pkgmgr.games) do result[#result + 1] = game end - for _, txp in pairs(pkgmgr.get_texture_packs()) do + for _, txp in pairs(pkgmgr.texture_packs) do result[#result + 1] = txp end @@ -288,7 +292,7 @@ end function pkgmgr.render_packagelist(render_list, use_technical_names, with_icon) if not render_list then if not pkgmgr.global_mods then - pkgmgr.refresh_globals() + pkgmgr.reload_global_mods() end render_list = pkgmgr.global_mods end @@ -549,6 +553,7 @@ function pkgmgr.get_worldconfig(worldpath) end -------------------------------------------------------------------------------- +-- Caller is responsible for reloading content types (see reload_by_type) function pkgmgr.install_dir(expected_type, path, basename, targetpath) assert(type(expected_type) == "string") assert(type(path) == "string") @@ -615,12 +620,6 @@ function pkgmgr.install_dir(expected_type, path, basename, targetpath) fgettext_ne("Failed to install $1 to $2", basename, targetpath) end - if basefolder.type == "game" then - pkgmgr.update_gamelist() - else - pkgmgr.refresh_globals() - end - return targetpath, nil end @@ -742,7 +741,7 @@ function pkgmgr.comparemod(elem1,elem2) end -------------------------------------------------------------------------------- -function pkgmgr.refresh_globals() +function pkgmgr.reload_global_mods() local function is_equal(element,uid) --uid match if element.name == uid then return true @@ -774,7 +773,7 @@ function pkgmgr.get_game_mods(gamespec, retval) end -------------------------------------------------------------------------------- -function pkgmgr.update_gamelist() +function pkgmgr.reload_games() pkgmgr.games = core.get_games() table.sort(pkgmgr.games, function(a, b) return a.title:lower() < b.title:lower() @@ -782,6 +781,32 @@ function pkgmgr.update_gamelist() pkgmgr.update_translations(pkgmgr.games) end +-------------------------------------------------------------------------------- +function pkgmgr.reload_by_type(type) + if type == "game" then + pkgmgr.reload_games() + elseif type == "txp" then + pkgmgr.reload_texture_packs() + elseif type == "mod" or type == "modpack" then + pkgmgr.reload_global_mods() + else + error("Unknown package type: " .. type) + end +end + +-------------------------------------------------------------------------------- +function pkgmgr.load_all() + if not pkgmgr.global_mods then + pkgmgr.reload_global_mods() + end + if not pkgmgr.games then + pkgmgr.reload_games() + end + if not pkgmgr.texture_packs then + pkgmgr.reload_texture_packs() + end +end + -------------------------------------------------------------------------------- function pkgmgr.update_translations(list) for _, item in ipairs(list) do @@ -831,4 +856,4 @@ end -------------------------------------------------------------------------------- -- read initial data -------------------------------------------------------------------------------- -pkgmgr.update_gamelist() +pkgmgr.reload_games() diff --git a/builtin/mainmenu/content/tests/pkgmgr_spec.lua b/builtin/mainmenu/content/tests/pkgmgr_spec.lua index 37c1bb784..ccadde38c 100644 --- a/builtin/mainmenu/content/tests/pkgmgr_spec.lua +++ b/builtin/mainmenu/content/tests/pkgmgr_spec.lua @@ -46,6 +46,9 @@ local function reset() function core.get_texturepath() return txp_dir end + function core.get_texturepath_share() + return txp_dir + end function core.get_modpath() return mods_dir end @@ -59,13 +62,6 @@ local function reset() setfenv(loadfile("builtin/common/misc_helpers.lua"), env)() setfenv(loadfile("builtin/mainmenu/content/pkgmgr.lua"), env)() - function env.pkgmgr.update_gamelist() - table.insert(calls, { "update_gamelist" }) - end - function env.pkgmgr.refresh_globals() - table.insert(calls, { "refresh_globals" }) - end - function env.assert_calls(list) assert.are.same(list, calls) end @@ -113,7 +109,6 @@ describe("install_dir", function() env.assert_calls({ { "delete_dir", mods_dir .. "/mymod" }, { "copy_dir", "/tmp/123", mods_dir .. "/mymod", false }, - { "refresh_globals" }, }) end) @@ -129,7 +124,6 @@ describe("install_dir", function() env.assert_calls({ { "delete_dir", mods_dir .. "/mymod" }, { "copy_dir", "/tmp/123", mods_dir .. "/mymod", false }, - { "refresh_globals" }, }) end) @@ -145,7 +139,6 @@ describe("install_dir", function() env.assert_calls({ { "delete_dir", games_dir .. "/mygame" }, { "copy_dir", "/tmp/123", games_dir .. "/mygame", false }, - { "update_gamelist" }, }) end) @@ -161,7 +154,6 @@ describe("install_dir", function() env.assert_calls({ { "delete_dir", mods_dir .. "/123" }, { "copy_dir", "/tmp/123", mods_dir .. "/123", false }, - { "refresh_globals" }, }) end) @@ -188,7 +180,6 @@ describe("install_dir", function() env.assert_calls({ { "delete_dir", "/tmp/alt-target" }, { "copy_dir", "/tmp/123", "/tmp/alt-target", false }, - { "refresh_globals" }, }) end) @@ -238,6 +229,5 @@ describe("install_dir", function() path, message = env.pkgmgr.install_dir("txp", "/tmp/123", "name", nil) assert.is._not._nil(path) assert.is._nil(message) - end) end) diff --git a/builtin/mainmenu/content/update_detector.lua b/builtin/mainmenu/content/update_detector.lua index f70220224..1f8672bba 100644 --- a/builtin/mainmenu/content/update_detector.lua +++ b/builtin/mainmenu/content/update_detector.lua @@ -31,7 +31,7 @@ local cache_file_path = core.get_cache_path() .. DIR_DELIM .. "cdb" .. DIR_DELIM local has_fetched = false local latest_releases do - if check_cache_age("cdb_updates_last_checked", 3 * 3600) then + if check_cache_age("cdb_updates_last_checked", 24 * 3600) then local f = io.open(cache_file_path, "r") local data = "" if f then @@ -72,9 +72,6 @@ end local function has_packages_from_cdb() - pkgmgr.refresh_globals() - pkgmgr.update_gamelist() - for _, content in pairs(pkgmgr.get_all()) do if pkgmgr.get_contentdb_id(content) then return true @@ -127,9 +124,6 @@ function update_detector.get_all() return {} end - pkgmgr.refresh_globals() - pkgmgr.update_gamelist() - local ret = {} local all_content = pkgmgr.get_all() for _, content in ipairs(all_content) do diff --git a/builtin/mainmenu/credits.json b/builtin/mainmenu/credits.json new file mode 100644 index 000000000..261cf5407 --- /dev/null +++ b/builtin/mainmenu/credits.json @@ -0,0 +1,85 @@ +{ + "#": "https://github.com/orgs/minetest/teams/engine/members", + "core_developers": [ + "Perttu Ahola (celeron55) [Project founder]", + "sfan5 ", + "ShadowNinja ", + "Nathanaëlle Courant (Nore/Ekdohibs) ", + "Loic Blot (nerzhul/nrz) ", + "Andrew Ward (rubenwardy) ", + "Krock/SmallJoker ", + "Lars Hofhansl ", + "v-rob ", + "Desour/DS", + "srifqi", + "Gregor Parzefall (grorp)", + "Lars Müller (luatic)" + ], + "previous_core_developers": [ + "BlockMen", + "Maciej Kasatkin (RealBadAngel) [RIP]", + "Lisa Milne (darkrose) ", + "proller", + "Ilya Zhuravlev (xyz) ", + "PilzAdam ", + "est31 ", + "kahrl ", + "Ryan Kwolek (kwolekr) ", + "sapier", + "Zeno", + "Auke Kok (sofar) ", + "Aaron Suen ", + "paramat", + "Pierre-Yves Rollo ", + "hecks", + "Jude Melton-Houghton (TurkeyMcMac) [RIP]", + "Hugues Ross ", + "Dmitry Kostenko (x2048) " + ], + "#": "Currently only https://github.com/orgs/minetest/teams/triagers/members", + "core_team": [ + "Zughy [Issue triager]", + "wsor [Issue triager]", + "Hugo Locurcio (Calinou) [Issue triager]" + ], + "#": "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", + "chmodsayshello", + "jordan4ibanez", + "superfloh247" + ], + "previous_contributors": [ + "Nils Dagsson Moskopp (erlehmann) [Minetest logo]", + "red-001 ", + "Giuseppe Bilotta", + "HybridDog", + "ClobberXD", + "Dániel Juhász (juhdanad) ", + "MirceaKitsune ", + "Jean-Patrick Guerrero (kilbith)", + "MoNTE48", + "Constantin Wenger (SpeedProg)", + "Ciaran Gultnieks (CiaranG)", + "Paul Ouellette (pauloue)", + "stujones11", + "Rogier ", + "Gregory Currie (gregorycu)", + "JacobF", + "Jeija " + ] +} diff --git a/builtin/mainmenu/dlg_config_world.lua b/builtin/mainmenu/dlg_config_world.lua index e8f49b230..a8c5221de 100644 --- a/builtin/mainmenu/dlg_config_world.lua +++ b/builtin/mainmenu/dlg_config_world.lua @@ -126,7 +126,7 @@ local function get_formspec(data) local retval = "size[11.5,7.5,true]" .. "label[0.5,0;" .. fgettext("World:") .. "]" .. - "label[1.75,0;" .. data.worldspec.name .. "]" + "label[1.75,0;" .. core.formspec_escape(data.worldspec.name) .. "]" if mod.is_modpack or mod.type == "game" then local info = core.formspec_escape( diff --git a/builtin/mainmenu/dlg_delete_content.lua b/builtin/mainmenu/dlg_delete_content.lua index 1a6178acc..98e15bf01 100644 --- a/builtin/mainmenu/dlg_delete_content.lua +++ b/builtin/mainmenu/dlg_delete_content.lua @@ -37,11 +37,7 @@ local function delete_content_buttonhandler(this, fields) gamedata.errormessage = fgettext_ne("pkgmgr: failed to delete \"$1\"", this.data.content.path) end - if this.data.content.type == "game" then - pkgmgr.update_gamelist() - else - pkgmgr.refresh_globals() - end + pkgmgr.reload_by_type(this.data.content.type) else gamedata.errormessage = fgettext_ne("pkgmgr: invalid path \"$1\"", this.data.content.path) end diff --git a/builtin/mainmenu/dlg_rename_modpack.lua b/builtin/mainmenu/dlg_rename_modpack.lua index ca76a8cbe..884140eb3 100644 --- a/builtin/mainmenu/dlg_rename_modpack.lua +++ b/builtin/mainmenu/dlg_rename_modpack.lua @@ -45,7 +45,7 @@ local function rename_modpack_buttonhandler(this, fields) local oldpath = this.data.mod.path local targetpath = this.data.mod.parent_dir .. DIR_DELIM .. fields["te_modpack_name"] os.rename(oldpath, targetpath) - pkgmgr.refresh_globals() + pkgmgr.reload_global_mods() pkgmgr.selected_mod = pkgmgr.global_mods:get_current_index( pkgmgr.global_mods:raw_index_by_uid(fields["te_modpack_name"])) diff --git a/builtin/mainmenu/init.lua b/builtin/mainmenu/init.lua index 41885e298..dd35334c2 100644 --- a/builtin/mainmenu/init.lua +++ b/builtin/mainmenu/init.lua @@ -23,6 +23,13 @@ mt_color_dark_green = "#25C191" mt_color_orange = "#FF8800" mt_color_red = "#FF3300" +MAIN_TAB_W = 15.5 +MAIN_TAB_H = 7.1 +TABHEADER_H = 0.85 +GAMEBAR_H = 1.25 +GAMEBAR_OFFSET_DESKTOP = 0.375 +GAMEBAR_OFFSET_TOUCH = 0.15 + local menupath = core.get_mainmenu_path() local basepath = core.get_builtin_path() defaulttexturedir = core.get_texturepath_share() .. DIR_DELIM .. "base" .. @@ -89,7 +96,7 @@ local function init_globals() mm_game_theme.set_engine() -- This is just a fallback. -- Create main tabview - local tv_main = tabview_create("maintab", {x = 15.5, y = 7.1}, {x = 0, y = 0}) + local tv_main = tabview_create("maintab", {x = MAIN_TAB_W, y = MAIN_TAB_H}, {x = 0, y = 0}) tv_main:set_autosave_tab(true) tv_main:add(tabs.local_game) diff --git a/builtin/mainmenu/settings/components.lua b/builtin/mainmenu/settings/components.lua index 51cc0c95b..bfe64285c 100644 --- a/builtin/mainmenu/settings/components.lua +++ b/builtin/mainmenu/settings/components.lua @@ -306,17 +306,36 @@ function make.flags(setting) "label[0,0.1;" .. get_label(setting) .. "]", } - local value = core.settings:get(setting.name) or setting.default self.resettable = core.settings:has(setting.name) checkboxes = {} - for _, name in ipairs(value:split(",")) do - name = name:trim() - if name:sub(1, 2) == "no" then - checkboxes[name:sub(3)] = false - elseif name ~= "" then - checkboxes[name] = true + for _, name in ipairs(setting.possible) do + checkboxes[name] = false + end + local function apply_flags(flag_string, what) + local prefixed_flags = {} + for _, name in ipairs(flag_string:split(",")) do + prefixed_flags[name:trim()] = true end + for _, name in ipairs(setting.possible) do + local enabled = prefixed_flags[name] + local disabled = prefixed_flags["no" .. name] + if enabled and disabled then + core.log("warning", "Flag " .. name .. " in " .. what .. " " .. + setting.name .. " both enabled and disabled, ignoring") + elseif enabled then + checkboxes[name] = true + elseif disabled then + checkboxes[name] = false + end + end + end + -- First apply the default, which is necessary since flags + -- which are not overridden may be missing from the value. + apply_flags(setting.default, "default for setting") + local value = core.settings:get(setting.name) + if value then + apply_flags(value, "setting") end local columns = math.max(math.floor(avail_w / 2.5), 1) @@ -325,18 +344,16 @@ function make.flags(setting) local y = 0.55 for _, possible in ipairs(setting.possible) do - if possible:sub(1, 2) ~= "no" then - if x >= avail_w then - x = 0 - y = y + 0.5 - end - - local is_checked = checkboxes[possible] - fs[#fs + 1] = ("checkbox[%f,%f;%s;%s;%s]"):format( - x, y, setting.name .. "_" .. possible, - core.formspec_escape(possible), tostring(is_checked)) - x = x + column_width + if x >= avail_w then + x = 0 + y = y + 0.5 end + + local is_checked = checkboxes[possible] + fs[#fs + 1] = ("checkbox[%f,%f;%s;%s;%s]"):format( + x, y, setting.name .. "_" .. possible, + core.formspec_escape(possible), tostring(is_checked)) + x = x + column_width end return table.concat(fs, ""), y + 0.25 @@ -355,12 +372,10 @@ function make.flags(setting) if changed then local values = {} for _, name in ipairs(setting.possible) do - if name:sub(1, 2) ~= "no" then - if checkboxes[name] then - table.insert(values, name) - else - table.insert(values, "no" .. name) - end + if checkboxes[name] then + table.insert(values, name) + else + table.insert(values, "no" .. name) end end diff --git a/builtin/mainmenu/settings/dlg_settings.lua b/builtin/mainmenu/settings/dlg_settings.lua index fe1e1924f..75f99376d 100644 --- a/builtin/mainmenu/settings/dlg_settings.lua +++ b/builtin/mainmenu/settings/dlg_settings.lua @@ -22,16 +22,27 @@ local component_funcs = dofile(core.get_mainmenu_path() .. DIR_DELIM .. local shadows_component = dofile(core.get_mainmenu_path() .. DIR_DELIM .. "settings" .. DIR_DELIM .. "shadows_component.lua") - -local full_settings = settingtypes.parse_config_file(false, true) +local loaded = false +local full_settings local info_icon_path = core.formspec_escape(defaulttexturedir .. "settings_info.png") local reset_icon_path = core.formspec_escape(defaulttexturedir .. "settings_reset.png") - local all_pages = {} local page_by_id = {} local filtered_pages = all_pages local filtered_page_by_id = page_by_id + +local function get_setting_info(name) + for _, entry in ipairs(full_settings) do + if entry.type ~= "category" and entry.name == name then + return entry + end + end + + return nil +end + + local function add_page(page) assert(type(page.id) == "string") assert(type(page.title) == "string") @@ -46,49 +57,6 @@ local function add_page(page) end -local change_keys = { - query_text = "Controls", - requires = { - keyboard_mouse = true, - }, - get_formspec = function(self, avail_w) - local btn_w = math.min(avail_w, 3) - return ("button[0,0;%f,0.8;btn_change_keys;%s]"):format(btn_w, fgettext("Controls")), 0.8 - end, - on_submit = function(self, fields) - if fields.btn_change_keys then - core.show_keys_menu() - end - end, -} - - -add_page({ - id = "accessibility", - title = fgettext_ne("Accessibility"), - content = { - "language", - { heading = fgettext_ne("General") }, - "font_size", - "chat_font_size", - "gui_scaling", - "hud_scaling", - "show_nametag_backgrounds", - { heading = fgettext_ne("Chat") }, - "console_height", - "console_alpha", - "console_color", - { heading = fgettext_ne("Controls") }, - "autojump", - "safe_dig_and_place", - { heading = fgettext_ne("Movement") }, - "arm_inertia", - "view_bobbing_amount", - "fall_bobbing_amount", - }, -}) - - local function load_settingtypes() local page = nil local section = nil @@ -129,94 +97,134 @@ local function load_settingtypes() end end end -load_settingtypes() - -table.insert(page_by_id.controls_keyboard_and_mouse.content, 1, change_keys) -do - local content = page_by_id.graphics_and_audio_shaders.content - local idx = table.indexof(content, "enable_dynamic_shadows") - table.insert(content, idx, shadows_component) -end -local function get_setting_info(name) - for _, entry in ipairs(full_settings) do - if entry.type ~= "category" and entry.name == name then - return entry - end +local function load() + if loaded then + return + end + loaded = true + + full_settings = settingtypes.parse_config_file(false, true) + + local change_keys = { + query_text = "Controls", + requires = { + touch_controls = false, + }, + get_formspec = function(self, avail_w) + local btn_w = math.min(avail_w, 3) + return ("button[0,0;%f,0.8;btn_change_keys;%s]"):format(btn_w, fgettext("Controls")), 0.8 + end, + on_submit = function(self, fields) + if fields.btn_change_keys then + core.show_keys_menu() + end + end, + } + + add_page({ + id = "accessibility", + title = fgettext_ne("Accessibility"), + content = { + "language", + { heading = fgettext_ne("General") }, + "font_size", + "chat_font_size", + "gui_scaling", + "hud_scaling", + "show_nametag_backgrounds", + { heading = fgettext_ne("Chat") }, + "console_height", + "console_alpha", + "console_color", + { heading = fgettext_ne("Controls") }, + "autojump", + "safe_dig_and_place", + { heading = fgettext_ne("Movement") }, + "arm_inertia", + "view_bobbing_amount", + "fall_bobbing_amount", + }, + }) + + load_settingtypes() + + table.insert(page_by_id.controls_keyboard_and_mouse.content, 1, change_keys) + do + local content = page_by_id.graphics_and_audio_shaders.content + local idx = table.indexof(content, "enable_dynamic_shadows") + table.insert(content, idx, shadows_component) end - return nil + -- These must not be translated, as they need to show in the local + -- language no matter the user's current language. + -- This list must be kept in sync with src/unsupported_language_list.txt. + get_setting_info("language").option_labels = { + [""] = fgettext_ne("(Use system language)"), + --ar = " [ar]", blacklisted + be = "Беларуская [be]", + bg = "Български [bg]", + ca = "Català [ca]", + cs = "Česky [cs]", + cy = "Cymraeg [cy]", + da = "Dansk [da]", + de = "Deutsch [de]", + --dv = " [dv]", blacklisted + el = "Ελληνικά [el]", + en = "English [en]", + eo = "Esperanto [eo]", + es = "Español [es]", + et = "Eesti [et]", + eu = "Euskara [eu]", + fi = "Suomi [fi]", + fil = "Wikang Filipino [fil]", + fr = "Français [fr]", + gd = "Gàidhlig [gd]", + gl = "Galego [gl]", + --he = " [he]", blacklisted + --hi = " [hi]", blacklisted + hu = "Magyar [hu]", + id = "Bahasa Indonesia [id]", + it = "Italiano [it]", + ja = "日本語 [ja]", + jbo = "Lojban [jbo]", + kk = "Қазақша [kk]", + --kn = " [kn]", blacklisted + ko = "한국어 [ko]", + ky = "Kırgızca / Кыргызча [ky]", + lt = "Lietuvių [lt]", + lv = "Latviešu [lv]", + mn = "Монгол [mn]", + mr = "मराठी [mr]", + ms = "Bahasa Melayu [ms]", + --ms_Arab = " [ms_Arab]", blacklisted + nb = "Norsk Bokmål [nb]", + nl = "Nederlands [nl]", + nn = "Norsk Nynorsk [nn]", + oc = "Occitan [oc]", + pl = "Polski [pl]", + pt = "Português [pt]", + pt_BR = "Português do Brasil [pt_BR]", + ro = "Română [ro]", + ru = "Русский [ru]", + sk = "Slovenčina [sk]", + sl = "Slovenščina [sl]", + sr_Cyrl = "Српски [sr_Cyrl]", + sr_Latn = "Srpski (Latinica) [sr_Latn]", + sv = "Svenska [sv]", + sw = "Kiswahili [sw]", + --th = " [th]", blacklisted + tr = "Türkçe [tr]", + tt = "Tatarça [tt]", + uk = "Українська [uk]", + vi = "Tiếng Việt [vi]", + zh_CN = "中文 (简体) [zh_CN]", + zh_TW = "正體中文 (繁體) [zh_TW]", + } end --- These must not be translated, as they need to show in the local --- language no matter the user's current language. --- This list must be kept in sync with src/unsupported_language_list.txt. -get_setting_info("language").option_labels = { - [""] = fgettext_ne("(Use system language)"), - --ar = " [ar]", blacklisted - be = "Беларуская [be]", - bg = "Български [bg]", - ca = "Català [ca]", - cs = "Česky [cs]", - cy = "Cymraeg [cy]", - da = "Dansk [da]", - de = "Deutsch [de]", - --dv = " [dv]", blacklisted - el = "Ελληνικά [el]", - en = "English [en]", - eo = "Esperanto [eo]", - es = "Español [es]", - et = "Eesti [et]", - eu = "Euskara [eu]", - fi = "Suomi [fi]", - fil = "Wikang Filipino [fil]", - fr = "Français [fr]", - gd = "Gàidhlig [gd]", - gl = "Galego [gl]", - --he = " [he]", blacklisted - --hi = " [hi]", blacklisted - hu = "Magyar [hu]", - id = "Bahasa Indonesia [id]", - it = "Italiano [it]", - ja = "日本語 [ja]", - jbo = "Lojban [jbo]", - kk = "Қазақша [kk]", - --kn = " [kn]", blacklisted - ko = "한국어 [ko]", - ky = "Kırgızca / Кыргызча [ky]", - lt = "Lietuvių [lt]", - lv = "Latviešu [lv]", - mn = "Монгол [mn]", - mr = "मराठी [mr]", - ms = "Bahasa Melayu [ms]", - --ms_Arab = " [ms_Arab]", blacklisted - nb = "Norsk Bokmål [nb]", - nl = "Nederlands [nl]", - nn = "Norsk Nynorsk [nn]", - oc = "Occitan [oc]", - pl = "Polski [pl]", - pt = "Português [pt]", - pt_BR = "Português do Brasil [pt_BR]", - ro = "Română [ro]", - ru = "Русский [ru]", - sk = "Slovenčina [sk]", - sl = "Slovenščina [sl]", - sr_Cyrl = "Српски [sr_Cyrl]", - sr_Latn = "Srpski (Latinica) [sr_Latn]", - sv = "Svenska [sv]", - sw = "Kiswahili [sw]", - --th = " [th]", blacklisted - tr = "Türkçe [tr]", - tt = "Tatarça [tt]", - uk = "Українська [uk]", - vi = "Tiếng Việt [vi]", - zh_CN = "中文 (简体) [zh_CN]", - zh_TW = "正體中文 (繁體) [zh_TW]", -} - - -- See if setting matches keywords local function get_setting_match_weight(entry, query_keywords) local setting_score = 0 @@ -316,8 +324,6 @@ local function check_requirements(name, requires) local special = { android = PLATFORM == "Android", desktop = PLATFORM ~= "Android", - touchscreen_gui = core.settings:get_bool("enable_touch"), - keyboard_mouse = not core.settings:get_bool("enable_touch"), shaders_support = shaders_support, shaders = core.settings:get_bool("enable_shaders") and shaders_support, opengl = video_driver == "opengl", @@ -449,13 +455,13 @@ local function get_formspec(dialogdata) local extra_h = 1 -- not included in tabsize.height local tabsize = { - width = core.settings:get_bool("enable_touch") and 16.5 or 15.5, - height = core.settings:get_bool("enable_touch") and (10 - extra_h) or 12, + width = core.settings:get_bool("touch_gui") and 16.5 or 15.5, + height = core.settings:get_bool("touch_gui") and (10 - extra_h) or 12, } - local scrollbar_w = core.settings:get_bool("enable_touch") and 0.6 or 0.4 + local scrollbar_w = core.settings:get_bool("touch_gui") and 0.6 or 0.4 - local left_pane_width = core.settings:get_bool("enable_touch") and 4.5 or 4.25 + local left_pane_width = core.settings:get_bool("touch_gui") and 4.5 or 4.25 local left_pane_padding = 0.25 local search_width = left_pane_width + scrollbar_w - (0.75 * 2) @@ -469,7 +475,7 @@ local function get_formspec(dialogdata) local fs = { "formspec_version[6]", "size[", tostring(tabsize.width), ",", tostring(tabsize.height + extra_h), "]", - core.settings:get_bool("enable_touch") and "padding[0.01,0.01]" or "", + core.settings:get_bool("touch_gui") and "padding[0.01,0.01]" or "", "bgcolor[#0000]", -- HACK: this is needed to allow resubmitting the same formspec @@ -644,15 +650,15 @@ local function buttonhandler(this, fields) write_settings_early() end - -- enable_touch is a checkbox in a setting component. We handle this + -- touch_controls is a checkbox in a setting component. We handle this -- setting differently so we can hide/show pages using the next if-statement - if fields.enable_touch ~= nil then - local value = core.is_yes(fields.enable_touch) - core.settings:set_bool("enable_touch", value) + if fields.touch_controls ~= nil then + local value = core.is_yes(fields.touch_controls) + core.settings:set_bool("touch_controls", value) write_settings_early() end - if fields.show_advanced ~= nil or fields.enable_touch ~= nil then + if fields.show_advanced ~= nil or fields.touch_controls ~= nil then local suggested_page_id = update_filtered_pages(dialogdata.query) dialogdata.components = nil @@ -734,6 +740,7 @@ end function create_settings_dlg() + load() local dlg = dialog_create("dlg_settings", get_formspec, buttonhandler, eventhandler) dlg.data.page_id = update_filtered_pages("") diff --git a/builtin/mainmenu/settings/settingtypes.lua b/builtin/mainmenu/settings/settingtypes.lua index 1174c9b76..eacd96d09 100644 --- a/builtin/mainmenu/settings/settingtypes.lua +++ b/builtin/mainmenu/settings/settingtypes.lua @@ -439,9 +439,9 @@ function settingtypes.parse_config_file(read_all, parse_mods) end -- Parse mods + pkgmgr.load_all() local mods_category_initialized = false - local mods = {} - pkgmgr.get_mods(core.get_modpath(), "mods", mods) + local mods = pkgmgr.global_mods:get_list() table.sort(mods, function(a, b) return a.name < b.name end) for _, mod in ipairs(mods) do diff --git a/builtin/mainmenu/tab_about.lua b/builtin/mainmenu/tab_about.lua index 1805acc81..0394ea507 100644 --- a/builtin/mainmenu/tab_about.lua +++ b/builtin/mainmenu/tab_about.lua @@ -15,90 +15,6 @@ --with this program; if not, write to the Free Software Foundation, Inc., --51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. --- https://github.com/orgs/minetest/teams/engine/members - -local core_developers = { - "Perttu Ahola (celeron55) [Project founder]", - "sfan5 ", - "ShadowNinja ", - "Nathanaëlle Courant (Nore/Ekdohibs) ", - "Loic Blot (nerzhul/nrz) ", - "Andrew Ward (rubenwardy) ", - "Krock/SmallJoker ", - "Lars Hofhansl ", - "v-rob ", - "Desour/DS", - "srifqi", - "Gregor Parzefall (grorp)", -} - --- currently only https://github.com/orgs/minetest/teams/triagers/members - -local core_team = { - "Zughy [Issue triager]", - "wsor [Issue triager]", - "Hugo Locurcio (Calinou) [Issue triager]", -} - --- For updating active/previous contributors, see the script in ./util/gather_git_credits.py - -local active_contributors = { - "Wuzzy [Features, translations, documentation]", - "numzero [Optimizations, work on OpenGL driver]", - "ROllerozxa [Bugfixes, Mainmenu]", - "Lars Müller [Bugfixes]", - "AFCMS [Documentation]", - "savilli [Bugfixes]", - "fluxionary [Bugfixes]", - "Bradley Pierce (Thresher) [Documentation]", - "Stvk imension [Android]", - "JosiahWI [Code cleanups]", - "OgelGames [UI, Bugfixes]", - "ndren [Bugfixes]", - "Abdou-31 [Documentation]", -} - -local previous_core_developers = { - "BlockMen", - "Maciej Kasatkin (RealBadAngel) [RIP]", - "Lisa Milne (darkrose) ", - "proller", - "Ilya Zhuravlev (xyz) ", - "PilzAdam ", - "est31 ", - "kahrl ", - "Ryan Kwolek (kwolekr) ", - "sapier", - "Zeno", - "Auke Kok (sofar) ", - "Aaron Suen ", - "paramat", - "Pierre-Yves Rollo ", - "hecks", - "Jude Melton-Houghton (TurkeyMcMac) [RIP]", - "Hugues Ross ", - "Dmitry Kostenko (x2048) ", -} - -local previous_contributors = { - "Nils Dagsson Moskopp (erlehmann) [Minetest logo]", - "red-001 ", - "Giuseppe Bilotta", - "HybridDog", - "ClobberXD", - "Dániel Juhász (juhdanad) ", - "MirceaKitsune ", - "Jean-Patrick Guerrero (kilbith)", - "MoNTE48", - "Constantin Wenger (SpeedProg)", - "Ciaran Gultnieks (CiaranG)", - "Paul Ouellette (pauloue)", - "stujones11", - "Rogier ", - "Gregory Currie (gregorycu)", - "JacobF", - "Jeija ", -} local function prepare_credits(dest, source) local string = table.concat(source, "\n") .. "\n" @@ -114,6 +30,13 @@ local function prepare_credits(dest, source) table.insert(dest, string) end +local function get_credits() + local f = assert(io.open(core.get_mainmenu_path() .. "/credits.json")) + local json = core.parse_json(f:read("*all")) + f:close() + return json +end + return { name = "about", caption = fgettext("About"), @@ -127,30 +50,32 @@ return { "", } + local credits = get_credits() + table.insert_all(hypertext, { "", fgettext_ne("Core Developers"), "\n", }) - prepare_credits(hypertext, core_developers) + prepare_credits(hypertext, credits.core_developers) table.insert_all(hypertext, { "\n", "", fgettext_ne("Core Team"), "\n", }) - prepare_credits(hypertext, core_team) + prepare_credits(hypertext, credits.core_team) table.insert_all(hypertext, { "\n", "", fgettext_ne("Active Contributors"), "\n", }) - prepare_credits(hypertext, active_contributors) + prepare_credits(hypertext, credits.contributors) table.insert_all(hypertext, { "\n", "", fgettext_ne("Previous Core Developers"), "\n", }) - prepare_credits(hypertext, previous_core_developers) + prepare_credits(hypertext, credits.previous_core_developers) table.insert_all(hypertext, { "\n", "", fgettext_ne("Previous Contributors"), "\n", }) - prepare_credits(hypertext, previous_contributors) + prepare_credits(hypertext, credits.previous_contributors) hypertext = table.concat(hypertext):sub(1, -2) diff --git a/builtin/mainmenu/tab_content.lua b/builtin/mainmenu/tab_content.lua index 18ff9cc8a..b38f12884 100644 --- a/builtin/mainmenu/tab_content.lua +++ b/builtin/mainmenu/tab_content.lua @@ -29,16 +29,11 @@ end local packages_raw, packages local function update_packages() - if not pkgmgr.global_mods then - pkgmgr.refresh_globals() - end - if not pkgmgr.games then - pkgmgr.update_gamelist() - end + pkgmgr.load_all() packages_raw = {} table.insert_all(packages_raw, pkgmgr.games) - table.insert_all(packages_raw, pkgmgr.get_texture_packs()) + table.insert_all(packages_raw, pkgmgr.texture_packs) table.insert_all(packages_raw, pkgmgr.global_mods:get_list()) local function get_data() @@ -207,6 +202,7 @@ local function handle_doubleclick(pkg) core.settings:set("texture_path", pkg.path) end packages = nil + pkgmgr.reload_texture_packs() mm_game_theme.init() mm_game_theme.set_engine() @@ -271,6 +267,7 @@ local function handle_buttons(tabview, fields, tabname, tabdata) core.settings:set("texture_path", txp_path) packages = nil + pkgmgr.reload_texture_packs() mm_game_theme.init() mm_game_theme.set_engine() @@ -283,7 +280,7 @@ end return { name = "content", caption = function() - local update_count = update_detector.get_count() + local update_count = core.settings:get_bool("contentdb_enable_updates_indicator") and update_detector.get_count() or 0 if update_count == 0 then return fgettext("Content") else diff --git a/builtin/mainmenu/tab_local.lua b/builtin/mainmenu/tab_local.lua index 1ed08d825..f0a7255d7 100644 --- a/builtin/mainmenu/tab_local.lua +++ b/builtin/mainmenu/tab_local.lua @@ -92,10 +92,16 @@ function singleplayer_refresh_gamebar() end end + local ENABLE_TOUCH = core.settings:get_bool("enable_touch") + + local gamebar_pos_y = MAIN_TAB_H + + TABHEADER_H -- tabheader included in formspec size + + (ENABLE_TOUCH and GAMEBAR_OFFSET_TOUCH or GAMEBAR_OFFSET_DESKTOP) + local btnbar = buttonbar_create( "game_button_bar", - core.settings:get_bool("enable_touch") and {x = 0, y = 7.25} or {x = 0, y = 7.475}, - {x = 15.5, y = 1.25}, + {x = 0, y = gamebar_pos_y}, + {x = MAIN_TAB_W, y = GAMEBAR_H}, "#000000", game_buttonbar_button_handler) diff --git a/builtin/profiler/instrumentation.lua b/builtin/profiler/instrumentation.lua index 0ffd9e6a9..c4feda7b4 100644 --- a/builtin/profiler/instrumentation.lua +++ b/builtin/profiler/instrumentation.lua @@ -217,8 +217,9 @@ local function init() -- Wrap register_lbm() to automatically instrument lbms. local orig_register_lbm = core.register_lbm core.register_lbm = function(spec) - spec.action = instrument { - func = spec.action, + local k = spec.bulk_action ~= nil and "bulk_action" or "action" + spec[k] = instrument { + func = spec[k], class = "LBM", label = spec.label or spec.name, } diff --git a/builtin/settingtypes.txt b/builtin/settingtypes.txt index 936ce74d1..187e1f45f 100644 --- a/builtin/settingtypes.txt +++ b/builtin/settingtypes.txt @@ -61,7 +61,7 @@ # # # This is a comment # # -# # Requires: shaders, enable_dynamic_shadows, !touchscreen_gui +# # Requires: shaders, enable_dynamic_shadows, !touch_controls # name (Readable name) type type_args # # A requirement can be the name of a boolean setting or an engine-defined value. @@ -72,7 +72,6 @@ # * shaders_support (a video driver that supports shaders, may not be enabled) # * shaders (both enable_shaders and shaders_support) # * desktop / android -# * touchscreen_gui / keyboard_mouse # * opengl / gles # * You can negate any requirement by prepending with ! # @@ -92,7 +91,7 @@ camera_smoothing (Camera smoothing) float 0.0 0.0 0.99 # Smooths rotation of camera when in cinematic mode, 0 to disable. Enter cinematic mode by using the key set in Controls. # -# Requires: keyboard_mouse +# Requires: !touch_controls cinematic_camera_smoothing (Camera smoothing in cinematic mode) float 0.7 0.0 0.99 # If enabled, you can place nodes at the position (feet + eye level) where you stand. @@ -113,12 +112,12 @@ always_fly_fast (Always fly fast) bool true # The time in seconds it takes between repeated node placements when holding # the place button. # -# Requires: keyboard_mouse -repeat_place_time (Place repetition interval) float 0.25 0.15 2.0 +# Requires: !touch_controls +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. -repeat_dig_time (Dig repetition interval) float 0.15 0.15 2.0 +repeat_dig_time (Minimum dig repetition interval) float 0.0 0.0 2.0 # Automatically jump up single-node obstacles. autojump (Automatic jumping) bool false @@ -132,63 +131,63 @@ safe_dig_and_place (Safe digging and placing) bool false # Invert vertical mouse movement. # -# Requires: keyboard_mouse +# Requires: !touch_controls invert_mouse (Invert mouse) bool false # Mouse sensitivity multiplier. # -# Requires: keyboard_mouse +# Requires: !touch_controls mouse_sensitivity (Mouse sensitivity) float 0.2 0.001 10.0 # Enable mouse wheel (scroll) for item selection in hotbar. # -# Requires: keyboard_mouse +# Requires: !touch_controls enable_hotbar_mouse_wheel (Hotbar: Enable mouse wheel for selection) bool true # Invert mouse wheel (scroll) direction for item selection in hotbar. # -# Requires: keyboard_mouse +# Requires: !touch_controls invert_hotbar_mouse_wheel (Hotbar: Invert mouse wheel direction) bool false [*Touchscreen] -# Enables touchscreen mode, allowing you to play the game with a touchscreen. -enable_touch (Enable touchscreen) bool true +# Enables the touchscreen controls, allowing you to play the game with a touchscreen. +touch_controls (Enable touchscreen controls) bool true # Touchscreen sensitivity multiplier. # -# Requires: touchscreen_gui +# Requires: touch_controls touchscreen_sensitivity (Touchscreen sensitivity) float 0.2 0.001 10.0 # The length in pixels after which a touch interaction is considered movement. # -# Requires: touchscreen_gui +# Requires: touch_controls touchscreen_threshold (Movement threshold) int 20 0 100 # The delay in milliseconds after which a touch interaction is considered a long tap. # -# Requires: touchscreen_gui +# Requires: touch_controls touch_long_tap_delay (Threshold for long taps) int 400 100 1000 # Use crosshair to select object instead of whole screen. # If enabled, a crosshair will be shown and will be used for selecting object. # -# Requires: touchscreen_gui +# Requires: touch_controls touch_use_crosshair (Use crosshair for touch screen) bool false # Fixes the position of virtual joystick. # If disabled, virtual joystick will center to first-touch's position. # -# Requires: touchscreen_gui +# Requires: touch_controls fixed_virtual_joystick (Fixed virtual joystick) bool false # Use virtual joystick to trigger "Aux1" button. # If enabled, virtual joystick will also tap "Aux1" button when out of main circle. # -# Requires: touchscreen_gui +# Requires: touch_controls virtual_joystick_triggers_aux1 (Virtual joystick triggers Aux1 button) bool false -# The gesture for for punching players/entities. +# The gesture for punching players/entities. # This can be overridden by games and mods. # # * short_tap @@ -198,7 +197,7 @@ virtual_joystick_triggers_aux1 (Virtual joystick triggers Aux1 button) bool fals # Known from the classic Minetest mobile controls. # Combat is more or less impossible. # -# Requires: touchscreen_gui +# Requires: touch_controls touch_punch_gesture (Punch gesture) enum short_tap short_tap,long_tap @@ -404,6 +403,11 @@ enable_clouds (Clouds) bool true # Requires: enable_clouds enable_3d_clouds (3D clouds) bool true +# Use smooth cloud shading. +# +# Requires: enable_3d_clouds, enable_clouds +soft_clouds (Soft clouds) bool false + [**Filtering and Antialiasing] # Use mipmaps when scaling textures. May slightly increase performance, @@ -506,6 +510,11 @@ water_wave_length (Waving liquids wavelength) float 20.0 0.1 # Requires: shaders, enable_waving_water water_wave_speed (Waving liquids wave speed) float 5.0 +# When enabled, liquid reflections are simulated. +# +# Requires: shaders, enable_waving_water, enable_dynamic_shadows +enable_water_reflections (Liquid reflections) bool false + [**Dynamic shadows] # Set to true to enable Shadow Mapping. @@ -705,6 +714,18 @@ enable_volumetric_auroras (Volumetric Auroras) bool false # Requires: shaders, enable_dynamic_shadows enable_bumpmaps (Bump maps) bool false +[**Other Effects] + +# Simulate translucency when looking at foliage in the sunlight. +# +# Requires: shaders, enable_dynamic_shadows +enable_translucent_foliage (Translucent foliage) bool false + +# Apply specular shading to nodes. +# +# Requires: shaders, enable_dynamic_shadows +enable_node_specular (Node specular) bool false + [*Audio] # Volume of all sounds. @@ -728,6 +749,10 @@ language (Language) enum ,be,bg,ca,cs,da,de,el,en,eo,es,et,eu,fi,fr,gd,gl,hu,i [**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. +touch_gui (Optimize GUI for touchscreens) bool 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 @@ -735,6 +760,9 @@ language (Language) enum ,be,bg,ca,cs,da,de,el,en,eo,es,et,eu,fi,fr,gd,gl,hu,i # edge pixels when images are scaled by non-integer sizes. gui_scaling (GUI scaling) float 1.0 0.5 20 +# Enables smooth scrolling. +smooth_scrolling (Smooth scrolling) bool true + # Enables animation of inventory items. inventory_items_animations (Inventory items animations) bool false @@ -773,6 +801,12 @@ hud_scaling (HUD scaling) float 1.0 0.5 20 # Mods may still set a background. show_nametag_backgrounds (Show name tag backgrounds by default) bool true +# Whether to show the client debug info (has the same effect as hitting F5). +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 + [**Chat] # Maximum number of recent chat messages to show @@ -807,6 +841,10 @@ 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 +# check for package updates when opening the mainmenu. +contentdb_enable_updates_indicator (Enable updates available indicator on content tab) bool true + # Comma-separated list of flags to hide in the content repository. # "nonfree" can be used to hide packages which do not qualify as 'free software', # as defined by the Free Software Foundation. @@ -834,7 +872,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 Minetest 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 @@ -862,6 +900,9 @@ server_url (Server URL) string https://minetest.net # Automatically report to the serverlist. server_announce (Announce server) bool false +# Send names of online players to the serverlist. If disabled only the player count is revealed. +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 @@ -1051,7 +1092,7 @@ mapgen_limit (Map generation limit) int 31007 0 31007 # 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. -mg_flags (Mapgen flags) flags caves,dungeons,light,decorations,biomes,ores caves,dungeons,light,decorations,biomes,ores,nocaves,nodungeons,nolight,nodecorations,nobiomes,noores +mg_flags (Mapgen flags) flags caves,dungeons,light,decorations,biomes,ores caves,dungeons,light,decorations,biomes,ores [*Biome API] @@ -1070,7 +1111,7 @@ mg_biome_np_humidity_blend (Humidity blend noise) noise_params_2d 0, 1.5, (8, 8, [*Mapgen V5] # Map generation attributes specific to Mapgen v5. -mgv5_spflags (Mapgen V5 specific flags) flags caverns caverns,nocaverns +mgv5_spflags (Mapgen V5 specific flags) flags caverns caverns # Controls width of tunnels, a smaller value creates wider tunnels. # Value >= 10.0 completely disables generation of tunnels and avoids the @@ -1144,7 +1185,7 @@ mgv5_np_dungeons (Dungeon noise) noise_params_3d 0.9, 0.5, (500, 500, 500), 0, 2 # 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. -mgv6_spflags (Mapgen V6 specific flags) flags jungles,biomeblend,mudflow,snowbiomes,noflat,trees,temples jungles,biomeblend,mudflow,snowbiomes,flat,trees,temples,nojungles,nobiomeblend,nomudflow,nosnowbiomes,noflat,notrees,notemples +mgv6_spflags (Mapgen V6 specific flags) flags jungles,biomeblend,mudflow,snowbiomes,noflat,trees,temples jungles,biomeblend,mudflow,snowbiomes,flat,trees,temples # Deserts occur when np_biome exceeds this value. # When the 'snowbiomes' flag is enabled, this is ignored. @@ -1200,7 +1241,7 @@ mgv6_np_apple_trees (Apple trees noise) noise_params_2d 0, 1, (100, 100, 100), 3 # 'ridges': Rivers. # 'floatlands': Floating land masses in the atmosphere. # 'caverns': Giant caves deep underground. -mgv7_spflags (Mapgen V7 specific flags) flags mountains,ridges,nofloatlands,caverns mountains,ridges,floatlands,caverns,nomountains,noridges,nofloatlands,nocaverns +mgv7_spflags (Mapgen V7 specific flags) flags mountains,ridges,nofloatlands,caverns mountains,ridges,floatlands,caverns # Y of mountain density gradient zero level. Used to shift mountains vertically. mgv7_mount_zero_level (Mountain zero level) int 0 -31000 31000 @@ -1334,7 +1375,7 @@ mgv7_np_dungeons (Dungeon noise) noise_params_3d 0.9, 0.5, (500, 500, 500), 0, 2 [*Mapgen Carpathian] # Map generation attributes specific to Mapgen Carpathian. -mgcarpathian_spflags (Mapgen Carpathian specific flags) flags caverns,norivers caverns,rivers,nocaverns,norivers +mgcarpathian_spflags (Mapgen Carpathian specific flags) flags caverns,norivers caverns,rivers # Defines the base ground level. mgcarpathian_base_level (Base ground level) float 12.0 @@ -1443,7 +1484,7 @@ mgcarpathian_np_dungeons (Dungeon noise) noise_params_3d 0.9, 0.5, (500, 500, 50 # Map generation attributes specific to Mapgen Flat. # Occasional lakes and hills can be added to the flat world. -mgflat_spflags (Mapgen Flat specific flags) flags nolakes,nohills,nocaverns lakes,hills,caverns,nolakes,nohills,nocaverns +mgflat_spflags (Mapgen Flat specific flags) flags nolakes,nohills,nocaverns lakes,hills,caverns # Y of flat ground. mgflat_ground_level (Ground level) int 8 -31000 31000 @@ -1527,7 +1568,7 @@ mgflat_np_dungeons (Dungeon noise) noise_params_3d 0.9, 0.5, (500, 500, 500), 0, # Map generation attributes specific to Mapgen Fractal. # 'terrain' enables the generation of non-fractal terrain: # ocean, islands and underground. -mgfractal_spflags (Mapgen Fractal specific flags) flags terrain terrain,noterrain +mgfractal_spflags (Mapgen Fractal specific flags) flags terrain terrain # Controls width of tunnels, a smaller value creates wider tunnels. # Value >= 10.0 completely disables generation of tunnels and avoids the @@ -1661,7 +1702,7 @@ mgfractal_np_dungeons (Dungeon noise) noise_params_3d 0.9, 0.5, (500, 500, 500), # 'vary_river_depth': If enabled, low humidity and high heat causes rivers # to become shallower and occasionally dry. # 'altitude_dry': Reduces humidity with altitude. -mgvalleys_spflags (Mapgen Valleys specific flags) flags altitude_chill,humid_rivers,vary_river_depth,altitude_dry altitude_chill,humid_rivers,vary_river_depth,altitude_dry,noaltitude_chill,nohumid_rivers,novary_river_depth,noaltitude_dry +mgvalleys_spflags (Mapgen Valleys specific flags) flags altitude_chill,humid_rivers,vary_river_depth,altitude_dry altitude_chill,humid_rivers,vary_river_depth,altitude_dry # The vertical distance over which heat drops by 20 if 'altitude_chill' is # enabled. Also, the vertical distance over which humidity drops by 10 if @@ -1876,11 +1917,11 @@ shader_path (Shader path) path # 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. -video_driver (Video driver) enum ,opengl,opengl3,ogles1,ogles2 +video_driver (Video driver) enum ,opengl,opengl3,ogles2 -# 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. transparency_sorting_distance (Transparency Sorting Distance) int 16 0 128 # Radius of cloud area stated in number of 64 node cloud squares. @@ -2040,9 +2081,6 @@ client_unload_unused_data_timeout (Mapblock unload timeout) float 600.0 0.0 # Set to -1 for unlimited amount. client_mapblock_limit (Mapblock limit) int 7500 -1 2147483647 -# Whether to show the client debug info (has the same effect as hitting F5). -show_debug (Show debug info) bool 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) @@ -2052,9 +2090,8 @@ max_simultaneous_block_sends_per_client (Maximum simultaneous block sends per cl # This determines how long they are slowed down after placing or removing a node. full_block_send_enable_min_time_from_building (Delay in sending blocks after building) float 2.0 0.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. max_packets_per_iteration (Max. packets per iteration) int 1024 1 65535 # Compression level to use when sending mapblocks to the client. @@ -2230,9 +2267,6 @@ curl_file_download_timeout (cURL file download timeout) int 300000 5000 21474836 [**Miscellaneous] -# Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k screens. -screen_dpi (DPI) int 72 1 - # Adjust the detected display density, used for scaling UI elements. display_density_factor (Display Density Scaling Factor) float 1 0.5 5.0 diff --git a/client/shaders/Irrlicht b/client/shaders/Irrlicht deleted file mode 120000 index 9349d3073..000000000 --- a/client/shaders/Irrlicht +++ /dev/null @@ -1 +0,0 @@ -../../irr/media/Shaders \ No newline at end of file diff --git a/irr/media/Shaders/OneTextureBlend.fsh b/client/shaders/Irrlicht/OneTextureBlend.fsh similarity index 100% rename from irr/media/Shaders/OneTextureBlend.fsh rename to client/shaders/Irrlicht/OneTextureBlend.fsh diff --git a/irr/media/Shaders/Renderer2D.fsh b/client/shaders/Irrlicht/Renderer2D.fsh similarity index 100% rename from irr/media/Shaders/Renderer2D.fsh rename to client/shaders/Irrlicht/Renderer2D.fsh diff --git a/irr/media/Shaders/Renderer2D.vsh b/client/shaders/Irrlicht/Renderer2D.vsh similarity index 100% rename from irr/media/Shaders/Renderer2D.vsh rename to client/shaders/Irrlicht/Renderer2D.vsh diff --git a/irr/media/Shaders/Renderer2D_noTex.fsh b/client/shaders/Irrlicht/Renderer2D_noTex.fsh similarity index 100% rename from irr/media/Shaders/Renderer2D_noTex.fsh rename to client/shaders/Irrlicht/Renderer2D_noTex.fsh diff --git a/irr/media/Shaders/Solid.fsh b/client/shaders/Irrlicht/Solid.fsh similarity index 100% rename from irr/media/Shaders/Solid.fsh rename to client/shaders/Irrlicht/Solid.fsh diff --git a/irr/media/Shaders/Solid.vsh b/client/shaders/Irrlicht/Solid.vsh similarity index 96% rename from irr/media/Shaders/Solid.vsh rename to client/shaders/Irrlicht/Solid.vsh index 7379e5bb4..fd7467f5c 100644 --- a/irr/media/Shaders/Solid.vsh +++ b/client/shaders/Irrlicht/Solid.vsh @@ -11,7 +11,6 @@ attribute vec2 inTexCoord0; uniform mat4 uWVPMatrix; uniform mat4 uWVMatrix; -uniform mat4 uNMatrix; uniform mat4 uTMatrix0; uniform float uThickness; diff --git a/irr/media/Shaders/TransparentAlphaChannel.fsh b/client/shaders/Irrlicht/TransparentAlphaChannel.fsh similarity index 100% rename from irr/media/Shaders/TransparentAlphaChannel.fsh rename to client/shaders/Irrlicht/TransparentAlphaChannel.fsh diff --git a/irr/media/Shaders/TransparentAlphaChannelRef.fsh b/client/shaders/Irrlicht/TransparentAlphaChannelRef.fsh similarity index 100% rename from irr/media/Shaders/TransparentAlphaChannelRef.fsh rename to client/shaders/Irrlicht/TransparentAlphaChannelRef.fsh diff --git a/irr/media/Shaders/TransparentVertexAlpha.fsh b/client/shaders/Irrlicht/TransparentVertexAlpha.fsh similarity index 100% rename from irr/media/Shaders/TransparentVertexAlpha.fsh rename to client/shaders/Irrlicht/TransparentVertexAlpha.fsh diff --git a/client/shaders/cloud_shader/opengl_vertex.glsl b/client/shaders/cloud_shader/opengl_vertex.glsl index 3f2e7d9b3..ebf4aae49 100644 --- a/client/shaders/cloud_shader/opengl_vertex.glsl +++ b/client/shaders/cloud_shader/opengl_vertex.glsl @@ -1,4 +1,4 @@ -uniform lowp vec4 emissiveColor; +uniform lowp vec4 materialColor; varying lowp vec4 varColor; @@ -14,7 +14,7 @@ void main(void) vec4 color = inVertexColor; #endif - color *= emissiveColor; + color *= materialColor; varColor = color; eyeVec = -(mWorldView * inVertexPosition).xyz; diff --git a/client/shaders/fxaa/opengl_fragment.glsl b/client/shaders/fxaa/opengl_fragment.glsl index 130e689ea..f70064b6d 100644 --- a/client/shaders/fxaa/opengl_fragment.glsl +++ b/client/shaders/fxaa/opengl_fragment.glsl @@ -58,11 +58,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #define FXAA_SPAN_MAX 8.0 #endif -//optimized version for mobile, where dependent +//optimized version for mobile, where dependent //texture reads can be a bottleneck vec4 fxaa(sampler2D tex, vec2 fragCoord, vec2 inverseVP, - vec2 v_rgbNW, vec2 v_rgbNE, - vec2 v_rgbSW, vec2 v_rgbSE, + vec2 v_rgbNW, vec2 v_rgbNE, + vec2 v_rgbSW, vec2 v_rgbSE, vec2 v_rgbM) { vec4 color; vec3 rgbNW = texture2D(tex, v_rgbNW).xyz; @@ -111,6 +111,6 @@ void main(void) { vec2 uv = varTexCoord.st; - gl_FragColor = fxaa(rendered, uv, texelSize0, + gl_FragColor = fxaa(rendered, uv, texelSize0, sampleNW, sampleNE, sampleSW, sampleSE, uv); } diff --git a/client/shaders/fxaa/opengl_vertex.glsl b/client/shaders/fxaa/opengl_vertex.glsl index 26913c28e..68bb36d1c 100644 --- a/client/shaders/fxaa/opengl_vertex.glsl +++ b/client/shaders/fxaa/opengl_vertex.glsl @@ -12,7 +12,7 @@ varying vec2 sampleSW; varying vec2 sampleSE; /* -Based on +Based on https://github.com/mattdesl/glsl-fxaa/ Portions Copyright (c) 2011 by Armin Ronacher. */ diff --git a/client/shaders/nodes_shader/opengl_fragment.glsl b/client/shaders/nodes_shader/opengl_fragment.glsl index 4c591d4e0..c42e87a1b 100644 --- a/client/shaders/nodes_shader/opengl_fragment.glsl +++ b/client/shaders/nodes_shader/opengl_fragment.glsl @@ -17,6 +17,7 @@ uniform float fogShadingParameter; // The cameraOffset is the current center of the visible world. uniform highp vec3 cameraOffset; +uniform vec3 cameraPosition; uniform float animationTimer; #ifdef ENABLE_DYNAMIC_SHADOWS // shadow texture @@ -30,6 +31,7 @@ uniform float animationTimer; uniform vec4 CameraPos; uniform float xyPerspectiveBias0; uniform float xyPerspectiveBias1; + uniform vec3 shadow_tint; varying float adj_shadow_strength; varying float cosLight; @@ -57,6 +59,49 @@ varying highp vec3 eyeVec; varying float nightRatio; #ifdef ENABLE_DYNAMIC_SHADOWS +#if (defined(MATERIAL_WAVING_LIQUID) && defined(ENABLE_WATER_REFLECTIONS) && ENABLE_WAVING_WATER) +vec4 perm(vec4 x) +{ + return mod(((x * 34.0) + 1.0) * x, 289.0); +} + +// Corresponding gradient of snoise +vec3 gnoise(vec3 p){ + vec3 a = floor(p); + vec3 d = p - a; + vec3 dd = 6.0 * d * (1.0 - d); + d = d * d * (3.0 - 2.0 * d); + + vec4 b = a.xxyy + vec4(0.0, 1.0, 0.0, 1.0); + vec4 k1 = perm(b.xyxy); + vec4 k2 = perm(k1.xyxy + b.zzww); + + vec4 c = k2 + a.zzzz; + vec4 k3 = perm(c); + vec4 k4 = perm(c + 1.0); + + vec4 o1 = fract(k3 * (1.0 / 41.0)); + vec4 o2 = fract(k4 * (1.0 / 41.0)); + + vec4 o3 = o2 * d.z + o1 * (1.0 - d.z); + vec2 o4 = o3.yw * d.x + o3.xz * (1.0 - d.x); + + vec4 dz1 = (o2 - o1) * dd.z; + vec2 dz2 = dz1.yw * d.x + dz1.xz * (1.0 - d.x); + + vec2 dx = (o3.yw - o3.xz) * dd.x; + + return vec3( + dx.y * d.y + dx.x * (1. - d.y), + (o4.y - o4.x) * dd.y, + dz2.y * d.y + dz2.x * (1. - d.y) + ); +} + +vec2 wave_noise(vec3 p, float off) { + return (gnoise(p + vec3(0.0, 0.0, off)) * 0.4 + gnoise(2.0 * p + vec3(0.0, off, off)) * 0.2 + gnoise(3.0 * p + vec3(0.0, off, off)) * 0.225 + gnoise(4.0 * p + vec3(-off, off, 0.0)) * 0.2).xz; +} +#endif #ifdef ENABLE_BUMPMAPS vec4 perm(vec4 x) @@ -106,6 +151,14 @@ float mtsmoothstep(in float edge0, in float edge1, in float x) return t * t * (3.0 - 2.0 * t); } +float shadowCutoff(float x) { + #if defined(ENABLE_TRANSLUCENT_FOLIAGE) && MATERIAL_TYPE == TILE_MATERIAL_WAVING_LEAVES + return mtsmoothstep(0.0, 0.002, x); + #else + return step(0.0, x); + #endif +} + #ifdef COLORED_SHADOWS // c_precision of 128 fits within 7 base-10 digits @@ -132,10 +185,10 @@ vec4 getHardShadowColor(sampler2D shadowsampler, vec2 smTexCoord, float realDist { vec4 texDepth = texture2D(shadowsampler, smTexCoord.xy).rgba; - float visibility = step(0.0, realDistance - texDepth.r); + float visibility = shadowCutoff(realDistance - texDepth.r); vec4 result = vec4(visibility, vec3(0.0,0.0,0.0));//unpackColor(texDepth.g)); if (visibility < 0.1) { - visibility = step(0.0, realDistance - texDepth.b); + visibility = shadowCutoff(realDistance - texDepth.b); result = vec4(visibility, unpackColor(texDepth.a)); } return result; @@ -146,7 +199,7 @@ vec4 getHardShadowColor(sampler2D shadowsampler, vec2 smTexCoord, float realDist float getHardShadow(sampler2D shadowsampler, vec2 smTexCoord, float realDistance) { float texDepth = texture2D(shadowsampler, smTexCoord.xy).r; - float visibility = step(0.0, realDistance - texDepth); + float visibility = shadowCutoff(realDistance - texDepth); return visibility; } @@ -421,7 +474,6 @@ void main(void) // Fragment normal, can differ from vNormal which is derived from vertex normals. vec3 fNormal = vNormal; -#if (defined(ENABLE_BUMPMAPS) && !defined(MATERIAL_LIQUID)) vec2 dr = vec2(0.25) * texelSize0; // Sample the texture to then compute the derivative float fx0y0 = texture2D(baseTexture, uv).r; @@ -474,12 +526,20 @@ void main(void) // Power ratio was measured on torches in MTG (brightness = 14). float adjusted_night_ratio = pow(max(0.0, nightRatio), 0.6); + float shadow_uncorrected = shadow_int; + // Apply self-shadowing when light falls at a narrow angle to the surface // Cosine of the cut-off angle. const float self_shadow_cutoff_cosine = 0.035; + if (f_normal_length != 0 && adj_cosLight < self_shadow_cutoff_cosine) { shadow_int = max(shadow_int, 1 - clamp(adj_cosLight, 0.0, self_shadow_cutoff_cosine)/self_shadow_cutoff_cosine); shadow_color = mix(vec3(0.0), shadow_color, min(adj_cosLight, self_shadow_cutoff_cosine)/self_shadow_cutoff_cosine); + +#if (MATERIAL_TYPE == TILE_MATERIAL_WAVING_LEAVES || MATERIAL_TYPE == TILE_MATERIAL_WAVING_PLANTS) + // Prevents foliage from becoming insanely bright outside the shadow map. + shadow_uncorrected = mix(shadow_int, shadow_uncorrected, clamp(distance_rate * 4.0 - 3.0, 0.0, 1.0)); +#endif } shadow_int *= f_adj_shadow_strength; @@ -488,8 +548,60 @@ void main(void) col.rgb = adjusted_night_ratio * col.rgb + // artificial light sunTint * (1.0 - adjusted_night_ratio) * ( // natural light - col.rgb * (1.0 - shadow_int * (1.0 - shadow_color)) + // filtered texture color + col.rgb * (1.0 - shadow_int * (1.0 - shadow_color) * (1.0 - shadow_tint)) + // filtered texture color dayLight * shadow_color * shadow_int); // reflected filtered sunlight/moonlight + + + vec3 reflect_ray = -normalize(v_LightDirection - fNormal * dot(v_LightDirection, fNormal) * 2.0); + + vec3 viewVec = normalize(worldPosition + cameraOffset - cameraPosition); + + // Water reflections +#if (defined(MATERIAL_WAVING_LIQUID) && defined(ENABLE_WATER_REFLECTIONS) && ENABLE_WAVING_WATER) + vec3 wavePos = worldPosition * vec3(2.0, 0.0, 2.0); + float off = animationTimer * WATER_WAVE_SPEED * 10.0; + wavePos.x /= WATER_WAVE_LENGTH * 3.0; + wavePos.z /= WATER_WAVE_LENGTH * 2.0; + + // This is an analogous method to the bumpmap, except we get the gradient information directly from gnoise. + vec2 gradient = wave_noise(wavePos, off); + fNormal = normalize(normalize(fNormal) + vec3(gradient.x, 0., gradient.y) * WATER_WAVE_HEIGHT * abs(fNormal.y) * 0.25); + reflect_ray = -normalize(v_LightDirection - fNormal * dot(v_LightDirection, fNormal) * 2.0); + float fresnel_factor = dot(fNormal, viewVec); + + float brightness_factor = 1.0 - adjusted_night_ratio; + + // A little trig hack. We go from the dot product of viewVec and normal to the dot product of viewVec and tangent to apply a fresnel effect. + fresnel_factor = clamp(pow(1.0 - fresnel_factor * fresnel_factor, 8.0), 0.0, 1.0) * 0.8 + 0.2; + col.rgb *= 0.5; + vec3 reflection_color = mix(vec3(max(fogColor.r, max(fogColor.g, fogColor.b))), fogColor.rgb, f_shadow_strength); + + // Sky reflection + col.rgb += reflection_color * pow(fresnel_factor, 2.0) * 0.5 * brightness_factor; + vec3 water_reflect_color = 12.0 * dayLight * fresnel_factor * mtsmoothstep(0.85, 0.9, pow(clamp(dot(reflect_ray, viewVec), 0.0, 1.0), 32.0)) * max(1.0 - shadow_uncorrected, 0.0); + + // This line exists to prevent ridiculously bright reflection colors. + water_reflect_color /= clamp(max(water_reflect_color.r, max(water_reflect_color.g, water_reflect_color.b)) * 0.375, 1.0, 400.0); + col.rgb += water_reflect_color * f_adj_shadow_strength * brightness_factor; +#endif + +#if (defined(ENABLE_NODE_SPECULAR) && !defined(MATERIAL_WAVING_LIQUID)) + // Apply specular to blocks. + if (dot(v_LightDirection, vNormal) < 0.0) { + float intensity = 2.0 * (1.0 - (base.r * varColor.r)); + const float specular_exponent = 5.0; + const float fresnel_exponent = 4.0; + + col.rgb += + intensity * dayLight * (1.0 - nightRatio) * (1.0 - shadow_uncorrected) * f_adj_shadow_strength * + pow(max(dot(reflect_ray, viewVec), 0.0), fresnel_exponent) * pow(1.0 - abs(dot(viewVec, fNormal)), specular_exponent); + } +#endif + +#if (MATERIAL_TYPE == TILE_MATERIAL_WAVING_PLANTS || MATERIAL_TYPE == TILE_MATERIAL_WAVING_LEAVES) && defined(ENABLE_TRANSLUCENT_FOLIAGE) + // Simulate translucent foliage. + col.rgb += 4.0 * dayLight * base.rgb * normalize(base.rgb * varColor.rgb * varColor.rgb) * f_adj_shadow_strength * pow(max(-dot(v_LightDirection, viewVec), 0.0), 4.0) * max(1.0 - shadow_uncorrected, 0.0); +#endif } #endif @@ -504,7 +616,13 @@ void main(void) // Note: clarity = (1 - fogginess) float clarity = clamp(fogShadingParameter - fogShadingParameter * length(eyeVec) / fogDistance, 0.0, 1.0); - col = mix(fogColor, col, clarity); + float fogColorMax = max(max(fogColor.r, fogColor.g), fogColor.b); + // Prevent zero division. + if (fogColorMax < 0.0000001) fogColorMax = 1.0; + // For high clarity (light fog) we tint the fog color. + // For this to not make the fog color artificially dark we need to normalize using the + // fog color's brightest value. We then blend our base color with this to make the fog. + col = mix(fogColor * pow(fogColor / fogColorMax, vec4(2.0 * clarity)), col, clarity); col = vec4(col.rgb, base.a); gl_FragData[0] = col; diff --git a/client/shaders/nodes_shader/opengl_vertex.glsl b/client/shaders/nodes_shader/opengl_vertex.glsl index 4d13f1142..30205d3cd 100644 --- a/client/shaders/nodes_shader/opengl_vertex.glsl +++ b/client/shaders/nodes_shader/opengl_vertex.glsl @@ -268,7 +268,9 @@ void main(void) z_bias *= pFactor * pFactor / f_textureresolution / f_shadowfar; shadow_position = applyPerspectiveDistortion(m_ShadowViewProj * mWorld * (shadow_pos + vec4(normalOffsetScale * nNormal, 0.0))).xyz; +#if !defined(ENABLE_TRANSLUCENT_FOLIAGE) || MATERIAL_TYPE != TILE_MATERIAL_WAVING_LEAVES shadow_position.z -= z_bias; +#endif perspective_factor = pFactor; sunTint = vec3(1.0); diff --git a/client/shaders/object_shader/opengl_fragment.glsl b/client/shaders/object_shader/opengl_fragment.glsl index db58d174f..1ac05dfed 100644 --- a/client/shaders/object_shader/opengl_fragment.glsl +++ b/client/shaders/object_shader/opengl_fragment.glsl @@ -21,6 +21,7 @@ uniform float animationTimer; uniform vec4 CameraPos; uniform float xyPerspectiveBias0; uniform float xyPerspectiveBias1; + uniform vec3 shadow_tint; varying float adj_shadow_strength; varying float cosLight; @@ -433,7 +434,7 @@ void main(void) col.rgb = adjusted_night_ratio * col.rgb + // artificial light sunTint * (1.0 - adjusted_night_ratio) * ( // natural light - col.rgb * (1.0 - shadow_int * (1.0 - shadow_color)) + // filtered texture color + col.rgb * (1.0 - shadow_int * (1.0 - shadow_color) * (1.0 - shadow_tint)) + // filtered texture color dayLight * shadow_color * shadow_int); // reflected filtered sunlight/moonlight } #endif @@ -449,7 +450,13 @@ void main(void) // Note: clarity = (1 - fogginess) float clarity = clamp(fogShadingParameter - fogShadingParameter * length(eyeVec) / fogDistance, 0.0, 1.0); - col = mix(fogColor, col, clarity); + float fogColorMax = max(max(fogColor.r, fogColor.g), fogColor.b); + // Prevent zero division. + if (fogColorMax < 0.0000001) fogColorMax = 1.0; + // For high clarity (light fog) we tint the fog color. + // For this to not make the fog color artificially dark we need to normalize using the + // fog color's brightest value. We then blend our base color with this to make the fog. + col = mix(fogColor * pow(fogColor / fogColorMax, vec4(2.0 * clarity)), col, clarity); col = vec4(col.rgb, base.a); gl_FragData[0] = col; diff --git a/client/shaders/object_shader/opengl_vertex.glsl b/client/shaders/object_shader/opengl_vertex.glsl index fe55f2bad..b29269281 100644 --- a/client/shaders/object_shader/opengl_vertex.glsl +++ b/client/shaders/object_shader/opengl_vertex.glsl @@ -1,7 +1,7 @@ uniform mat4 mWorld; uniform vec3 dayLight; uniform float animationTimer; -uniform lowp vec4 emissiveColor; +uniform lowp vec4 materialColor; varying vec3 vNormal; varying vec3 vPosition; @@ -106,7 +106,7 @@ vec3 getDirectLightScatteringAtGround(vec3 v_LightDirection) void main(void) { - varTexCoord = (mTexture * inTexCoord0).st; + varTexCoord = (mTexture * vec4(inTexCoord0.xy, 1.0, 1.0)).st; gl_Position = mWorldViewProj * inVertexPosition; vPosition = gl_Position.xyz; @@ -130,7 +130,7 @@ void main(void) vec4 color = inVertexColor; #endif - color *= emissiveColor; + color *= materialColor; // The alpha gives the ratio of sunlight in the incoming light. nightRatio = 1.0 - color.a; diff --git a/client/shaders/stars_shader/opengl_fragment.glsl b/client/shaders/stars_shader/opengl_fragment.glsl index 224032fa3..e991e4f94 100644 --- a/client/shaders/stars_shader/opengl_fragment.glsl +++ b/client/shaders/stars_shader/opengl_fragment.glsl @@ -1,6 +1,6 @@ -uniform lowp vec4 emissiveColor; +uniform lowp vec4 materialColor; void main(void) { - gl_FragColor = emissiveColor; + gl_FragColor = materialColor; } diff --git a/client/shaders/volumetric_light/opengl_fragment.glsl b/client/shaders/volumetric_light/opengl_fragment.glsl index 9ed5fa9ba..001f59465 100644 --- a/client/shaders/volumetric_light/opengl_fragment.glsl +++ b/client/shaders/volumetric_light/opengl_fragment.glsl @@ -46,7 +46,9 @@ float sampleVolumetricLight(vec2 uv, vec3 lightVec, float rawDepth) if (min(samplepos.x, samplepos.y) > 0. && max(samplepos.x, samplepos.y) < 1.) result += texture2D(depthmap, samplepos).r < 1. ? 0.0 : 1.0; } - return result / samples; + // We use the depth map to approximate the effect of depth on the light intensity. + // The exponent was chosen based on aesthetic preference. + return result / samples * pow(texture2D(depthmap, uv).r, 128.0); } vec3 getDirectLightScatteringAtGround(vec3 v_LightDirection) diff --git a/cmake/Modules/FindLua.cmake b/cmake/Modules/FindLua.cmake index be5d92d8c..a239046ac 100644 --- a/cmake/Modules/FindLua.cmake +++ b/cmake/Modules/FindLua.cmake @@ -11,7 +11,7 @@ if(ENABLE_LUAJIT) find_package(LuaJIT) if(LUAJIT_FOUND) set(USE_LUAJIT TRUE) - message (STATUS "Using LuaJIT provided by system.") + message (STATUS "Using LuaJIT") elseif(REQUIRE_LUAJIT) message(FATAL_ERROR "LuaJIT not found whereas REQUIRE_LUAJIT=\"TRUE\" is used.\n" "To continue, either install LuaJIT or do not use REQUIRE_LUAJIT=\"TRUE\".") diff --git a/doc/client_lua_api.md b/doc/client_lua_api.md index 260603971..cd651f1b3 100644 --- a/doc/client_lua_api.md +++ b/doc/client_lua_api.md @@ -1,4 +1,4 @@ -Minetest Lua Client Modding API Reference 5.9.0 +Minetest Lua Client Modding API Reference 5.10.0 ================================================ * More information at * Developer Wiki: @@ -314,7 +314,8 @@ Minetest namespace reference Call these functions only at load time! * `minetest.register_globalstep(function(dtime))` - * Called every client environment step, usually interval of 0.1s + * Called every client environment step + * `dtime` is the time since last execution in seconds. * `minetest.register_on_mods_loaded(function())` * Called just after mods have finished loading. * `minetest.register_on_shutdown(function())` @@ -337,8 +338,6 @@ Call these functions only at load time! 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_death(function())` - * Called when the local player dies * `minetest.register_on_hp_modification(function(hp))` * Called when server modified player's HP * `minetest.register_on_damage_taken(function(hp))` @@ -486,8 +485,6 @@ Call these functions only at load time! * Returns `false` if the client is already disconnecting otherwise returns `true`. * `minetest.get_server_info()` * Returns [server info](#server-info). -* `minetest.send_respawn()` - * Sends a respawn request to the server. ### Storage API * `minetest.get_mod_storage()`: @@ -585,9 +582,9 @@ Call these functions only at load time! * `minetest.camera` * Reference to the camera object. See [`Camera`](#camera) class reference for methods. * `minetest.show_formspec(formname, formspec)` : returns true on success - * Shows a formspec to the player + * Shows a formspec to the player * `minetest.display_chat_message(message)` returns true on success - * Shows a chat message to the current player. + * Shows a chat message to the current player. Setting-related --------------- @@ -865,9 +862,9 @@ It can be created via `Raycast(pos1, pos2, objects, liquids)` or ----------------- ### Definitions * `minetest.get_node_def(nodename)` - * Returns [node definition](#node-definition) table of `nodename` + * Returns [node definition](#node-definition) table of `nodename` * `minetest.get_item_def(itemstring)` - * Returns item definition table of `itemstring` + * Returns item definition table of `itemstring` #### Node Definition @@ -897,7 +894,7 @@ It can be created via `Raycast(pos1, pos2, objects, liquids)` or "node1", "node2" }, - post_effect_color = Color, -- Color overlayed on the screen when the player is in the node + post_effect_color = Color, -- Color overlaid on the screen when the player is in the node leveled = number, -- Max level for node sunlight_propogates = bool, -- Whether light passes through the block light_source = number, -- Light emitted by the block @@ -970,10 +967,10 @@ 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. - 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. + address = "minetest.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. } ``` diff --git a/doc/compiling/README.md b/doc/compiling/README.md index a1ab1ebbd..bfe91950f 100644 --- a/doc/compiling/README.md +++ b/doc/compiling/README.md @@ -22,6 +22,7 @@ General options and their default values: MinSizeRel - Release build with -Os passed to compiler to make executable as small as possible PRECOMPILE_HEADERS=FALSE - Precompile some headers (experimental; requires CMake 3.16 or later) PRECOMPILED_HEADERS_PATH= - Path to a file listing all headers to precompile (default points to src/precompiled_headers.txt) + USE_SDL2=TRUE - Build with SDL2; Enables IrrlichtMt device SDL2 ENABLE_CURL=ON - Build with cURL; Enables use of online mod repo, public serverlist and remote media fetching via http ENABLE_CURSES=ON - Build with (n)curses; Enables a server side terminal (command line option: --terminal) ENABLE_GETTEXT=ON - Build with Gettext; Allows using translations @@ -39,10 +40,15 @@ General options and their default values: ENABLE_UPDATE_CHECKER=TRUE - Whether to enable update checks by default INSTALL_DEVTEST=FALSE - Whether the Development Test game should be installed alongside Minetest 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) Library specific options: + SDL2_DLL - Only if building with SDL2 on Windows; path to libSDL2.dll + SDL2_INCLUDE_DIRS - Only if building with SDL2; directory where SDL.h is located + SDL2_LIBRARIES - Only if building with SDL2; path to libSDL2.a/libSDL2.so/libSDL2.lib CURL_DLL - Only if building with cURL on Windows; path to libcurl.dll CURL_INCLUDE_DIR - Only if building with cURL; directory where curl.h is located CURL_LIBRARY - Only if building with cURL; path to libcurl.a/libcurl.so/libcurl.lib diff --git a/doc/compiling/linux.md b/doc/compiling/linux.md index 0406a063c..573c6908e 100644 --- a/doc/compiling/linux.md +++ b/doc/compiling/linux.md @@ -41,7 +41,7 @@ For Alpine users: 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 libzstd-devel gettext SDL2-devel + 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 c63a7b319..eeaf2e4fd 100644 --- a/doc/compiling/windows.md +++ b/doc/compiling/windows.md @@ -14,7 +14,7 @@ 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 sdl2 --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. @@ -52,7 +52,7 @@ Use `--triplet` to specify the target triplet, e.g. `x64-windows` or `x86-window Run the following script in PowerShell: ```powershell -cmake . -G"Visual Studio 15 2017 Win64" -DCMAKE_TOOLCHAIN_FILE=D:/vcpkg/scripts/buildsystems/vcpkg.cmake -DCMAKE_BUILD_TYPE=Release -DENABLE_GETTEXT=OFF -DENABLE_CURSES=OFF +cmake . -G"Visual Studio 16 2019" -DCMAKE_TOOLCHAIN_FILE=D:/vcpkg/scripts/buildsystems/vcpkg.cmake -DCMAKE_BUILD_TYPE=Release -DENABLE_CURSES=OFF cmake --build . --config Release ``` Make sure that the right compiler is selected and the path to the vcpkg toolchain is correct. diff --git a/doc/developing/misc.md b/doc/developing/misc.md index 1d3d8c941..2ac843caf 100644 --- a/doc/developing/misc.md +++ b/doc/developing/misc.md @@ -1,6 +1,6 @@ # Miscellaneous -## Profiling Minetest on Linux +## Profiling Minetest 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`. @@ -36,3 +36,54 @@ Give both files to the developer and also provide: * commit the source was built from and/or modified source code (if applicable) Hotspot will resolve symbols correctly when pointing the sysroot option at the collected libs. + + +## Profiling with Tracy + +[Tracy](https://github.com/wolfpld/tracy) is +> A real time, nanosecond resolution, remote telemetry, hybrid frame and sampling +> profiler for games and other applications. + +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 +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). + +Install the server, e.g. using your package manager. + +### Building + +Build Minetest 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`. + +To actually use Tracy, you also have to enable it with Tracy's build options: +``` +-DTRACY_ENABLE=1 -DTRACY_ONLY_LOCALHOST=1 +``` + +See Tracy's documentation for more build options. + +### Using in C++ + +Start the Tracy server and Minetest. You should see Minetest 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. + +### Using in Lua + +Tracy also supports Lua. +If built with Tracy, Minetest 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 +is or becomes insecure. Run untrusted mods at your own risk. diff --git a/doc/lua_api.md b/doc/lua_api.md index b1412ca85..66a83542e 100644 --- a/doc/lua_api.md +++ b/doc/lua_api.md @@ -4,6 +4,7 @@ Minetest Lua Modding API Reference * More information at * Developer Wiki: * (Unofficial) Minetest Modding Book by rubenwardy: +* Modding tools: Introduction ------------ @@ -273,7 +274,7 @@ Accepted formats are: images: .png, .jpg, .tga, (deprecated:) .bmp sounds: .ogg vorbis - models: .x, .b3d, .obj + models: .x, .b3d, .obj, .gltf (Minetest 5.10 or newer) Other formats won't be sent to the client (e.g. you can store .blend files in a folder for convenience, without the risk that such files are transferred) @@ -290,6 +291,43 @@ in one of its parents, the parent's file is used. Although it is discouraged, a mod can overwrite a media file of any mod that it depends on by supplying a file with an equal name. +Only a subset of model file format features is supported: + +Simple textured meshes (with multiple textures), optionally with normals. +The .x and .b3d formats additionally support skeletal animation. + +#### glTF + +The glTF model file format for now only serves as a +more modern alternative to the other static model file formats; +it unlocks no special rendering features. + +This means that many glTF features are not supported *yet*, including: + +* Animation +* Cameras +* Materials + * Only base color textures are supported + * Backface culling is overridden + * Double-sided materials don't work +* Alternative means of supplying data + * Embedded images + * References to files via URIs + +Textures are supplied solely via the same means as for the other model file formats: +The `textures` object property, the `tiles` node definition field and +the list of textures used in the `model[]` formspec element. + +The order in which textures are to be supplied +is that in which they appear in the `textures` array in the glTF file. + +Do not rely on glTF features not being supported; they may be supported in the future. +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, +and thus cause your model to render differently there. + Naming conventions ------------------ @@ -456,6 +494,10 @@ i.e. without gamma-correction. Textures can be overlaid by putting a `^` between them. +Warning: If the lower and upper pixels are both semi-transparent, this operation +does *not* do alpha blending, and it is *not* associative. Otherwise it does +alpha blending in srgb color space. + Example: default_dirt.png^default_grass_side.png @@ -1098,7 +1140,6 @@ Table used to specify how a sound is played: -- its end in `-start_time` seconds. -- It is unspecified what happens if `loop` is false and `start_time` is -- smaller than minus the sound's length. - -- Available since feature `sound_params_start_time`. loop = false, @@ -1112,21 +1153,6 @@ Table used to specify how a sound is played: -- Attach the sound to an object. -- Can't be used together with `pos`. - -- For backward compatibility, sounds continue playing at the last location - -- of the object if an object is removed (for example if an entity dies). - -- It is not recommended to rely on this. - -- For death sounds, prefer playing a positional sound instead. - - -- If you want to stop a sound when an entity dies or is deactivated, - -- store the handle and call `minetest.sound_stop` in `on_die` / `on_deactivate`. - - -- Ephemeral sounds are entirely unaffected by the object being removed - -- or leaving the active object range. - - -- Non-ephemeral sounds stop playing on clients if objects leave - -- the active object range; they should start playing again if objects - --- come back into range (but due to a known bug, they don't yet). - to_player = name, -- Only play for this player. -- Can't be used together with `exclude_player`. @@ -1499,7 +1525,7 @@ Look for examples in `games/devtest` or `games/minetest_game`. * For supported model formats see Irrlicht engine documentation. * `plantlike_rooted` * Enables underwater `plantlike` without air bubbles around the nodes. - * Consists of a base cube at the co-ordinates of the node plus a + * Consists of a base cube at the coordinates of the node plus a `plantlike` extension above * If `paramtype2="leveled", the `plantlike` extension has a height of `param2 / 16` nodes, otherwise it's the height of 1 node @@ -1755,6 +1781,13 @@ Displays a horizontal bar made up of half-images with an optional background. * `item`: Position of item that is selected. * `direction`: Direction the list will be displayed in * `offset`: offset in pixels from position. +* `alignment`: The alignment of the inventory. Aligned at the top left corner if not specified. + +### `hotbar` + +* `direction`: Direction the list will be displayed in +* `offset`: offset in pixels from position. +* `alignment`: The alignment of the inventory. ### `waypoint` @@ -1813,6 +1846,11 @@ Displays a minimap on the HUD. * `size`: Size of the minimap to display. Minimap should be a square to avoid distortion. + * Negative values represent percentages of the screen. If either `x` or `y` + is specified as a percentage, the resulting pixel size will be used for + both `x` and `y`. Example: On a 1920x1080 screen, `{x = 0, y = -25}` will + result in a 270x270 minimap. + * Negative values are supported starting with protocol version 45. * `alignment`: The alignment of the minimap. * `offset`: offset in pixels from position. @@ -2352,9 +2390,12 @@ for this group, and unable to dig the rating `1`, which is the toughest. Unless there is a matching group that enables digging otherwise. If the result digging time is 0, a delay of 0.15 seconds is added between -digging nodes; If the player releases LMB after digging, this delay is set to 0, +digging nodes. If the player releases LMB after digging, this delay is set to 0, i.e. players can more quickly click the nodes away instead of holding LMB. +This extra delay is not applied in case of a digging time between 0 and 0.15, +so a digging time of 0.01 is actually faster than a digging time of 0. + ### Damage groups List of damage for groups of entities. See [Entity damage mechanism]. @@ -2633,6 +2674,9 @@ background elements are drawn before all other elements. **WARNING**: do _not_ use an element name starting with `key_`; those names are 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 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 @@ -2869,14 +2913,14 @@ Elements * Requires formspec version >= 6. * See `background9[]` documentation for more information. -### `model[,;,;;;;;;;;]` +### `model[,;,;;;;;;;;]` * Show a mesh model. * `name`: Element name that can be used for styling * `mesh`: The mesh model to use. * `textures`: The mesh textures to use according to the mesh materials. Texture names must be separated by commas. -* `rotation {X,Y}` (Optional): Initial rotation of the camera. +* `rotation` (Optional): Initial rotation of the camera, format `x,y`. The axes are euler angles in degrees. * `continuous` (Optional): Whether the rotation is continuous. Default `false`. * `mouse control` (Optional): Whether the model can be controlled with the mouse. Default `true`. @@ -3070,7 +3114,7 @@ Elements ### `textlist[,;,;;,,...,]` * Scrollable item list showing arbitrary text elements -* `name` fieldname sent to server on doubleclick value is current selected +* `name` fieldname sent to server on double-click value is current selected element. * `listelements` can be prepended by #color in hexadecimal format RRGGBB (only). @@ -3079,7 +3123,7 @@ Elements ### `textlist[,;,;;,,...,;;]` * Scrollable itemlist showing arbitrary text elements -* `name` fieldname sent to server on doubleclick value is current selected +* `name` fieldname sent to server on double-click value is current selected element. * `listelements` can be prepended by #RRGGBB (only) in hexadecimal format * if you want a listelement to start with "#" write "##" @@ -3216,7 +3260,7 @@ Elements * Show scrollable table using options defined by the previous `tableoptions[]` * Displays cells as defined by the previous `tablecolumns[]` -* `name`: fieldname sent to server on row select or doubleclick +* `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` @@ -3245,7 +3289,7 @@ Elements * Types: `text`, `image`, `color`, `indent`, `tree` * `text`: show cell contents as text * `image`: cell contents are an image index, use column options to define - images. + images. images are scaled down to fit the row height if necessary. * `color`: cell contents are a ColorString and define color of following cell. * `indent`: cell contents are a number and define indentation of following @@ -3266,7 +3310,7 @@ Elements * `0=` sets image for image index 0 * `1=` sets image for image index 1 * `2=` sets image for image index 2 - * and so on; defined indices need not be contiguous empty or + * and so on; defined indices need not be contiguous. empty or non-numeric cells are treated as `0`. * `color` column options: * `span=`: number of following columns to affect @@ -3667,6 +3711,9 @@ Player Inventory lists * Is not created automatically, use `InvRef:set_size` * Is only used to enhance the empty hand's tool capabilities +Custom lists can be added and deleted with `InvRef:set_size(name, size)` like +any other inventory. + ItemStack transaction order --------------------------- @@ -3825,6 +3872,8 @@ vectors are written like this: `(x, y, z)`: `vector.new(v)` does the same as `vector.copy(v)` * `vector.zero()`: * Returns a new vector `(0, 0, 0)`. +* `vector.random_direction()`: + * Returns a new vector of length 1, pointing into a direction chosen uniformly at random. * `vector.copy(v)`: * Returns a copy of the vector `v`. * `vector.from_string(s[, init])`: @@ -3850,15 +3899,23 @@ vectors are written like this: `(x, y, z)`: * If `v` has zero length, returns `(0, 0, 0)`. * `vector.floor(v)`: * Returns a vector, each dimension rounded down. +* `vector.ceil(v)`: + * Returns a vector, each dimension rounded up. * `vector.round(v)`: * Returns a vector, each dimension rounded to nearest integer. * At a multiple of 0.5, rounds away from zero. -* `vector.apply(v, func)`: +* `vector.sign(v, tolerance)`: + * Returns a vector where `math.sign` was called for each component. + * See [Helper functions] for details. +* `vector.abs(v)`: + * Returns a vector with absolute values for each component. +* `vector.apply(v, func, ...)`: * Returns a vector where the function `func` has been applied to each component. + * `...` are optional arguments passed to `func`. * `vector.combine(v, w, func)`: - * Returns a vector where the function `func` has combined both components of `v` and `w` - for each component + * Returns a vector where the function `func` has combined both components of `v` and `w` + for each component * `vector.equals(v1, v2)`: * Returns a boolean, `true` if the vectors are identical. * `vector.sort(v1, v2)`: @@ -3876,10 +3933,14 @@ vectors are written like this: `(x, y, z)`: by a `vector.*` function. * Returns `false` for anything else, including tables like `{x=3,y=1,z=4}`. * `vector.in_area(pos, min, max)`: - * Returns a boolean value indicating if `pos` is inside area formed by `min` and `max`. - * `min` and `max` are inclusive. - * If `min` is bigger than `max` on some axis, function always returns false. - * You can use `vector.sort` if you have two vectors and don't know which are the minimum and the maximum. + * Returns a boolean value indicating if `pos` is inside area formed by `min` and `max`. + * `min` and `max` are inclusive. + * If `min` is bigger than `max` on some axis, function always returns false. + * You can use `vector.sort` if you have two vectors and don't know which are the minimum and the maximum. +* `vector.random_in_area(min, max)`: + * Returns a random integer position in area formed by `min` and `max` + * `min` and `max` are inclusive. + * You can use `vector.sort` if you have two vectors and don't know which are the minimum and the maximum. For the following functions `x` can be either a vector or a number: @@ -3902,6 +3963,7 @@ Operators --------- Operators can be used if all of the involved vectors have metatables: + * `v1 == v2`: * Returns whether `v1` and `v2` are identical. * `-v`: @@ -4007,8 +4069,9 @@ Helper functions * X1, Y1, ... Z2 are coordinates * `relative_to`: Optional. If set to a position, each coordinate can use the tilde notation for relative positions - * Tilde notation: "~": Relative coordinate - "~": Relative coordinate plus + * Tilde notation + * `"~"`: Relative coordinate + * `"~"`: Relative coordinate plus `` * Example: `minetest.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 @@ -4026,6 +4089,10 @@ Helper functions the value `val` in the table `list`. Non-numerical indices are ignored. If `val` could not be found, `-1` is returned. `list` must not have negative indices. +* `table.keyof(table, val)`: returns the key containing + the value `val` in the table `table`. If multiple keys contain `val`, + it is unspecified which key will be returned. + If `val` could not be found, `nil` is returned. * `table.insert_all(table, other_table)`: * Appends all values in `other_table` to `table` - uses `#table + 1` to find new indices. @@ -4079,9 +4146,9 @@ Translations Texts can be translated client-side with the help of `minetest.translate` and translation files. -Consider using the script `util/mod_translation_updater.py` in the Minetest -repository to generate and update translation files automatically from the Lua -sources. See `util/README_mod_translation_updater.md` for an explanation. +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 -------------------- @@ -4245,7 +4312,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 co-ordinates in nodes. +Usually in Minetest 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. @@ -4346,6 +4413,8 @@ the previous octave. This may need to be tuned when altering `lacunarity`; when doing so consider that a common medium value is 1 / lacunarity. +Instead of `persistence`, the key `persist` may be used to the same effect. + ### `lacunarity` Each additional octave has a 'wavelength' that is the 'wavelength' of the @@ -4506,7 +4575,7 @@ computationally expensive than any other ore. Creates a single undulating ore stratum that is continuous across mapchunk borders and horizontally spans the world. -The 2D perlin noise described by `noise_params` defines the Y co-ordinate of +The 2D perlin noise described by `noise_params` defines the Y coordinate of the stratum midpoint. The 2D perlin noise described by `np_stratum_thickness` defines the stratum's vertical thickness (in units of nodes). Due to being continuous across mapchunk borders the stratum's vertical thickness is @@ -5071,12 +5140,12 @@ Callbacks: used for updating the entity state. * `on_deactivate(self, removal)` * Called when the object is about to get removed or unloaded. - * `removal`: boolean indicating whether the object is about to get removed. - 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. + * `removal`: boolean indicating whether the object is about to get removed. + 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. * `on_step(self, dtime, moveresult)` * Called on every server tick, after movement and collision processing. * `dtime`: elapsed time since last call @@ -5101,12 +5170,15 @@ Callbacks: to the object (not necessarily an actual rightclick) * `clicker`: an `ObjectRef` (may or may not be a player) * `on_attach_child(self, child)` - * `child`: an `ObjectRef` of the child that attaches + * Called after another object is attached to this object. + * `child`: an `ObjectRef` of the child * `on_detach_child(self, child)` - * `child`: an `ObjectRef` of the child that detaches + * Called after another object has detached from this object. + * `child`: an `ObjectRef` of the child * `on_detach(self, parent)` - * `parent`: an `ObjectRef` (can be `nil`) from where it got detached - * This happens before the parent object is removed from the world + * Called after detaching from another object. + * `parent`: an `ObjectRef` from where it got detached + * Note: this is also called before removal from the world. * `get_staticdata(self)` * Should return a string that will be passed to `on_activate` when the object is instantiated the next time. @@ -5439,15 +5511,19 @@ Utilities dynamic_add_media_filepath = true, -- L-system decoration type (5.9.0) lsystem_decoration_type = true, - -- Overrideable pointing range using the itemstack meta key `"range"` (5.9.0) + -- 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) 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` + -- Allow removing definition fields in `minetest.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, + -- Bulk LBM support (5.10.0) + bulk_lbms = true, } ``` @@ -5506,8 +5582,8 @@ Utilities }, -- Estimated maximum formspec size before Minetest will start shrinking the - -- formspec to fit. For a fullscreen formspec, use a size 10-20% larger than - -- this and `padding[-0.01,-0.01]`. + -- formspec to fit. For a fullscreen formspec, use this formspec size and + -- `padding[0,0]`. `bgcolor[;true]` is also recommended. max_formspec_size = { x = 20, y = 11.25 @@ -5581,6 +5657,13 @@ Utilities * `minetest.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 + 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 + (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 image and return it in string form. * `width`: Width of the image @@ -5714,12 +5797,15 @@ Global callback registration functions Call these functions only at load time! * `minetest.register_globalstep(function(dtime))` - * Called every server step, usually interval of 0.1s + * Called every server step, usually interval of 0.1s. + * `dtime` is the time since last execution in seconds. * `minetest.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())` * Called before server shutdown + * Players that were kicked by the shutdown procedure are still fully accessible + in `minetest.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. @@ -5738,7 +5824,7 @@ Call these functions only at load time! * `minetest.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 noticable latency. + the main thread and introduces noticeable latency. Consider [Mapgen environment] for an alternative. * `minetest.register_on_newplayer(function(ObjectRef))` * Called when a new player enters the world for the first time @@ -5783,6 +5869,7 @@ Call these functions only at load time! * `minetest.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))` * Called when player is to be respawned * Called _before_ repositioning of player occurs @@ -6059,6 +6146,8 @@ Environment access * `minetest.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)` @@ -6123,12 +6212,24 @@ Environment access * Items can be added also to unloaded and non-generated blocks. * `minetest.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(pos, radius)` - * returns a list of ObjectRefs. +* `minetest.get_objects_inside_radius(center, radius)` + * returns a list of ObjectRefs * `radius`: using a Euclidean metric -* `minetest.get_objects_in_area(pos1, pos2)` - * returns a list of ObjectRefs. - * `pos1` and `pos2` are the min and max positions of the area to search. + * **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 + transparently takes care of this possibility. +* `minetest.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)` + * 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)` + * returns an iterator of valid objects * `minetest.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 @@ -6390,11 +6491,11 @@ Environment access * spread these updates to neighbors and can cause a cascade of nodes to fall. * `minetest.get_spawn_level(x, z)` - * Returns a player spawn y co-ordinate for the provided (x, z) - co-ordinates, or `nil` for an unsuitable spawn point. + * 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 `water_level` and `water_level + 16`, and in mgv7 well away from rivers, - so `nil` will be returned for many (x, z) co-ordinates. + so `nil` will be returned for many (x, z) coordinates. * The spawn level returned is for a player spawn in unmodified terrain. * The spawn level is intentionally above terrain level to cope with full-node biome 'dust' nodes. @@ -6440,7 +6541,8 @@ 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. + * `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)` * `playername`: name of player to close formspec @@ -6472,6 +6574,13 @@ Formspec * `"INV"`: something failed * `"CHG"`: has been changed * `"VAL"`: not changed +* `minetest.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. Item handling ------------- @@ -6704,7 +6813,7 @@ This allows you easy interoperability for delegating work to jobs. * 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()`. -* `minetest.register_async_metatable(name, mt)`: +* `minetest.register_portable_metatable(name, mt)`: * Register a metatable that should be preserved when data is transferred between the main thread and the async environment. * `name` is a string that identifies the metatable. It is recommended to @@ -6720,6 +6829,7 @@ This allows you easy interoperability for delegating work to jobs. ### List of APIs available in an async environment Classes: + * `AreaStore` * `ItemStack` * `PerlinNoise` @@ -6733,17 +6843,20 @@ Classes: * `Settings` Class instances that can be transferred between environments: + * `ItemStack` * `PerlinNoise` * `PerlinNoiseMap` * `VoxelManip` Functions: + * Standalone helpers such as logging, filesystem, encoding, hashing or compression APIs -* `minetest.register_async_metatable` (see above) +* `minetest.register_portable_metatable` (see above) Variables: + * `minetest.settings` * `minetest.registered_items`, `registered_nodes`, `registered_tools`, `registered_craftitems` and `registered_aliases` @@ -6795,6 +6908,7 @@ does not have a global step or timer. ### List of APIs available in the mapgen env Classes: + * `AreaStore` * `ItemStack` * `PerlinNoise` @@ -6808,6 +6922,7 @@ Classes: * `Settings` Functions: + * Standalone helpers such as logging, filesystem, encoding, hashing or compression APIs * `minetest.get_biome_id`, `get_biome_name`, `get_heat`, `get_humidity`, @@ -6818,6 +6933,7 @@ Functions: * these only operate on the current chunk (if inside a callback) Variables: + * `minetest.settings` * `minetest.registered_items`, `registered_nodes`, `registered_tools`, `registered_craftitems` and `registered_aliases` @@ -6867,7 +6983,7 @@ Server all players (optional) * `ephemeral`: boolean that marks the media as ephemeral, it will not be cached on the client (optional, default false) - * Exactly one of the paramters marked [*] must be specified. + * Exactly one of the parameters marked [*] must be specified. * `callback`: function with arguments `name`, which is a player name * Pushes the specified media file to client(s). (details below) The file must be a supported image, sound or model format. @@ -6902,10 +7018,11 @@ Bans * Returns boolean indicating success * `minetest.unban_player_or_ip(ip_or_name)`: remove ban record matching IP address or name -* `minetest.kick_player(name, [reason])`: disconnect a player with an optional +* `minetest.kick_player(name[, reason[, reconnect]])`: disconnect a player with an optional reason. * Returns boolean indicating success (false if player nonexistent) -* `minetest.disconnect_player(name, [reason])`: disconnect a player with an + * If `reconnect` is true, allow the user to reconnect. +* `minetest.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) @@ -7067,9 +7184,11 @@ Misc. * `minetest.is_player(obj)`: boolean, whether `obj` is a player * `minetest.player_exists(name)`: boolean, whether player exists (regardless of online status) +* `minetest.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)` * Replaces definition of a builtin hud element - * `name`: `"breath"`, `"health"` or `"minimap"` + * `name`: `"breath"`, `"health"`, `"minimap"` or `"hotbar"` * `hud_definition`: definition to replace builtin definition * `minetest.parse_relative_number(arg, relative_to)`: returns number or nil * Helper function for chat commands. @@ -7475,6 +7594,8 @@ An `InvRef` is a reference to an inventory. * `is_empty(listname)`: return `true` if list is empty * `get_size(listname)`: get size of a list * `set_size(listname, size)`: set size of a list + * If `listname` is not known, a new list will be created + * Setting `size` to 0 deletes a list * returns `false` on error (e.g. invalid `listname` or `size`) * `get_width(listname)`: get width of a list * `set_width(listname, width)`: set width of list; currently used for crafting @@ -7549,9 +7670,12 @@ an itemstring, a table or `nil`. * `set_wear(wear)`: returns boolean indicating whether item was cleared * `wear`: number, unsigned 16 bit integer * `get_meta()`: returns ItemStackMetaRef. See section for more details -* `get_metadata()`: (DEPRECATED) Returns metadata (a string attached to an item - stack). -* `set_metadata(metadata)`: (DEPRECATED) Returns true. +* `get_metadata()`: **Deprecated.** Returns metadata (a string attached to an item stack). + * If you need to access this to maintain backwards compatibility, + use `stack:get_meta():get_string("")` instead. +* `set_metadata(metadata)`: **Deprecated.** Returns true. + * If you need to set this to maintain backwards compatibility, + use `stack:get_meta():set_string("", metadata)` instead. * `get_description()`: returns the description shown in inventory list tooltips. * The engine uses this when showing item descriptions in tooltips. * Fields for finding the description, in order: @@ -7695,7 +7819,7 @@ metadata_table = { -- metadata fields (key/value store) fields = { infotext = "Container", - anoter_key = "Another Value", + another_key = "Another Value", }, -- inventory data (for nodes) @@ -7790,13 +7914,18 @@ When you receive an `ObjectRef` as a callback argument or from another API function, it is possible to store the reference somewhere and keep it around. It will keep functioning until the object is unloaded or removed. -However, doing this is **NOT** recommended as there is (intentionally) no method -to test if a previously acquired `ObjectRef` is still valid. -Instead, `ObjectRefs` should be "let go" of as soon as control is returned from -Lua back to the engine. +However, doing this is **NOT** recommended - `ObjectRefs` should be "let go" +of as soon as control is returned from Lua back to the engine. + Doing so is much less error-prone and you will never need to wonder if the object you are working with still exists. +If this is not feasible, you can test whether an `ObjectRef` is still valid +via `object:is_valid()`. + +Getters may be called for invalid objects and will return nothing then. +All other methods should not be called on invalid objects. + ### Attachments It is possible to attach objects to other objects (`set_attach` method). @@ -7815,6 +7944,8 @@ child will follow movement and rotation of that bone. ### Methods +* `is_valid()`: returns whether the object is valid. + * See "Advice on handling `ObjectRefs`" above. * `get_pos()`: returns position as vector `{x=num, y=num, z=num}` * `set_pos(pos)`: * Sets the position of the object. @@ -7917,13 +8048,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. - * **Note:** Rotation is in degrees, not radians. - * **Deprecated:** Use `set_bone_override` instead. + * Shorthand for `set_bone_override(bone, {position = position, rotation = rotation:apply(math.rad)})` using absolute values. + * **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 - * Shorthand for `get_bone_override(bone).position.vec, get_bone_override(bone).rotation.vec:apply(math.deg)`. - * **Note:** Returned rotation is in degrees, not radians. - * **Deprecated:** Use `get_bone_override` instead. + * Shorthand for `get_bone_override(bone).position.vec, get_bone_override(bone).rotation.vec:apply(math.deg)`. + * **Note:** Returned rotation is in degrees, not radians. + * **Deprecated:** Use `get_bone_override` instead. * `set_bone_override(bone, override)` * `bone`: string * `override`: `{ position = property, rotation = property, scale = property }` or `nil` @@ -7940,10 +8071,33 @@ child will follow movement and rotation of that bone. * 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). * `get_bone_override(bone)`: returns `override` in the above format - * **Note:** Unlike `get_bone_position`, the returned rotation is in radians, not degrees. + * **Note:** Unlike `get_bone_position`, the returned rotation is in radians, not degrees. * `get_bone_overrides()`: returns all bone overrides as table `{[bonename] = override, ...}` * `set_properties(object property table)` * `get_properties()`: returns a table of all object properties +* `set_observers(observers)`: sets observers (players this object is sent to) + * If `observers` is `nil`, the object's observers are "unmanaged": + The object is sent to all players as governed by server settings. This is the default. + * `observers` is a "set" of player names: `{name1 = true, name2 = true, ...}` + * A set is a table where the keys are the elements of the set + (in this case, *valid* player names) and the values are all `true`. + * Attachments: The *effective observers* of an object are made up of + all players who can observe the object *and* are also effective observers + of its parent object (if there is one). + * Players are automatically added to their own observer sets. + Players **must** effectively observe themselves. + * Object activation and deactivation are unaffected by observability. + * Attached sounds do not work correctly and thus should not be used + on objects with managed observers yet. +* `get_observers()`: + * throws an error if the object is invalid + * returns `nil` if the observers are unmanaged + * returns a table with all observer names as keys and `true` values (a "set") otherwise +* `get_effective_observers()`: + * Like `get_observers()`, but returns the "effective" observers, taking into account attachments + * Time complexity: O(nm) + * n: number of observers of the involved entities + * m: number of ancestors along the attachment chain * `is_player()`: returns true for players, false otherwise * `get_nametag_attributes()` * returns a table with the attributes of the nametag of an object @@ -7988,7 +8142,7 @@ child will follow movement and rotation of that bone. * `rot` is a vector (radians). X is pitch (elevation), Y is yaw (heading) and Z is roll (bank). * Does not reset rotation incurred through `automatic_rotate`. - Remove & readd your objects to force a certain rotation. + Remove & re-add your objects to force a certain rotation. * `get_rotation()`: returns the rotation, a vector (radians) * `set_yaw(yaw)`: sets the yaw in radians (heading). * `get_yaw()`: returns number in radians @@ -8014,8 +8168,8 @@ child will follow movement and rotation of that bone. * Fifth column: subject viewed from above * Sixth column: subject viewed from below * `get_luaentity()`: - * Returns the object's associated luaentity table, if there is one - * Otherwise returns `nil` (e.g. for players) + * Returns the object's associated luaentity table, if there is one + * Otherwise returns `nil` (e.g. for players) * `get_entity_name()`: * **Deprecated**: Will be removed in a future version, use `:get_luaentity().name` instead. @@ -8189,7 +8343,9 @@ child will follow movement and rotation of that bone. * See `hud_set_flags` for a list of flags that can be toggled. * `hud_set_hotbar_itemcount(count)`: sets number of items in builtin hotbar * `count`: number of items, must be between `1` and `32` + * If `count` exceeds the `"main"` list size, the list size will be used instead. * `hud_get_hotbar_itemcount()`: returns number of visible items + * This value is also clamped by the `"main"` list size. * `hud_set_hotbar_image(texturename)` * sets background image for hotbar * `hud_get_hotbar_image()`: returns texturename @@ -8368,15 +8524,19 @@ child will follow movement and rotation of that bone. ColorSpec (alpha ignored, default `#000000`) * `height`: cloud height, i.e. y of cloud base (default per conf, usually `120`) - * `thickness`: cloud thickness in nodes (default `16`) + * `thickness`: cloud thickness in nodes (default `16`). + if set to zero the clouds are rendered flat. * `speed`: 2D cloud speed + direction in nodes per second (default `{x=0, z=-2}`). + * `shadow`: shadow color, applied to the base of the cloud + (default `#cccccc`). * `get_clouds()`: returns a table with the current cloud parameters as in `set_clouds`. * `override_day_night_ratio(ratio or nil)` * `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`, * `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. @@ -8403,11 +8563,23 @@ child will follow movement and rotation of that bone. * Passing no arguments resets lighting to its default values. * `light_definition` is a table with the following optional fields: * `saturation` sets the saturation (vividness; default: `1.0`). - * values > 1 increase the saturation - * values in [0,1] decrease the saturation + * It is applied according to the function `result = b*(1-s) + c*s`, where: + * `c` is the original color + * `b` is the greyscale version of the color with the same luma + * `s` is the saturation set here + * The resulting color always has the same luma (perceived brightness) as the original. + * This means that: + * values > 1 oversaturate + * values < 1 down to 0 desaturate, 0 being entirely greyscale + * values < 0 cause an effect similar to inversion, + but keeping original luma and being symmetrical in terms of saturation + (eg. -1 and 1 is the same saturation and luma, but different hues) * `shadows` is a table that controls ambient shadows * `intensity` sets the intensity of the shadows from 0 (no shadows, default) to 1 (blackness) * This value has no effect on clients who have the "Dynamic Shadows" shader disabled. + * `tint` tints the shadows with the provided color, with RGB values ranging from 0 to 255. + (default `{r=0, g=0, b=0}`) + * This value has no effect on clients who have the "Dynamic Shadows" shader disabled. * `exposure` is a table that controls automatic exposure. The basic exposure factor equation is `e = 2^exposure_correction / clamp(luminance, 2^luminance_min, 2^luminance_max)` * `luminance_min` set the lower luminance boundary to use in the calculation (default: `-3.0`) @@ -8424,6 +8596,14 @@ child will follow movement and rotation of that bone. * Result is a table with the same fields as `light_definition` in `set_lighting`. * `respawn()`: Respawns the player using the same mechanism as the death screen, including calling `on_respawnplayer` callbacks. +* `get_flags()`: returns a table of player flags (the following boolean fields): + * `breathing`: Whether breathing (regaining air) is enabled, default `true`. + * `drowning`: Whether drowning (losing air) is enabled, default `true`. + * `node_damage`: Whether the player takes damage from nodes, default `true`. +* `set_flags(flags)`: sets flags + * takes a table in the same format as returned by `get_flags` + * absent fields are left unchanged + `PcgRandom` ----------- @@ -8599,7 +8779,7 @@ In multiplayer mode, the error may be arbitrarily large. Interface for the operating system's crypto-secure PRNG. -It can be created via `SecureRandom()`. The constructor returns nil if a +It can be created via `SecureRandom()`. The constructor throws an error if a secure random device cannot be found on the system. ### Methods @@ -8871,6 +9051,9 @@ Entity definition ----------------- Used by `minetest.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. ```lua { @@ -8927,7 +9110,7 @@ Used by `minetest.register_abm`. -- Operation interval in seconds chance = 50, - -- Chance of triggering `action` per-node per-interval is 1.0 / chance + -- Probability of triggering `action` per-node per-interval is 1.0 / chance (integers only) min_y = -32768, max_y = 32767, @@ -8958,7 +9141,12 @@ Used by `minetest.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 -gets activated (not loaded!) +gets activated (not loaded!). + +Note: LBMs operate on a "snapshot" of node positions taken once before they are triggered. +That means if an LBM callback adds a node, it won't be taken into account. +However the engine guarantees that when the callback is called that all given position(s) +contain a matching node. ```lua { @@ -8982,7 +9170,13 @@ gets activated (not loaded!) action = function(pos, node, dtime_s) end, -- Function triggered for each qualifying node. -- `dtime_s` is the in-game time (in seconds) elapsed since the block - -- was last active + -- was last active. + + 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) + -- `dtime_s`: as above } ``` @@ -9189,9 +9383,17 @@ Used by `minetest.register_node`, `minetest.register_craftitem`, and -- If specified as a table, the field to be used is selected according to -- the current `pointed_thing`. -- There are three possible TouchInteractionMode values: - -- * "user" (meaning depends on client-side settings) -- * "long_dig_short_place" (long tap = dig, short tap = place) -- * "short_dig_long_place" (short tap = dig, long tap = place) + -- * "user": + -- * For `pointed_object`: Equivalent to "short_dig_long_place" if the + -- client-side setting "touch_punch_gesture" is "short_tap" (the + -- default value) and the item is able to punch (i.e. has no on_use + -- callback defined). + -- Equivalent to "long_dig_short_place" otherwise. + -- * For `pointed_node` and `pointed_nothing`: + -- Equivalent to "long_dig_short_place". + -- * The behavior of "user" may change in the future. -- The default value is "user". sound = { @@ -10317,7 +10519,7 @@ See [Decoration types]. Used by `minetest.register_decoration`. y_min = -31000, y_max = 31000, -- Lower and upper limits for decoration (inclusive). - -- These parameters refer to the Y co-ordinate of the 'place_on' node. + -- These parameters refer to the Y coordinate of the 'place_on' node. spawn_by = "default:water", -- Node (or list of nodes) that the decoration only spawns next to. @@ -10567,8 +10769,9 @@ Used by `ObjectRef:hud_add`. Returned by `ObjectRef:hud_get`. ```lua { type = "image", - -- Type of element, can be "image", "text", "statbar", "inventory", - -- "waypoint", "image_waypoint", "compass" or "minimap" + -- Type of element, can be "compass", "hotbar" (46 ¹), "image", "image_waypoint", + -- "inventory", "minimap" (44 ¹), "statbar", "text" or "waypoint" + -- ¹: minimal protocol version for client-side support -- If undefined "text" will be used. hud_elem_type = "image", @@ -10647,7 +10850,10 @@ Used by `minetest.add_particle`. texture = "image.png", -- The texture of the particle -- v5.6.0 and later: also supports the table format described in the - -- following section + -- following section, but due to a bug this did not take effect + -- (beyond the texture name). + -- v5.9.0 and later: fixes the bug. + -- Note: "texture.animation" is ignored here. Use "animation" below instead. playername = "singleplayer", -- Optional, if specified spawns particle only on the player's client @@ -10672,6 +10878,11 @@ Used by `minetest.add_particle`. drag = {x=0, y=0, z=0}, -- v5.6.0 and later: Optional drag value, consult the following section + -- Note: Only a vector is supported here. Alternative forms like a single + -- number are not supported. + + jitter = {min = ..., max = ..., bias = 0}, + -- v5.6.0 and later: Optional jitter range, consult the following section bounce = {min = ..., max = ..., bias = 0}, -- v5.6.0 and later: Optional bounce range, consult the following section @@ -10697,7 +10908,10 @@ will be ignored. ```lua { - -- Common fields (same name and meaning in both new and legacy syntax) + ------------------- + -- Common fields -- + ------------------- + -- (same name and meaning in both new and legacy syntax) amount = 1, -- Number of particles spawned over the time period `time`. @@ -10729,6 +10943,8 @@ will be ignored. texture = "image.png", -- The texture of the particle + -- v5.6.0 and later: also supports the table format described in the + -- following section. playername = "singleplayer", -- Optional, if specified spawns particles only on the player's client @@ -10754,7 +10970,9 @@ will be ignored. -- particle texture is picked. -- Otherwise, the default behavior is used. (currently: any random tile) - -- Legacy definition fields + ------------------- + -- Legacy fields -- + ------------------- minpos = {x=0, y=0, z=0}, maxpos = {x=0, y=0, z=0}, @@ -10882,32 +11100,46 @@ All of the properties that can be defined in this way are listed in the next section, along with the datatypes they accept. #### List of particlespawner properties -All of the properties in this list can be animated with `*_tween` tables -unless otherwise specified. For example, `jitter` can be tweened by setting -a `jitter_tween` table instead of (or in addition to) a `jitter` table/value. + +All properties in this list of type "vec3 range", "float range" or "vec3" can +be animated with `*_tween` tables. For example, `jitter` can be tweened by +setting a `jitter_tween` table instead of (or in addition to) a `jitter` +table/value. + In this section, a float range is a table defined as so: { min = A, max = B } A and B are your supplemented values. For a vec3 range this means they are vectors. Types used are defined in the previous section. * vec3 range `pos`: the position at which particles can appear + * vec3 range `vel`: the initial velocity of the particle + * vec3 range `acc`: the direction and speed with which the particle accelerates + +* float range `size`: scales the visual size of the particle texture. + if `node` is set, this can be set to 0 to spawn randomly-sized particles + (just like actual node dig particles). + * vec3 range `jitter`: offsets the velocity of each particle by a random amount within the specified range each frame. used to create Brownian motion. + * vec3 range `drag`: the amount by which absolute particle velocity along each axis is decreased per second. a value of 1.0 means that the particle will be slowed to a stop over the space of a second; a value of -1.0 means that the particle speed will be doubled every second. to avoid interfering with gravity provided by `acc`, a drag vector like `vector.new(1,0,1)` can be used instead of a uniform value. + * float range `bounce`: how bouncy the particles are when `collisiondetection` is turned on. values less than or equal to `0` turn off particle bounce; `1` makes the particles bounce without losing any velocity, and `2` makes them double their velocity with every bounce. `bounce` is not bounded but values much larger than `1.0` probably aren't very useful. + * float range `exptime`: the number of seconds after which the particle disappears. + * table `attract`: sets the birth orientation of particles relative to various shapes defined in world coordinate space. this is an alternative means of setting the velocity which allows particles to emerge from or enter into @@ -10915,8 +11147,10 @@ Types used are defined in the previous section. velocity values within a range. the velocity calculated by this method will be **added** to that specified by `vel` if `vel` is also set, so in most cases **`vel` should be set to 0**. `attract` has the fields: + * string `kind`: selects the kind of shape towards which the particles will be oriented. it must have one of the following values: + * `"none"`: no attractor is set and the `attractor` table is ignored * `"point"`: the particles are attracted to a specific point in space. use this also if you want a sphere-like effect, in combination with @@ -10927,25 +11161,32 @@ Types used are defined in the previous section. * `"plane"`: the particles are attracted to an (infinite) plane on whose surface `origin` designates a point in world coordinate space. use this for e.g. particles entering or emerging from a portal. + * float range `strength`: the speed with which particles will move towards `attractor`. If negative, the particles will instead move away from that point. + * vec3 `origin`: the origin point of the shape towards which particles will initially be oriented. functions as an offset if `origin_attached` is also set. + * vec3 `direction`: sets the direction in which the attractor shape faces. for lines, this sets the angle of the line; e.g. a vector of (0,1,0) will create a vertical line that passes through `origin`. for planes, `direction` is the surface normal of an infinite plane on whose surface `origin` is a point. functions as an offset if `direction_attached` is also set. - * entity `origin_attached`: allows the origin to be specified as an offset - from the position of an entity rather than a coordinate in world space. - * entity `direction_attached`: allows the direction to be specified as an offset + + * ObjectRef `origin_attached`: allows the origin to be specified as an offset from the position of an entity rather than a coordinate in world space. + + * ObjectRef `direction_attached`: allows the direction to be specified as an + offset from the position of an entity rather than a coordinate in world space. + * bool `die_on_contact`: if true, the particles' lifetimes are adjusted so that they will die as they cross the attractor threshold. this behavior is the default but is undesirable for some kinds of animations; set it to false to allow particles to live out their natural lives. + * vec3 range `radius`: if set, particles will be arranged in a sphere around `pos`. A constant can be used to create a spherical shell of particles, a vector to create an ovoid shell, and a range to create a volume; e.g. @@ -10957,9 +11198,10 @@ Types used are defined in the previous section. ### Textures -In versions before v5.6.0, particlespawner textures could only be specified as a single -texture string. After v5.6.0, textures can now be specified as a table as well. This -table contains options that allow simple animations to be applied to the texture. +In versions before v5.6.0, particle/particlespawner textures could only be +specified as a single texture string. After v5.6.0, textures can now be +specified as a table as well. This table contains options that allow simple +animations to be applied to the texture. ```lua texture = { @@ -11014,18 +11256,18 @@ texture = { } ``` -Instead of setting a single texture definition, it is also possible to set a -`texpool` property. A `texpool` consists of a list of possible particle textures. -Every time a particle is spawned, the engine will pick a texture at random from -the `texpool` and assign it as that particle's texture. You can also specify a -`texture` in addition to a `texpool`; the `texture` value will be ignored on newer -clients but will be sent to older (pre-v5.6.0) clients that do not implement -texpools. +For particlespawners, it is also possible to set the `texpool` property instead +of a single texture definition. A `texpool` consists of a list of possible +particle textures. Every time a particle is spawned, the engine will pick a +texture at random from the `texpool` and assign it as that particle's texture. +You can also specify a `texture` in addition to a `texpool`; the `texture` +value will be ignored on newer clients but will be sent to older (pre-v5.6.0) +clients that do not implement texpools. ```lua texpool = { "mymod_particle_texture.png"; - { name = "mymod_spark.png", fade = "out" }, + { name = "mymod_spark.png", alpha_tween = {1, 0} }, { name = "mymod_dust.png", alpha = 0.3, @@ -11180,6 +11422,16 @@ Functions: bit.tobit, bit.tohex, bit.bnot, bit.band, bit.bor, bit.bxor, bit.lshi See http://bitop.luajit.org/ for advanced information. +Tracy Profiler +-------------- + +Minetest 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. + +Note: This is a development feature and not covered by compatibility promises. + Error Handling -------------- diff --git a/doc/menu_lua_api.md b/doc/menu_lua_api.md index 19540a607..be63af904 100644 --- a/doc/menu_lua_api.md +++ b/doc/menu_lua_api.md @@ -1,4 +1,4 @@ -Minetest Lua Mainmenu API Reference 5.9.0 +Minetest Lua Mainmenu API Reference 5.10.0 ========================================= Introduction @@ -8,6 +8,15 @@ The main menu is defined as a formspec by Lua in `builtin/mainmenu/` Description of formspec language to show your menu is in `lua_api.md` +Images and 3D models +------ + +Directory delimiters change according to the OS (e.g. on Unix-like systems +is `/`, on Windows is `\`). When putting an image or a 3D model inside a formspec, +be sure to sanitize it first with `core.formspec_escape(img)`; otherwise, +any resource located in a subpath won't be displayed on OSs using `\` as delimiter. + + Callbacks --------- @@ -62,6 +71,12 @@ Functions Filesystem ---------- +To access specific subpaths, use `DIR_DELIM` as a directory delimiter instead +of manually putting one, as different OSs use different delimiters. E.g. +```lua +"my" .. DIR_DELIM .. "custom" .. DIR_DELIM .. "path" -- and not my/custom/path +``` + * `core.get_builtin_path()` * returns path to builtin root * `core.create_dir(absolute_path)` (possible in async calls) @@ -238,8 +253,8 @@ GUI }, -- Estimated maximum formspec size before Minetest will start shrinking the - -- formspec to fit. For a fullscreen formspec, use a size 10-20% larger than - -- this and `padding[-0.01,-0.01]`. + -- formspec to fit. For a fullscreen formspec, use this formspec size and + -- `padding[0,0]`. `bgcolor[;true]` is also recommended. max_formspec_size = { x = 20, y = 11.25 @@ -282,7 +297,7 @@ Package - content which is downloadable from the content db, may or may not be i ```lua { mods = "/home/user/.minetest/mods", - share = "/usr/share/minetest/mods", + share = "/usr/share/minetest/mods", -- only provided when RUN_IN_PLACE=0 -- Custom dirs can be specified by the MINETEST_MOD_DIR env variable ["/path/to/custom/dir"] = "/path/to/custom/dir", diff --git a/doc/texture_packs.md b/doc/texture_packs.md index b6f9306d9..890f5a950 100644 --- a/doc/texture_packs.md +++ b/doc/texture_packs.md @@ -151,8 +151,7 @@ are placeholders intended to be overwritten by the game. * `rangeview_btn.png` * `debug_btn.png` -* `gear_icon.png` -* `rare_controls.png` +* `overflow_btn.png` * `exit_btn.png` Texture Overrides diff --git a/doc/world_format.md b/doc/world_format.md index b5a2a3cfa..93920f391 100644 --- a/doc/world_format.md +++ b/doc/world_format.md @@ -394,7 +394,7 @@ Timestamp and node ID mappings were introduced in map format version 29. * `u8` `name_id_mapping_version` * Should be zero for map format version 29. - + * `u16` `num_name_id_mappings` * foreach `num_name_id_mappings`: * `u16` `id` diff --git a/games/devtest/mods/basetools/init.lua b/games/devtest/mods/basetools/init.lua index aa91d5e92..17e53c1fe 100644 --- a/games/devtest/mods/basetools/init.lua +++ b/games/devtest/mods/basetools/init.lua @@ -71,7 +71,7 @@ end -- Mese Pickaxe: special tool that digs "everything" instantly minetest.register_tool("basetools:pick_mese", { description = "Mese Pickaxe".."\n".. - "Digs diggable nodes instantly", + "Digs diggable nodes instantly.", inventory_image = "basetools_mesepick.png", tool_capabilities = { full_punch_interval = 1.0, @@ -88,6 +88,28 @@ 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", { + description = "Mese Pickaxe (no delay)".."\n".. + "Digs diggable nodes instantly.".."\n".. + "There is no delay between digging each node,\n".. + 'but the "repeat_dig_time" setting is still respected.', + inventory_image = "basetools_mesepick_no_delay.png", + tool_capabilities = { + full_punch_interval = 1.0, + max_drop_level=3, + groupcaps={ + cracky={times={[1]=0.001, [2]=0.001, [3]=0.001}, maxlevel=255}, + crumbly={times={[1]=0.001, [2]=0.001, [3]=0.001}, maxlevel=255}, + snappy={times={[1]=0.001, [2]=0.001, [3]=0.001}, maxlevel=255}, + choppy={times={[1]=0.001, [2]=0.001, [3]=0.001}, maxlevel=255}, + dig_immediate={times={[1]=0.001, [2]=0.001, [3]=0.001}, maxlevel=255}, + }, + damage_groups = {fleshy=100}, + }, +}) + + -- -- Pickaxes: Dig cracky -- diff --git a/games/devtest/mods/basetools/textures/basetools_mesepick_no_delay.png b/games/devtest/mods/basetools/textures/basetools_mesepick_no_delay.png new file mode 100644 index 000000000..5a7db7e0a Binary files /dev/null and b/games/devtest/mods/basetools/textures/basetools_mesepick_no_delay.png differ diff --git a/games/devtest/mods/benchmarks/init.lua b/games/devtest/mods/benchmarks/init.lua index 1f5001c69..e3a4409a5 100644 --- a/games/devtest/mods/benchmarks/init.lua +++ b/games/devtest/mods/benchmarks/init.lua @@ -154,3 +154,36 @@ minetest.register_chatcommand("bench_bulk_get_node", { return true, msg end, }) + +minetest.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) + 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 ...") + + -- warm up because first execution otherwise becomes + -- significantly slower + minetest.bulk_swap_node(pos_list, {name = "mapgen_stone"}) + + minetest.chat_send_player(name, "Warming up finished, now benchmarking ...") + + local start_time = minetest.get_us_time() + for i=1,#pos_list do + minetest.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", + ((middle_time - start_time)) / 1000, + ((end_time - middle_time)) / 1000 + ) + return true, msg + end, +}) diff --git a/games/devtest/mods/gltf/LICENSE.md b/games/devtest/mods/gltf/LICENSE.md new file mode 100644 index 000000000..b0ae5fef5 --- /dev/null +++ b/games/devtest/mods/gltf/LICENSE.md @@ -0,0 +1,14 @@ +glTF test model (and corresponding texture) licenses: + +* Spider (`gltf_spider.gltf`, `gltf_spider.png`): + * By [archfan7411](https://github.com/archfan7411) + * Licensed under CC0, public domain "wherever public domain carries fewer rights or legal protections" +* Frog (`gltf_frog.gltf`, `gltf_frog.png`): + * By [Susybaka1234](https://sketchfab.com/3d-models/african-clawed-frog-v2-c81152c93948480c931c280d18957358) + * Licensed under CC-BY 4.0 +* Snow Man (`gltf_snow_man.gltf`, `gltf_snow_man.png`): + * By [jordan4ibanez](https://github.com/jordan4ibanez) + * Licensed under CC0 +* Minimal triangle, triangle without indices (`gltf_minimal_triangle.gltf`, `gltf_triangle_without_indices.gltf`) + * From [the glTF sample model collection](https://github.com/KhronosGroup/glTF-Sample-Models) + * Licensed under CC0 / public domain diff --git a/games/devtest/mods/gltf/init.lua b/games/devtest/mods/gltf/init.lua new file mode 100644 index 000000000..b5c2032bc --- /dev/null +++ b/games/devtest/mods/gltf/init.lua @@ -0,0 +1,51 @@ +local function register_entity(name, textures, backface_culling) + minetest.register_entity("gltf:" .. name, { + initial_properties = { + visual = "mesh", + mesh = "gltf_" .. name .. ".gltf", + textures = textures, + backface_culling = backface_culling, + }, + }) +end + +-- These do not have texture coordinates; they simple render as black surfaces. +register_entity("minimal_triangle", {}, false) +register_entity("triangle_with_vertex_stride", {}, false) +register_entity("triangle_without_indices", {}, false) +do + local cube_textures = {"gltf_cube.png"} + register_entity("blender_cube", cube_textures) + register_entity("blender_cube_scaled", cube_textures) + register_entity("blender_cube_matrix_transform", cube_textures) +end +register_entity("snow_man", {"gltf_snow_man.png"}) +register_entity("spider", {"gltf_spider.png"}) +-- Note: Model has an animation, but we can use it as a static test nevertheless +-- The claws rendering incorrectly from one side is expected behavior: +-- They use an unsupported double-sided material. +register_entity("frog", {"gltf_frog.png"}, false) + +minetest.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", { + params = " [textures]", + description = "Show a model (defaults to gltf models, for example '/show_model frog').", + func = function(name, param) + local model, textures = param:match"^(.-)%s+(.+)$" + if not model then + model = "gltf_" .. param .. ".gltf" + textures = "gltf_" .. param .. ".png" + end + minetest.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]", + }) + end, +}) diff --git a/games/devtest/mods/gltf/invalid/empty.gltf b/games/devtest/mods/gltf/invalid/empty.gltf new file mode 100644 index 000000000..e69de29bb diff --git a/games/devtest/mods/gltf/invalid/invalid_bufferview_bounds.gltf b/games/devtest/mods/gltf/invalid/invalid_bufferview_bounds.gltf new file mode 100644 index 000000000..2182861c6 --- /dev/null +++ b/games/devtest/mods/gltf/invalid/invalid_bufferview_bounds.gltf @@ -0,0 +1 @@ +{"scene":0,"scenes":[{"nodes":[0]}],"nodes":[{"mesh":0}],"meshes":[{"primitives":[{"attributes":{"POSITION":0}}]}],"buffers":[{"uri":"data:application/octet-stream;base64,AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAA","byteLength":36}],"bufferViews":[{"buffer":0,"byteOffset":1,"byteLength":36,"target":34962}],"accessors":[{"bufferView":0,"byteOffset":0,"componentType":5126,"count":3,"type":"VEC3","max":[1,1,0],"min":[0,0,0]}],"asset":{"version":"2.0"}} diff --git a/games/devtest/mods/gltf/invalid/json_missing_brace.gltf b/games/devtest/mods/gltf/invalid/json_missing_brace.gltf new file mode 100644 index 000000000..98232c64f --- /dev/null +++ b/games/devtest/mods/gltf/invalid/json_missing_brace.gltf @@ -0,0 +1 @@ +{ diff --git a/games/devtest/mods/gltf/mod.conf b/games/devtest/mods/gltf/mod.conf new file mode 100644 index 000000000..3ec50d2ef --- /dev/null +++ b/games/devtest/mods/gltf/mod.conf @@ -0,0 +1,2 @@ +name = gltf +description = Hosts gltf test models, both for the C++ unit tests and for in-game viewing diff --git a/games/devtest/mods/gltf/models/gltf_blender_cube.gltf b/games/devtest/mods/gltf/models/gltf_blender_cube.gltf new file mode 100644 index 000000000..041b4a1fc --- /dev/null +++ b/games/devtest/mods/gltf/models/gltf_blender_cube.gltf @@ -0,0 +1 @@ +{"asset":{"generator":"Khronos glTF Blender I/O v1.7.33","version":"2.0"},"scene":0,"scenes":[{"name":"Scene","nodes":[0]}],"nodes":[{"mesh":0,"name":"Cube","scale":[10,10,10]}],"meshes":[{"name":"Cube.004","primitives":[{"attributes":{"POSITION":0,"NORMAL":1,"TEXCOORD_0":2},"indices":3}]}],"accessors":[{"bufferView":0,"componentType":5126,"count":24,"max":[1,1,1],"min":[-1,-1,-1],"type":"VEC3"},{"bufferView":1,"componentType":5126,"count":24,"type":"VEC3"},{"bufferView":2,"componentType":5126,"count":24,"type":"VEC2"},{"bufferView":3,"componentType":5123,"count":36,"type":"SCALAR"}],"bufferViews":[{"buffer":0,"byteLength":288,"byteOffset":0},{"buffer":0,"byteLength":288,"byteOffset":288},{"buffer":0,"byteLength":192,"byteOffset":576},{"buffer":0,"byteLength":72,"byteOffset":768}],"buffers":[{"byteLength":840,"uri":"data:application/octet-stream;base64,AACAvwAAgL8AAIA/AACAvwAAgL8AAIA/AACAvwAAgL8AAIA/AACAvwAAgD8AAIA/AACAvwAAgD8AAIA/AACAvwAAgD8AAIA/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgD8AAIC/AACAvwAAgD8AAIC/AACAvwAAgD8AAIC/AACAPwAAgL8AAIA/AACAPwAAgL8AAIA/AACAPwAAgL8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgL8AAIC/AACAPwAAgL8AAIC/AACAPwAAgL8AAIC/AACAPwAAgD8AAIC/AACAPwAAgD8AAIC/AACAPwAAgD8AAIC/AACAvwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AACAvwAAAAAAAACAAAAAAAAAAAAAAIA/AAAAAAAAgD8AAACAAACAvwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIC/AACAvwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAAAAAgD8AAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AACAPwAAAAAAAACAAAAAAAAAAAAAAIA/AAAAAAAAgD8AAACAAACAPwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIC/AACAPwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAAAAAgD8AAACAAACAPwAAAAAAAACAAADAPgAAgD8AAAA+AACAPgAAwD4AAAAAAAAgPwAAgD8AACA/AAAAAAAAYD8AAIA+AADAPgAAQD8AAAA+AAAAPwAAwD4AAEA/AAAgPwAAQD8AACA/AABAPwAAYD8AAAA/AADAPgAAgD4AAMA+AACAPgAAwD4AAIA+AAAgPwAAgD4AACA/AACAPgAAID8AAIA+AADAPgAAAD8AAMA+AAAAPwAAwD4AAAA/AAAgPwAAAD8AACA/AAAAPwAAID8AAAA/AAADAAkAAAAJAAYACAAKABUACAAVABMAFAAXABEAFAARAA4ADQAPAAQADQAEAAIABwASAAwABwAMAAEAFgALAAUAFgAFABAA"}]} diff --git a/games/devtest/mods/gltf/models/gltf_blender_cube_matrix_transform.gltf b/games/devtest/mods/gltf/models/gltf_blender_cube_matrix_transform.gltf new file mode 100644 index 000000000..50235ceae --- /dev/null +++ b/games/devtest/mods/gltf/models/gltf_blender_cube_matrix_transform.gltf @@ -0,0 +1 @@ +{"asset":{"generator":"Khronos glTF Blender I/O v1.7.33","version":"2.0"},"scene":0,"scenes":[{"name":"Scene","nodes":[0]}],"nodes":[{"mesh":0,"name":"Cube","matrix":[1,0,0,0,0,2,0,0,0,0,3,0,4,5,6,1]}],"meshes":[{"name":"Cube.004","primitives":[{"attributes":{"POSITION":0,"NORMAL":1,"TEXCOORD_0":2},"indices":3}]}],"accessors":[{"bufferView":0,"componentType":5126,"count":24,"max":[1,1,1],"min":[-1,-1,-1],"type":"VEC3"},{"bufferView":1,"componentType":5126,"count":24,"type":"VEC3"},{"bufferView":2,"componentType":5126,"count":24,"type":"VEC2"},{"bufferView":3,"componentType":5123,"count":36,"type":"SCALAR"}],"bufferViews":[{"buffer":0,"byteLength":288,"byteOffset":0},{"buffer":0,"byteLength":288,"byteOffset":288},{"buffer":0,"byteLength":192,"byteOffset":576},{"buffer":0,"byteLength":72,"byteOffset":768}],"buffers":[{"byteLength":840,"uri":"data:application/octet-stream;base64,AACAvwAAgL8AAIA/AACAvwAAgL8AAIA/AACAvwAAgL8AAIA/AACAvwAAgD8AAIA/AACAvwAAgD8AAIA/AACAvwAAgD8AAIA/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgD8AAIC/AACAvwAAgD8AAIC/AACAvwAAgD8AAIC/AACAPwAAgL8AAIA/AACAPwAAgL8AAIA/AACAPwAAgL8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgL8AAIC/AACAPwAAgL8AAIC/AACAPwAAgL8AAIC/AACAPwAAgD8AAIC/AACAPwAAgD8AAIC/AACAPwAAgD8AAIC/AACAvwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AACAvwAAAAAAAACAAAAAAAAAAAAAAIA/AAAAAAAAgD8AAACAAACAvwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIC/AACAvwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAAAAAgD8AAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AACAPwAAAAAAAACAAAAAAAAAAAAAAIA/AAAAAAAAgD8AAACAAACAPwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIC/AACAPwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAAAAAgD8AAACAAACAPwAAAAAAAACAAADAPgAAgD8AAAA+AACAPgAAwD4AAAAAAAAgPwAAgD8AACA/AAAAAAAAYD8AAIA+AADAPgAAQD8AAAA+AAAAPwAAwD4AAEA/AAAgPwAAQD8AACA/AABAPwAAYD8AAAA/AADAPgAAgD4AAMA+AACAPgAAwD4AAIA+AAAgPwAAgD4AACA/AACAPgAAID8AAIA+AADAPgAAAD8AAMA+AAAAPwAAwD4AAAA/AAAgPwAAAD8AACA/AAAAPwAAID8AAAA/AAADAAkAAAAJAAYACAAKABUACAAVABMAFAAXABEAFAARAA4ADQAPAAQADQAEAAIABwASAAwABwAMAAEAFgALAAUAFgAFABAA"}]} diff --git a/games/devtest/mods/gltf/models/gltf_blender_cube_scaled.gltf b/games/devtest/mods/gltf/models/gltf_blender_cube_scaled.gltf new file mode 100644 index 000000000..3b626b37e --- /dev/null +++ b/games/devtest/mods/gltf/models/gltf_blender_cube_scaled.gltf @@ -0,0 +1 @@ +{"asset":{"generator":"Khronos glTF Blender I/O v1.7.33","version":"2.0"},"scene":0,"scenes":[{"name":"Scene","nodes":[0]}],"nodes":[{"mesh":0,"name":"Cube","scale":[150,1,21.5]}],"meshes":[{"name":"Cube.004","primitives":[{"attributes":{"POSITION":0,"NORMAL":1,"TEXCOORD_0":2},"indices":3}]}],"accessors":[{"bufferView":0,"componentType":5126,"count":24,"max":[1,1,1],"min":[-1,-1,-1],"type":"VEC3"},{"bufferView":1,"componentType":5126,"count":24,"type":"VEC3"},{"bufferView":2,"componentType":5126,"count":24,"type":"VEC2"},{"bufferView":3,"componentType":5123,"count":36,"type":"SCALAR"}],"bufferViews":[{"buffer":0,"byteLength":288,"byteOffset":0},{"buffer":0,"byteLength":288,"byteOffset":288},{"buffer":0,"byteLength":192,"byteOffset":576},{"buffer":0,"byteLength":72,"byteOffset":768}],"buffers":[{"byteLength":840,"uri":"data:application/octet-stream;base64,AACAvwAAgL8AAIA/AACAvwAAgL8AAIA/AACAvwAAgL8AAIA/AACAvwAAgD8AAIA/AACAvwAAgD8AAIA/AACAvwAAgD8AAIA/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgD8AAIC/AACAvwAAgD8AAIC/AACAvwAAgD8AAIC/AACAPwAAgL8AAIA/AACAPwAAgL8AAIA/AACAPwAAgL8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgL8AAIC/AACAPwAAgL8AAIC/AACAPwAAgL8AAIC/AACAPwAAgD8AAIC/AACAPwAAgD8AAIC/AACAPwAAgD8AAIC/AACAvwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AACAvwAAAAAAAACAAAAAAAAAAAAAAIA/AAAAAAAAgD8AAACAAACAvwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIC/AACAvwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAAAAAgD8AAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AACAPwAAAAAAAACAAAAAAAAAAAAAAIA/AAAAAAAAgD8AAACAAACAPwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIC/AACAPwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAAAAAgD8AAACAAACAPwAAAAAAAACAAADAPgAAgD8AAAA+AACAPgAAwD4AAAAAAAAgPwAAgD8AACA/AAAAAAAAYD8AAIA+AADAPgAAQD8AAAA+AAAAPwAAwD4AAEA/AAAgPwAAQD8AACA/AABAPwAAYD8AAAA/AADAPgAAgD4AAMA+AACAPgAAwD4AAIA+AAAgPwAAgD4AACA/AACAPgAAID8AAIA+AADAPgAAAD8AAMA+AAAAPwAAwD4AAAA/AAAgPwAAAD8AACA/AAAAPwAAID8AAAA/AAADAAkAAAAJAAYACAAKABUACAAVABMAFAAXABEAFAARAA4ADQAPAAQADQAEAAIABwASAAwABwAMAAEAFgALAAUAFgAFABAA"}]} diff --git a/games/devtest/mods/gltf/models/gltf_frog.gltf b/games/devtest/mods/gltf/models/gltf_frog.gltf new file mode 100644 index 000000000..201604fd3 --- /dev/null +++ b/games/devtest/mods/gltf/models/gltf_frog.gltf @@ -0,0 +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"}}]}]} diff --git a/games/devtest/mods/gltf/models/gltf_minimal_triangle.gltf b/games/devtest/mods/gltf/models/gltf_minimal_triangle.gltf new file mode 100644 index 000000000..9a624f085 --- /dev/null +++ b/games/devtest/mods/gltf/models/gltf_minimal_triangle.gltf @@ -0,0 +1 @@ +{"scene":0,"scenes":[{"nodes":[0]}],"nodes":[{"mesh":0}],"meshes":[{"primitives":[{"attributes":{"POSITION":1},"indices":0}]}],"buffers":[{"uri":"data:application/octet-stream;base64,AAABAAIAAAAAAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAA=","byteLength":44}],"bufferViews":[{"buffer":0,"byteOffset":0,"byteLength":6,"target":34963},{"buffer":0,"byteOffset":8,"byteLength":36,"target":34962}],"accessors":[{"bufferView":0,"byteOffset":0,"componentType":5123,"count":3,"type":"SCALAR","max":[2],"min":[0]},{"bufferView":1,"byteOffset":0,"componentType":5126,"count":3,"type":"VEC3","max":[1,1,0],"min":[0,0,0]}],"asset":{"version":"2.0"}} diff --git a/games/devtest/mods/gltf/models/gltf_simple_sparse_accessor.gltf b/games/devtest/mods/gltf/models/gltf_simple_sparse_accessor.gltf new file mode 100644 index 000000000..979896825 --- /dev/null +++ b/games/devtest/mods/gltf/models/gltf_simple_sparse_accessor.gltf @@ -0,0 +1 @@ +{"scene":0,"scenes":[{"nodes":[0]}],"nodes":[{"mesh":0}],"meshes":[{"primitives":[{"attributes":{"POSITION":1},"indices":0}]}],"buffers":[{"uri":"data:application/gltf-buffer;base64,AAAIAAcAAAABAAgAAQAJAAgAAQACAAkAAgAKAAkAAgADAAoAAwALAAoAAwAEAAsABAAMAAsABAAFAAwABQANAAwABQAGAA0AAAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAQAAAAAAAAAAAAABAQAAAAAAAAAAAAACAQAAAAAAAAAAAAACgQAAAAAAAAAAAAADAQAAAAAAAAAAAAAAAAAAAgD8AAAAAAACAPwAAgD8AAAAAAAAAQAAAgD8AAAAAAABAQAAAgD8AAAAAAACAQAAAgD8AAAAAAACgQAAAgD8AAAAAAADAQAAAgD8AAAAACAAKAAwAAAAAAIA/AAAAQAAAAAAAAEBAAABAQAAAAAAAAKBAAACAQAAAAAA=","byteLength":284}],"bufferViews":[{"buffer":0,"byteOffset":0,"byteLength":72,"target":34963},{"buffer":0,"byteOffset":72,"byteLength":168},{"buffer":0,"byteOffset":240,"byteLength":6},{"buffer":0,"byteOffset":248,"byteLength":36}],"accessors":[{"bufferView":0,"byteOffset":0,"componentType":5123,"count":36,"type":"SCALAR","max":[13],"min":[0]},{"bufferView":1,"byteOffset":0,"componentType":5126,"count":14,"type":"VEC3","max":[6,4,0],"min":[0,0,0],"sparse":{"count":3,"indices":{"bufferView":2,"byteOffset":0,"componentType":5123},"values":{"bufferView":3,"byteOffset":0}}}],"asset":{"version":"2.0"}} diff --git a/games/devtest/mods/gltf/models/gltf_snow_man.gltf b/games/devtest/mods/gltf/models/gltf_snow_man.gltf new file mode 100644 index 000000000..cd8c347d2 --- /dev/null +++ b/games/devtest/mods/gltf/models/gltf_snow_man.gltf @@ -0,0 +1 @@ +{"asset":{"version":"2.0","generator":"Blockbench 4.6.0 glTF exporter"},"scenes":[{"nodes":[3],"name":"blockbench_export"}],"scene":0,"nodes":[{"name":"cube","mesh":0},{"name":"cube","mesh":1},{"name":"cube","mesh":2},{"children":[0,1,2]}],"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}],"buffers":[{"byteLength":2520,"uri":"data:application/octet-stream;base64,AABAQAAAwEEAAEBAAABAQAAAkEEAAEBAAABAQAAAwEEAAEDAAABAQAAAkEEAAEDAAABAwAAAwEEAAEBAAABAwAAAwEEAAEDAAABAwAAAkEEAAEBAAABAwAAAkEEAAEDAAABAQAAAwEEAAEBAAABAQAAAwEEAAEDAAABAwAAAwEEAAEBAAABAwAAAwEEAAEDAAABAQAAAkEEAAEBAAABAwAAAkEEAAEBAAABAQAAAkEEAAEDAAABAwAAAkEEAAEDAAABAQAAAwEEAAEBAAABAwAAAwEEAAEBAAABAQAAAkEEAAEBAAABAwAAAkEEAAEBAAABAQAAAwEEAAEDAAABAQAAAkEEAAEDAAABAwAAAwEEAAEDAAABAwAAAkEEAAEDAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/VVUVP6uqSj9VVRU/q6oqP1VVNT+rqko/VVU1P6uqKj8AAAA/VVXVPgAAwD5VVdU+AAAAP1VVlT4AAMA+VVWVPgAAAD4AAIA+AAAAPgAAwD4AAAAAAACAPgAAAAAAAMA+AABAPwAAgD8AACA/AACAPwAAQD8AAGA/AAAgPwAAYD9VVVU/AABgP1VVNT8AAGA/VVVVPwAAQD9VVTU/AABAP1VVNT8AAEA/VVU1PwAAID9VVVU/AABAP1VVVT8AACA/AgAAAAEAAgABAAMABgAEAAUABgAFAAcACgAIAAkACgAJAAsADgAMAA0ADgANAA8AEgAQABEAEgARABMAFgAUABUAFgAVABcAAACgQAAAIEEAAKBAAACgQAAAAAAAAKBAAACgQAAAIEEAAKDAAACgQAAAAAAAAKDAAACgwAAAIEEAAKBAAACgwAAAIEEAAKDAAACgwAAAAAAAAKBAAACgwAAAAAAAAKDAAACgQAAAIEEAAKBAAACgQAAAIEEAAKDAAACgwAAAIEEAAKBAAACgwAAAIEEAAKDAAACgQAAAAAAAAKBAAACgwAAAAAAAAKBAAACgQAAAAAAAAKDAAACgwAAAAAAAAKDAAACgQAAAIEEAAKBAAACgwAAAIEEAAKBAAACgQAAAAAAAAKBAAACgwAAAAAAAAKBAAACgQAAAIEEAAKDAAACgQAAAAAAAAKDAAACgwAAAIEEAAKDAAACgwAAAAAAAAKDAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAgD8AAAAAq6pKP1VVVT4AAIA/VVVVPquqSj9VVVU+q6pKPwAAAACrqko/VVVVPlVVFT8AAAAAVVUVP1VV1T6rqko/VVXVPgAAgD9VVVU+q6pKP1VVVT4AAIA/VVXVPquqSj9VVVU+q6pKP1VV1T5VVRU/VVVVPlVVFT9VVVU+VVUVPwAAAABVVRU/VVVVPgAAwD4AAAAAAADAPlVV1T4AAIA/VVXVPquqSj8AACA/AACAPwAAID+rqko/AgAAAAEAAgABAAMABgAEAAUABgAFAAcACgAIAAkACgAJAAsADgAMAA0ADgANAA8AEgAQABEAEgARABMAFgAUABUAFgAVABcAAACAQAAAkEEAAIBAAACAQAAAIEEAAIBAAACAQAAAkEEAAIDAAACAQAAAIEEAAIDAAACAwAAAkEEAAIBAAACAwAAAkEEAAIDAAACAwAAAIEEAAIBAAACAwAAAIEEAAIDAAACAQAAAkEEAAIBAAACAQAAAkEEAAIDAAACAwAAAkEEAAIBAAACAwAAAkEEAAIDAAACAQAAAIEEAAIBAAACAwAAAIEEAAIBAAACAQAAAIEEAAIDAAACAwAAAIEEAAIDAAACAQAAAkEEAAIBAAACAwAAAkEEAAIBAAACAQAAAIEEAAIBAAACAwAAAIEEAAIBAAACAQAAAkEEAAIDAAACAQAAAIEEAAIDAAACAwAAAkEEAAIDAAACAwAAAIEEAAIDAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/VVVVPlVVFT9VVVU+VVXVPgAAwD5VVRU/AADAPlVV1T5VVRU/q6pKP1VV1T6rqko/VVUVPwAAID9VVdU+AAAgP6uqCj9VVdU+q6oKP1VVFT8AAMA+VVXVPgAAwD5VVRU/VVU1PwAAID+rqgo/AAAgP1VVNT+rquo+q6oKP6uq6j5VVTU/q6rqPquqCj+rquo+VVU1P1VVlT6rqgo/VVWVPlVVVT5VVdU+VVVVPgAAgD4AAMA+VVXVPgAAwD4AAIA+AgAAAAEAAgABAAMABgAEAAUABgAFAAcACgAIAAkACgAJAAsADgAMAA0ADgANAA8AEgAQABEAEgARABMAFgAUABUAFgAVABcA"}],"accessors":[{"bufferView":0,"componentType":5126,"count":24,"max":[3,24,3],"min":[-3,18,-3],"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.8333333134651184,1],"min":[0,0.25],"type":"VEC2"},{"bufferView":3,"componentType":5123,"count":36,"max":[23],"min":[0],"type":"SCALAR"},{"bufferView":4,"componentType":5126,"count":24,"max":[5,10,5],"min":[-5,0,-5],"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.625,1],"min":[0,0.375],"type":"VEC2"},{"bufferView":7,"componentType":5123,"count":36,"max":[23],"min":[0],"type":"SCALAR"},{"bufferView":8,"componentType":5126,"count":24,"max":[4,18,4],"min":[-4,10,-4],"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.7083333134651184,0.7916666865348816],"min":[0.2083333283662796,0.25],"type":"VEC2"},{"bufferView":11,"componentType":5123,"count":36,"max":[23],"min":[0],"type":"SCALAR"}],"materials":[{"pbrMetallicRoughness":{"metallicFactor":0,"roughnessFactor":1,"baseColorTexture":{"index":0,"texCoord":0}},"alphaMode":"MASK","alphaCutoff":0.05,"doubleSided":true}],"textures":[{}],"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}]}]} diff --git a/games/devtest/mods/gltf/models/gltf_spider.gltf b/games/devtest/mods/gltf/models/gltf_spider.gltf new file mode 100644 index 000000000..6698b6bb4 --- /dev/null +++ b/games/devtest/mods/gltf/models/gltf_spider.gltf @@ -0,0 +1 @@ +{"asset":{"generator":"Khronos glTF Blender I/O v1.7.33","version":"2.0"},"scene":0,"scenes":[{"name":"Scene","nodes":[0]}],"nodes":[{"mesh":0,"name":"Spider"}],"materials":[{"doubleSided":true,"name":"Material.001","pbrMetallicRoughness":{}}],"meshes":[{"name":"Cube","primitives":[{"attributes":{"POSITION":0,"NORMAL":1,"TEXCOORD_0":2},"indices":3,"material":0}]}],"accessors":[{"bufferView":0,"componentType":5126,"count":1000,"max":[2.742279291152954,1.4045029878616333,2.0192716121673584],"min":[-2.742279291152954,-0.6434623599052429,-3.534085512161255],"type":"VEC3"},{"bufferView":1,"componentType":5126,"count":1000,"type":"VEC3"},{"bufferView":2,"componentType":5126,"count":1000,"type":"VEC2"},{"bufferView":3,"componentType":5123,"count":1500,"type":"SCALAR"}],"bufferViews":[{"buffer":0,"byteLength":12000,"byteOffset":0},{"buffer":0,"byteLength":12000,"byteOffset":12000},{"buffer":0,"byteLength":8000,"byteOffset":24000},{"buffer":0,"byteLength":3000,"byteOffset":32000}],"buffers":[{"byteLength":35000,"uri":"data:application/octet-stream;base64,dfkpP+R6/z6QwIW/dfkpP+R6/z6QwIW/dfkpP+R6/z6QwIW/dfkpP+R6/76QwIW/dfkpP+R6/76QwIW/dfkpP+R6/76QwIW/dfkpP+R6/z6QwIU/dfkpP+R6/z6QwIU/dfkpP+R6/z6QwIU/dfkpP+R6/76QwIU/dfkpP+R6/76QwIU/dfkpP+R6/76QwIU/dfkpv+R6/z6QwIW/dfkpv+R6/z6QwIW/dfkpv+R6/z6QwIW/dfkpv+R6/76QwIW/dfkpv+R6/76QwIW/dfkpv+R6/76QwIW/dfkpv+R6/z6QwIU/dfkpv+R6/z6QwIU/dfkpv+R6/z6QwIU/dfkpv+R6/76QwIU/dfkpv+R6/76QwIU/dfkpv+R6/76QwIU/UoRdPwFMoz8qkU3AUoRdPwFMoz8qkU3AUoRdPwFMoz8qkU3AUoRdP+x7gDx1LmLAUoRdP+x7gDx1LmLAUoRdP+x7gDx1LmLAbCVCP/IRET8e1xe/bCVCP/IRET8e1xe/bCVCP/IRET8e1xe/bCVCP5SmCb8LHGC/bCVCP5SmCb8LHGC/bCVCP5SmCb8LHGC/UoRdvwFMoz8qkU3AUoRdvwFMoz8qkU3AUoRdvwFMoz8qkU3AUoRdv+x7gDx1LmLAUoRdv+x7gDx1LmLAUoRdv+x7gDx1LmLAbCVCv/IRET8e1xe/bCVCv/IRET8e1xe/bCVCv/IRET8e1xe/bCVCv5SmCb8LHGC/bCVCv5SmCb8LHGC/bCVCv5SmCb8LHGC/XiXDvkD14r7OlcU/XiXDvkD14r7OlcU/XiXDvkD14r7OlcU/XiXDvhwyo71XteY/XiXDvhwyo71XteY/XiXDvhwyo71XteY/XiXDvhwyoz1zEE8/XiXDvhwyoz1zEE8/XiXDvhwyoz1zEE8/XiXDvkD14j7Dp4g/XiXDvkD14j7Dp4g/XiXDvkD14j7Dp4g/XCXDPkD14r7OlcU/XCXDPkD14r7OlcU/XCXDPkD14r7OlcU/XCXDPhwyo71XteY/XCXDPhwyo71XteY/XCXDPhwyo71XteY/XCXDPhwyoz1zEE8/XCXDPhwyoz1zEE8/XCXDPhwyoz1zEE8/XCXDPkD14j7Dp4g/XCXDPkD14j7Dp4g/XCXDPkD14j7Dp4g/bi6Dv7og4L5LpA/Abi6Dv7og4L5LpA/Abi6Dv7og4L5LpA/Abi6Dv7og4L5LpA/Abi6DP27/hj/Sc+6/bi6DP27/hj/Sc+6/bi6DP27/hj/Sc+6/bi6DP27/hj/Sc+6/bi6Dv27/hj/Uc+6/bi6Dv27/hj/Uc+6/bi6Dv27/hj/Uc+6/bi6Dv27/hj/Uc+6/bi6DP7wg4L5LpA/Abi6DP7wg4L5LpA/Abi6DP7wg4L5LpA/Abi6DP7wg4L5LpA/AKXA/vg7sv76Nef0/KXA/vg7sv76Nef0/KXA/vg7sv76Nef0/KXA/voixaL6/OwFAKXA/voixaL6/OwFAKXA/voixaL6/OwFAMSWTvg+jir5UDss/MSWTvg+jir5UDss/MSWTvg+jir5UDss/MSWTvg4//L1HDNA/MSWTvg4//L1HDNA/MSWTvg4//L1HDNA/A5UevXQku77E8/g/A5UevXQku77E8/g/A5UevXQku77E8/g/A5UevVIiX7648f0/A5UevVIiX7648f0/A5UevVIiX7648f0/eH8OvnTbhb6MiMY/eH8OvnTbhb6MiMY/eH8OvnTbhb6MiMY/eH8Ovqcg6b1/hss/eH8Ovqcg6b1/hss/eH8Ovqcg6b1/hss/B61WvpRDlr0p2+w/B61WvpRDlr0p2+w/B61WvpRDlr0p2+w/B61WvoT9Ej6Ek98/B61WvoT9Ej6Ek98/B61WvoT9Ej6Ek98/B61Wvov9Er55E9o/B61Wvov9Er55E9o/B61Wvov9Er55E9o/B61WvodDlj3Vy8w/B61WvodDlj3Vy8w/B61WvodDlj3Vy8w/f4pAvZRDlr0p2+w/f4pAvZRDlr0p2+w/f4pAvZRDlr0p2+w/f4pAvYT9Ej6Ek98/f4pAvYT9Ej6Ek98/f4pAvYT9Ej6Ek98/f4pAvYv9Er55E9o/f4pAvYv9Er55E9o/f4pAvYv9Er55E9o/f4pAvYdDlj3Vy8w/f4pAvYdDlj3Vy8w/f4pAvYdDlj3Vy8w/8CCuvr/lGL1K++Q/8CCuvr/lGL1K++Q/8CCuvr/lGL1K++Q/8CCuvvWQlT2tOd4/8CCuvvWQlT2tOd4/8CCuvvWQlT2tOd4/8CCuvgGRlb1Rbds/8CCuvgGRlb1Rbds/8CCuvgGRlb1Rbds/8CCuvqTlGD20q9Q/8CCuvqTlGD20q9Q/8CCuvqTlGD20q9Q/jMODvr/lGL1K++Q/jMODvr/lGL1K++Q/jMODvr/lGL1K++Q/jMODvvWQlT2tOd4/jMODvvWQlT2tOd4/jMODvvWQlT2tOd4/jMODvgGRlb1Rbds/jMODvgGRlb1Rbds/jMODvgGRlb1Rbds/jMODvqTlGD20q9Q/jMODvqTlGD20q9Q/jMODvqTlGD20q9Q/KXA/Pg7sv76Nef0/KXA/Pg7sv76Nef0/KXA/Pg7sv76Nef0/KXA/PoixaL6/OwFAKXA/PoixaL6/OwFAKXA/PoixaL6/OwFAMSWTPg+jir5UDss/MSWTPg+jir5UDss/MSWTPg+jir5UDss/MSWTPg4//L1HDNA/MSWTPg4//L1HDNA/MSWTPg4//L1HDNA/A5UePXQku77E8/g/A5UePXQku77E8/g/A5UePXQku77E8/g/A5UePVIiX7648f0/A5UePVIiX7648f0/A5UePVIiX7648f0/eH8OPnTbhb6MiMY/eH8OPnTbhb6MiMY/eH8OPnTbhb6MiMY/eH8OPqcg6b1/hss/eH8OPqcg6b1/hss/eH8OPqcg6b1/hss/B61WPpRDlr0p2+w/B61WPpRDlr0p2+w/B61WPpRDlr0p2+w/B61WPoT9Ej6Ek98/B61WPoT9Ej6Ek98/B61WPoT9Ej6Ek98/B61WPov9Er55E9o/B61WPov9Er55E9o/B61WPov9Er55E9o/B61WPodDlj3Vy8w/B61WPodDlj3Vy8w/B61WPodDlj3Vy8w/f4pAPZRDlr0p2+w/f4pAPZRDlr0p2+w/f4pAPZRDlr0p2+w/f4pAPYT9Ej6Ek98/f4pAPYT9Ej6Ek98/f4pAPYT9Ej6Ek98/f4pAPYv9Er55E9o/f4pAPYv9Er55E9o/f4pAPYv9Er55E9o/f4pAPYdDlj3Vy8w/f4pAPYdDlj3Vy8w/f4pAPYdDlj3Vy8w/8CCuPr/lGL1K++Q/8CCuPr/lGL1K++Q/8CCuPr/lGL1K++Q/8CCuPvWQlT2tOd4/8CCuPvWQlT2tOd4/8CCuPvWQlT2tOd4/8CCuPgGRlb1Rbds/8CCuPgGRlb1Rbds/8CCuPgGRlb1Rbds/8CCuPqTlGD20q9Q/8CCuPqTlGD20q9Q/8CCuPqTlGD20q9Q/jMODPr/lGL1K++Q/jMODPr/lGL1K++Q/jMODPr/lGL1K++Q/jMODPvWQlT2tOd4/jMODPvWQlT2tOd4/jMODPvWQlT2tOd4/jMODPgGRlb1Rbds/jMODPgGRlb1Rbds/jMODPgGRlb1Rbds/jMODPqTlGD20q9Q/jMODPqTlGD20q9Q/jMODPqTlGD20q9Q/irGqvwXbij8FXqI/irGqvwXbij8FXqI/irGqvwXbij8FXqI/ORyOv3F4mT/sD5c/ORyOv3F4mT/sD5c/ORyOv3F4mT/sD5c/veG1vwXbij9MFIY/veG1vwXbij9MFIY/veG1vwXbij9MFIY/bEyZv3F4mT9jjHU/bEyZv3F4mT9jjHU/bEyZv3F4mT9jjHU/6Wwlv2yF8L6qI38/6Wwlv2yF8L6qI38/6Wwlv2yF8L6qI38/ioTYvrQPtr54h2g/ioTYvrQPtr54h2g/ioTYvrQPtr54h2g/T807v2yF8L43kEY/T807v2yF8L43kEY/T807v2yF8L43kEY/raICv7QPtr4D9C8/raICv7QPtr4D9C8/raICv7QPtr4D9C8/z+YCwI6slj+TWsQ/z+YCwI6slj+TWsQ/z+YCwI6slj+TWsQ/A/f/v8HGsz9xC8I/A/f/v8HGsz9xC8I/A/f/v8HGsz9xC8I/jMsHwI6slj/Wm6s/jMsHwI6slj/Wm6s/jMsHwI6slj/Wm6s/PuAEwMHGsz+yTKk/PuAEwMHGsz+yTKk/PuAEwMHGsz+yTKk/R9OVv6Pudz+mEJg/R9OVv6Pudz+mEJg/R9OVv6Pudz+mEJg/rfyPv4YRmT+EwZU/rfyPv4YRmT+EwZU/rfyPv4YRmT+EwZU/wZyfv6Pudz/So34/wZyfv6Pudz/So34/wZyfv6Pudz/So34/J8aZv4QRmT+MBXo/J8aZv4QRmT+MBXo/J8aZv4QRmT+MBXo/iI4EwFQ4sz8QDKk/iI4EwFQ4sz8QDKk/iI4EwFQ4sz8QDKk/dS/zv7wLoT/OX6A/dS/zv7wLoT/OX6A/dS/zv7wLoT/OX6A/mVP/v1I4sz/PysE/mVP/v1I4sz/PysE/mVP/v1I4sz/PysE/+2Xpv7wLoT+MHrk/+2Xpv7wLoT+MHrk/+2Xpv7wLoT+MHrk/6tMnwDbsIz+L8sQ/6tMnwDbsIz+L8sQ/6tMnwDbsIz+L8sQ/HN0cwAkm/z5JRrw/HN0cwAkm/z5JRrw/HN0cwAkm/z5JRrw/Le8iwDbsIz9Jsd0/Le8iwDbsIz9Jsd0/Le8iwDbsIz9Jsd0/YPgXwAkm/z4HBdU/YPgXwAkm/z4HBdU/YPgXwAkm/z4HBdU/GQohwGb1Jz9Bcto/GQohwGb1Jz9Bcto/GQohwGb1Jz9Bcto/pBcVwGyGMT/v/tA/pBcVwGyGMT/v/tA/pBcVwGyGMT/v/tA/2FUlwGb1Jz8jucQ/2FUlwGb1Jz8jucQ/2FUlwGb1Jz8jucQ/ZGMZwGyGMT/QRbs/ZGMZwGyGMT/QRbs/ZGMZwGyGMT/QRbs/W6QSwPO5JL+7Ds8/W6QSwPO5JL+7Ds8/W6QSwPO5JL+7Ds8/5LEGwOkoG79nm8U/5LEGwOkoG79nm8U/5LEGwOkoG79nm8U/G/AWwPO5JL+dVbk/G/AWwPO5JL+dVbk/G/AWwPO5JL+dVbk/pP0KwOkoG79I4q8/pP0KwOkoG79I4q8/pP0KwOkoG79I4q8/PSK3vwXbij/MHzo/PSK3vwXbij/MHzo/PSK3vwXbij/MHzo/E3+Yv3F4mT8FKTU/E3+Yv3F4mT8FKTU/E3+Yv3F4mT8FKTU/EJe5vwXbij8N9/o+EJe5vwXbij8N9/o+EJe5vwXbij8N9/o+5/Oav3F4mT96CfE+5/Oav3F4mT96CfE+5/Oav3F4mT96CfE+Jakxv2yF8L5F2Co/Jakxv2yF8L5F2Co/Jakxv2yF8L5F2Co/osXovrQPtr5/4SU/osXovrQPtr5/4SU/osXovrQPtr5/4SU/y5I2v2yF8L76Z9w+y5I2v2yF8L76Z9w+y5I2v2yF8L76Z9w+7pjyvrQPtr5petI+7pjyvrQPtr5petI+7pjyvrQPtr5petI+zBgMwI6slj8dB0Y/zBgMwI6slj8dB0Y/zBgMwI6slj8dB0Y/yfcIwMHGsz+QA0U/yfcIwMHGsz+QA0U/yfcIwMHGsz+QA0U/1CsNwI6slj8r+xA/1CsNwI6slj8r+xA/1CsNwI6slj8r+xA/0woKwMHGsz+Z9w8/0woKwMHGsz+Z9w8/0woKwMHGsz+Z9w8/MSugv6Pudz+2lDI/MSugv6Pudz+2lDI/MSugv6Pudz+2lDI/L+mZv4YRmT8nkTE/L+mZv4YRmT8nkTE/L+mZv4YRmT8nkTE/Q1Giv6Pudz+EEfs+Q1Giv6Pudz+EEfs+Q1Giv6Pudz+EEfs+QA+cv4QRmT9kCvk+QA+cv4QRmT9kCvk+QA+cv4QRmT9kCvk+PbMJwFQ4sz862w8/PbMJwFQ4sz862w8/PbMJwFQ4sz862w8/deX7v7wLoT9UDAw/deX7v7wLoT9UDAw/deX7v7wLoT9UDAw/NaAIwFI4sz8v50Q/NaAIwFI4sz8v50Q/NaAIwFI4sz8v50Q/ZL/5v7wLoT9HGEE/ZL/5v7wLoT9HGEE/ZL/5v7wLoT9HGEE/gYEvwDbsIz9wGxw/gYEvwDbsIz9wGxw/gYEvwDbsIz9wGxw//sAjwAkm/z6JTBg//sAjwAkm/z6JTBg//sAjwAkm/z6JTBg/d24uwDbsIz9jJ1E/d24uwDbsIz9jJ1E/d24uwDbsIz9jJ1E/9a0iwAkm/z58WE0/9a0iwAkm/z58WE0/9a0iwAkm/z58WE0/VSUswGb1Jz8eJ00/VSUswGb1Jz8eJ00/VSUswGb1Jz8eJ00/FVcfwGyGMT/PAEk/FVcfwGyGMT/PAEk/FVcfwGyGMT/PAEk/xxYtwGb1Jz+blR4/xxYtwGb1Jz+blR4/xxYtwGb1Jz+blR4/iEggwGyGMT9Lbxo/iEggwGyGMT9Lbxo/iEggwGyGMT9Lbxo/uLYcwPO5JL/uJkg/uLYcwPO5JL/uJkg/uLYcwPO5JL/uJkg/d+gPwOkoG7+dAEQ/d+gPwOkoG7+dAEQ/d+gPwOkoG7+dAEQ/K6gdwPO5JL9plRk/K6gdwPO5JL9plRk/K6gdwPO5JL9plRk/6dkQwOkoG78ZbxU/6dkQwOkoG78ZbxU/6dkQwOkoG78ZbxU/ZxC1vwXbij95yBg+ZxC1vwXbij95yBg+ZxC1vwXbij95yBg+kWOWv3F4mT8beCg+kWOWv3F4mT8beCg+kWOWv3F4mT8beCg+oh+zvwXbij9ZKrS9oh+zvwXbij9ZKrS9oh+zvwXbij9ZKrS9zXKUv3F4mT8jy5S9zXKUv3F4mT8jy5S9zXKUv3F4mT8jy5S98Ektv2yF8L7LEEk+8Ektv2yF8L7LEEk+8Ektv2yF8L7LEEk+jeDfvrQPtr5twFg+jeDfvrQPtr5twFg+jeDfvrQPtr5twFg+aGgpv2yF8L6LMye9aGgpv2yF8L6LMye9aGgpv2yF8L6LMye9fR3YvrQPtr4l6tC8fR3YvrQPtr4l6tC8fR3YvrQPtr4l6tC87fsKwI6slj8R66897fsKwI6slj8R66897fsKwI6slj8R668979kHwMHGsz+RU7Y979kHwMHGsz+RU7Y979kHwMHGsz+RU7Y9pyIKwI6slj97+vi9pyIKwI6slj97+vi9pyIKwI6slj97+vi9qAAHwMHGsz8LkvK9qAAHwMHGsz8LkvK9qAAHwMHGsz8LkvK9k8udv6Pudz82aRU+k8udv6Pudz82aRU+k8udv6Pudz82aRU+l4eXv4YRmT9xnRg+l4eXv4YRmT9xnRg+l4eXv4YRmT9xnRg+BRmcv6Pudz8/Jny9BRmcv6Pudz8/Jny9BRmcv6Pudz8/Jny9CdWVv4QRmT9fVW+9CdWVv4QRmT9fVW+9CdWVv4QRmT9fVW+996gGwFQ4sz+b3vG996gGwFQ4sz+b3vG996gGwFQ4sz+b3vG9fcn1v7wLoT9Hzdm9fcn1v7wLoT9Hzdm9fcn1v7wLoT9Hzdm9P4IHwFI4sz/3Brc9P4IHwFI4sz/3Brc9P4IHwFI4sz/3Brc9Cnz3v7wLoT9FGM89Cnz3v7wLoT9FGM89Cnz3v7wLoT9FGM89KYMswDbsIz+9pR++KYMswDbsIz+9pR++KYMswDbsIz+9pR++8b4gwAkm/z4TnRO+8b4gwAkm/z4TnRO+8b4gwAkm/z4TnRO+cFwtwDbsIz83NFM9cFwtwDbsIz83NFM9cFwtwDbsIz83NFM9N5ghwAkm/z5oq4E9N5ghwAkm/z5oq4E9N5ghwAkm/z5oq4E9f/QqwGb1Jz/a8Sg9f/QqwGb1Jz/a8Sg9f/QqwGb1Jz/a8Sg9NSIewGyGMT9XZV09NSIewGyGMT9XZV09NSIewGyGMT9XZV09wjUqwGb1Jz9iRBC+wjUqwGb1Jz9iRBC+wjUqwGb1Jz9iRBC+d2MdwGyGMT+HJwO+d2MdwGyGMT+HJwO+d2MdwGyGMT+HJwO+BIEbwPO5JL88J2g9BIEbwPO5JL88J2g9BIEbwPO5JL88J2g9uK4OwOkoG79hTY49uK4OwOkoG79hTY49uK4OwOkoG79hTY49RsIawPO5JL8NdwC+RsIawPO5JL8NdwC+RsIawPO5JL8NdwC++u8NwOkoG79ftOa9+u8NwOkoG79ftOa9+u8NwOkoG79ftOa9ofCqvwXbij9txb++ofCqvwXbij9txb++ofCqvwXbij9txb++kVKNv3F4mT854Z6+kVKNv3F4mT854Z6+kVKNv3F4mT854Z6+U82ivwXbij8ughq/U82ivwXbij8ughq/U82ivwXbij8ughq/Qy+Fv3F4mT8WEAq/Qy+Fv3F4mT8WEAq/Qy+Fv3F4mT8WEAq/RY0fv2yF8L44DzW+RY0fv2yF8L44DzW+RY0fv2yF8L44DzW+SqLIvrQPtr6bjea9SqLIvrQPtr6bjea9SqLIvrQPtr6bjea9rUYPv2yF8L6Rxs++rUYPv2yF8L6Rxs++rUYPv2yF8L6Rxs++FhWovrQPtr5e4q6+FhWovrQPtr5e4q6+FhWovrQPtr5e4q6+JQ4EwI6slj8Ykxe/JQ4EwI6slj8Ykxe/JQ4EwI6slj8Ykxe/zQcBwMHGsz8lNxS/zQcBwMHGsz8lNxS/zQcBwMHGsz8lNxS/9H4AwI6slj/32kq/9H4AwI6slj/32kq/9H4AwI6slj/32kq/OfH6v8HGsz8Hf0e/OfH6v8HGsz8Hf0e/OfH6v8HGsz8Hf0e/xRSUv6Pudz8rS66+xRSUv6Pudz8rS66+xRSUv6Pudz8rS66+GAiOv4YRmT9Kk6e+GAiOv4YRmT9Kk6e+GAiOv4YRmT9Kk6e+Y/aMv6Pudz92bQq/Y/aMv6Pudz92bQq/Y/aMv6Pudz92bQq/temGv4QRmT+GEQe/temGv4QRmT+GEQe/temGv4QRmT+GEQe/4kf6v1Q4sz/+IEe/4kf6v1Q4sz/+IEe/4kf6v1Q4sz/+IEe/K4/jv7wLoT8kgzq/K4/jv7wLoT8kgzq/K4/jv7wLoT8kgzq/I7MAwFI4sz8e2RO/I7MAwFI4sz8e2RO/I7MAwFI4sz8e2RO/ja3qv7wLoT9EOwe/ja3qv7wLoT9EOwe/ja3qv7wLoT9EOwe/BLAhwDbsIz9St2+/BLAhwDbsIz9St2+/BLAhwDbsIz9St2+/qFMWwAkm/z54GWO/qFMWwAkm/z54GWO/qFMWwAkm/z54GWO/NT8lwDbsIz9xbzy/NT8lwDbsIz9xbzy/NT8lwDbsIz9xbzy/2uIZwAkm/z6Y0S+/2uIZwAkm/z6Y0S+/2uIZwAkm/z6Y0S+/rMEiwGb1Jz/WCj2/rMEiwGb1Jz/WCj2/rMEiwGb1Jz/WCj2/j2AWwGyGMT9nSy+/j2AWwGyGMT9nSy+/j2AWwGyGMT9nSy+/w6EfwGb1Jz98D2q/w6EfwGb1Jz98D2q/w6EfwGb1Jz98D2q/pUATwGyGMT8OUFy/pUATwGyGMT8OUFy/pUATwGyGMT8OUFy/lNYTwPO5JL+UeSy/lNYTwPO5JL+UeSy/lNYTwPO5JL+UeSy/dXUHwOkoG78iuh6/dXUHwOkoG78iuh6/dXUHwOkoG78iuh6/qrYQwPO5JL85flm/qrYQwPO5JL85flm/qrYQwPO5JL85flm/i1UEwOkoG7/Ivku/i1UEwOkoG7/Ivku/i1UEwOkoG7/Ivku/irGqPwXbij8FXqI/irGqPwXbij8FXqI/irGqPwXbij8FXqI/ORyOP3F4mT/sD5c/ORyOP3F4mT/sD5c/ORyOP3F4mT/sD5c/veG1PwXbij9MFIY/veG1PwXbij9MFIY/veG1PwXbij9MFIY/bEyZP3F4mT9jjHU/bEyZP3F4mT9jjHU/bEyZP3F4mT9jjHU/6WwlP2yF8L6qI38/6WwlP2yF8L6qI38/6WwlP2yF8L6qI38/ioTYPrQPtr54h2g/ioTYPrQPtr54h2g/ioTYPrQPtr54h2g/T807P2yF8L43kEY/T807P2yF8L43kEY/T807P2yF8L43kEY/raICP7QPtr4D9C8/raICP7QPtr4D9C8/raICP7QPtr4D9C8/z+YCQI6slj+TWsQ/z+YCQI6slj+TWsQ/z+YCQI6slj+TWsQ/A/f/P8HGsz9xC8I/A/f/P8HGsz9xC8I/A/f/P8HGsz9xC8I/jMsHQI6slj/Wm6s/jMsHQI6slj/Wm6s/jMsHQI6slj/Wm6s/PuAEQMHGsz+yTKk/PuAEQMHGsz+yTKk/PuAEQMHGsz+yTKk/R9OVP6Pudz+mEJg/R9OVP6Pudz+mEJg/R9OVP6Pudz+mEJg/rfyPP4YRmT+EwZU/rfyPP4YRmT+EwZU/rfyPP4YRmT+EwZU/wZyfP6Pudz/So34/wZyfP6Pudz/So34/wZyfP6Pudz/So34/J8aZP4QRmT+MBXo/J8aZP4QRmT+MBXo/J8aZP4QRmT+MBXo/iI4EQFQ4sz8QDKk/iI4EQFQ4sz8QDKk/iI4EQFQ4sz8QDKk/dS/zP7wLoT/OX6A/dS/zP7wLoT/OX6A/dS/zP7wLoT/OX6A/mVP/P1I4sz/PysE/mVP/P1I4sz/PysE/mVP/P1I4sz/PysE/+2XpP7wLoT+MHrk/+2XpP7wLoT+MHrk/+2XpP7wLoT+MHrk/6tMnQDbsIz+L8sQ/6tMnQDbsIz+L8sQ/6tMnQDbsIz+L8sQ/HN0cQAkm/z5JRrw/HN0cQAkm/z5JRrw/HN0cQAkm/z5JRrw/Le8iQDbsIz9Jsd0/Le8iQDbsIz9Jsd0/Le8iQDbsIz9Jsd0/YPgXQAkm/z4HBdU/YPgXQAkm/z4HBdU/YPgXQAkm/z4HBdU/GQohQGb1Jz9Bcto/GQohQGb1Jz9Bcto/GQohQGb1Jz9Bcto/pBcVQGyGMT/v/tA/pBcVQGyGMT/v/tA/pBcVQGyGMT/v/tA/2FUlQGb1Jz8jucQ/2FUlQGb1Jz8jucQ/2FUlQGb1Jz8jucQ/ZGMZQGyGMT/QRbs/ZGMZQGyGMT/QRbs/ZGMZQGyGMT/QRbs/W6QSQPO5JL+7Ds8/W6QSQPO5JL+7Ds8/W6QSQPO5JL+7Ds8/5LEGQOkoG79nm8U/5LEGQOkoG79nm8U/5LEGQOkoG79nm8U/G/AWQPO5JL+dVbk/G/AWQPO5JL+dVbk/G/AWQPO5JL+dVbk/pP0KQOkoG79I4q8/pP0KQOkoG79I4q8/pP0KQOkoG79I4q8/PSK3PwXbij/MHzo/PSK3PwXbij/MHzo/PSK3PwXbij/MHzo/E3+YP3F4mT8FKTU/E3+YP3F4mT8FKTU/E3+YP3F4mT8FKTU/EJe5PwXbij8N9/o+EJe5PwXbij8N9/o+EJe5PwXbij8N9/o+5/OaP3F4mT96CfE+5/OaP3F4mT96CfE+5/OaP3F4mT96CfE+JakxP2yF8L5F2Co/JakxP2yF8L5F2Co/JakxP2yF8L5F2Co/osXoPrQPtr5/4SU/osXoPrQPtr5/4SU/osXoPrQPtr5/4SU/y5I2P2yF8L76Z9w+y5I2P2yF8L76Z9w+y5I2P2yF8L76Z9w+7pjyPrQPtr5petI+7pjyPrQPtr5petI+7pjyPrQPtr5petI+zBgMQI6slj8dB0Y/zBgMQI6slj8dB0Y/zBgMQI6slj8dB0Y/yfcIQMHGsz+QA0U/yfcIQMHGsz+QA0U/yfcIQMHGsz+QA0U/1CsNQI6slj8r+xA/1CsNQI6slj8r+xA/1CsNQI6slj8r+xA/0woKQMHGsz+Z9w8/0woKQMHGsz+Z9w8/0woKQMHGsz+Z9w8/MSugP6Pudz+2lDI/MSugP6Pudz+2lDI/MSugP6Pudz+2lDI/L+mZP4YRmT8nkTE/L+mZP4YRmT8nkTE/L+mZP4YRmT8nkTE/Q1GiP6Pudz+EEfs+Q1GiP6Pudz+EEfs+Q1GiP6Pudz+EEfs+QA+cP4QRmT9kCvk+QA+cP4QRmT9kCvk+QA+cP4QRmT9kCvk+PbMJQFQ4sz862w8/PbMJQFQ4sz862w8/PbMJQFQ4sz862w8/deX7P7wLoT9UDAw/deX7P7wLoT9UDAw/deX7P7wLoT9UDAw/NaAIQFI4sz8v50Q/NaAIQFI4sz8v50Q/NaAIQFI4sz8v50Q/ZL/5P7wLoT9HGEE/ZL/5P7wLoT9HGEE/ZL/5P7wLoT9HGEE/gYEvQDbsIz9wGxw/gYEvQDbsIz9wGxw/gYEvQDbsIz9wGxw//sAjQAkm/z6JTBg//sAjQAkm/z6JTBg//sAjQAkm/z6JTBg/d24uQDbsIz9jJ1E/d24uQDbsIz9jJ1E/d24uQDbsIz9jJ1E/9a0iQAkm/z58WE0/9a0iQAkm/z58WE0/9a0iQAkm/z58WE0/VSUsQGb1Jz8eJ00/VSUsQGb1Jz8eJ00/VSUsQGb1Jz8eJ00/FVcfQGyGMT/PAEk/FVcfQGyGMT/PAEk/FVcfQGyGMT/PAEk/xxYtQGb1Jz+blR4/xxYtQGb1Jz+blR4/xxYtQGb1Jz+blR4/iEggQGyGMT9Lbxo/iEggQGyGMT9Lbxo/iEggQGyGMT9Lbxo/uLYcQPO5JL/uJkg/uLYcQPO5JL/uJkg/uLYcQPO5JL/uJkg/d+gPQOkoG7+dAEQ/d+gPQOkoG7+dAEQ/d+gPQOkoG7+dAEQ/K6gdQPO5JL9plRk/K6gdQPO5JL9plRk/K6gdQPO5JL9plRk/6dkQQOkoG78ZbxU/6dkQQOkoG78ZbxU/6dkQQOkoG78ZbxU/ZxC1PwXbij95yBg+ZxC1PwXbij95yBg+ZxC1PwXbij95yBg+kWOWP3F4mT8beCg+kWOWP3F4mT8beCg+kWOWP3F4mT8beCg+oh+zPwXbij9ZKrS9oh+zPwXbij9ZKrS9oh+zPwXbij9ZKrS9zXKUP3F4mT8jy5S9zXKUP3F4mT8jy5S9zXKUP3F4mT8jy5S98EktP2yF8L7LEEk+8EktP2yF8L7LEEk+8EktP2yF8L7LEEk+jeDfPrQPtr5twFg+jeDfPrQPtr5twFg+jeDfPrQPtr5twFg+aGgpP2yF8L6LMye9aGgpP2yF8L6LMye9aGgpP2yF8L6LMye9fR3YPrQPtr4l6tC8fR3YPrQPtr4l6tC8fR3YPrQPtr4l6tC87fsKQI6slj8R66897fsKQI6slj8R66897fsKQI6slj8R668979kHQMHGsz+RU7Y979kHQMHGsz+RU7Y979kHQMHGsz+RU7Y9pyIKQI6slj97+vi9pyIKQI6slj97+vi9pyIKQI6slj97+vi9qAAHQMHGsz8LkvK9qAAHQMHGsz8LkvK9qAAHQMHGsz8LkvK9k8udP6Pudz82aRU+k8udP6Pudz82aRU+k8udP6Pudz82aRU+l4eXP4YRmT9xnRg+l4eXP4YRmT9xnRg+l4eXP4YRmT9xnRg+BRmcP6Pudz8/Jny9BRmcP6Pudz8/Jny9BRmcP6Pudz8/Jny9CdWVP4QRmT9fVW+9CdWVP4QRmT9fVW+9CdWVP4QRmT9fVW+996gGQFQ4sz+b3vG996gGQFQ4sz+b3vG996gGQFQ4sz+b3vG9fcn1P7wLoT9Hzdm9fcn1P7wLoT9Hzdm9fcn1P7wLoT9Hzdm9P4IHQFI4sz/3Brc9P4IHQFI4sz/3Brc9P4IHQFI4sz/3Brc9Cnz3P7wLoT9FGM89Cnz3P7wLoT9FGM89Cnz3P7wLoT9FGM89KYMsQDbsIz+9pR++KYMsQDbsIz+9pR++KYMsQDbsIz+9pR++8b4gQAkm/z4TnRO+8b4gQAkm/z4TnRO+8b4gQAkm/z4TnRO+cFwtQDbsIz83NFM9cFwtQDbsIz83NFM9cFwtQDbsIz83NFM9N5ghQAkm/z5oq4E9N5ghQAkm/z5oq4E9N5ghQAkm/z5oq4E9f/QqQGb1Jz/a8Sg9f/QqQGb1Jz/a8Sg9f/QqQGb1Jz/a8Sg9NSIeQGyGMT9XZV09NSIeQGyGMT9XZV09NSIeQGyGMT9XZV09wjUqQGb1Jz9iRBC+wjUqQGb1Jz9iRBC+wjUqQGb1Jz9iRBC+d2MdQGyGMT+HJwO+d2MdQGyGMT+HJwO+d2MdQGyGMT+HJwO+BIEbQPO5JL88J2g9BIEbQPO5JL88J2g9BIEbQPO5JL88J2g9uK4OQOkoG79hTY49uK4OQOkoG79hTY49uK4OQOkoG79hTY49RsIaQPO5JL8NdwC+RsIaQPO5JL8NdwC+RsIaQPO5JL8NdwC++u8NQOkoG79ftOa9+u8NQOkoG79ftOa9+u8NQOkoG79ftOa9ofCqPwXbij9txb++ofCqPwXbij9txb++ofCqPwXbij9txb++kVKNP3F4mT854Z6+kVKNP3F4mT854Z6+kVKNP3F4mT854Z6+U82iPwXbij8ughq/U82iPwXbij8ughq/U82iPwXbij8ughq/Qy+FP3F4mT8WEAq/Qy+FP3F4mT8WEAq/Qy+FP3F4mT8WEAq/RY0fP2yF8L44DzW+RY0fP2yF8L44DzW+RY0fP2yF8L44DzW+SqLIPrQPtr6bjea9SqLIPrQPtr6bjea9SqLIPrQPtr6bjea9rUYPP2yF8L6Rxs++rUYPP2yF8L6Rxs++rUYPP2yF8L6Rxs++FhWoPrQPtr5e4q6+FhWoPrQPtr5e4q6+FhWoPrQPtr5e4q6+JQ4EQI6slj8Ykxe/JQ4EQI6slj8Ykxe/JQ4EQI6slj8Ykxe/zQcBQMHGsz8lNxS/zQcBQMHGsz8lNxS/zQcBQMHGsz8lNxS/9H4AQI6slj/32kq/9H4AQI6slj/32kq/9H4AQI6slj/32kq/OfH6P8HGsz8Hf0e/OfH6P8HGsz8Hf0e/OfH6P8HGsz8Hf0e/xRSUP6Pudz8rS66+xRSUP6Pudz8rS66+xRSUP6Pudz8rS66+GAiOP4YRmT9Kk6e+GAiOP4YRmT9Kk6e+GAiOP4YRmT9Kk6e+Y/aMP6Pudz92bQq/Y/aMP6Pudz92bQq/Y/aMP6Pudz92bQq/temGP4QRmT+GEQe/temGP4QRmT+GEQe/temGP4QRmT+GEQe/4kf6P1Q4sz/+IEe/4kf6P1Q4sz/+IEe/4kf6P1Q4sz/+IEe/K4/jP7wLoT8kgzq/K4/jP7wLoT8kgzq/K4/jP7wLoT8kgzq/I7MAQFI4sz8e2RO/I7MAQFI4sz8e2RO/I7MAQFI4sz8e2RO/ja3qP7wLoT9EOwe/ja3qP7wLoT9EOwe/ja3qP7wLoT9EOwe/BLAhQDbsIz9St2+/BLAhQDbsIz9St2+/BLAhQDbsIz9St2+/qFMWQAkm/z54GWO/qFMWQAkm/z54GWO/qFMWQAkm/z54GWO/NT8lQDbsIz9xbzy/NT8lQDbsIz9xbzy/NT8lQDbsIz9xbzy/2uIZQAkm/z6Y0S+/2uIZQAkm/z6Y0S+/2uIZQAkm/z6Y0S+/rMEiQGb1Jz/WCj2/rMEiQGb1Jz/WCj2/rMEiQGb1Jz/WCj2/j2AWQGyGMT9nSy+/j2AWQGyGMT9nSy+/j2AWQGyGMT9nSy+/w6EfQGb1Jz98D2q/w6EfQGb1Jz98D2q/w6EfQGb1Jz98D2q/pUATQGyGMT8OUFy/pUATQGyGMT8OUFy/pUATQGyGMT8OUFy/lNYTQPO5JL+UeSy/lNYTQPO5JL+UeSy/lNYTQPO5JL+UeSy/dXUHQOkoG78iuh6/dXUHQOkoG78iuh6/dXUHQOkoG78iuh6/qrYQQPO5JL85flm/qrYQQPO5JL85flm/qrYQQPO5JL85flm/i1UEQOkoG7/Ivku/i1UEQOkoG7/Ivku/i1UEQOkoG7/Ivku/AAAAAAAAAAAAAIC/AAAAAAAAgD8AAACAAACAPwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIC/AACAPwAAAAAAAACAAAAAAAAAAAAAAIA/AAAAAAAAgD8AAACAAACAPwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AACAPwAAAAAAAACAAACAvwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAAAAAgD8AAACAAACAvwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIC/AACAvwAAAAAAAACAAAAAAAAAAAAAAIA/AAAAAAAAgD8AAACAAACAvwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AAAAANqZfT5oBni/MFKtMUyhfD+3miU+wkJ+P5YW7Dyx5ea96yRGshOCcb9N0qm+AAAAANqZfT5oBni/wkJ+P5YW7Dyx5ea9AAAAAOWZfb5nBng/AAAAAAH2bj+Eq7c+Yil7P6lJRL3E+D8+AAAAAAhSf79zIJW9AAAAAOWZfb5nBng/Yil7P6lJRL3E+D8+wUJ+v5gW7Dyz5ea9AAAAANqZfT5oBni/MFKtMUyhfD+3miU+wUJ+v5gW7Dyz5ea96yRGshOCcb9N0qm+AAAAANqZfT5oBni/Yil7v59JRL3B+D8+AAAAAOWZfb5nBng/AAAAAAH2bj+Eq7c+Yil7v59JRL3B+D8+AAAAAAhSf79zIJW9AAAAAOWZfb5nBng///9/vwAAAAAAAACAAAAAAJuRUL8wcRS/AAAAAC9xFL+akVA///9/vwAAAAAAAACAAAAAAC9xFL+akVA/AAAAAJqRUD8xcRQ///9/vwAAAAAAAACAAAAAAJuRUL8wcRS/AAAAADJxFD+akVC///9/vwAAAAAAAACAAAAAADJxFD+akVC/AAAAAJqRUD8xcRQ/AAAAAJuRUL8wcRS/AAAAAC9xFL+akVA/AACAPwAAAABJAh8zAAAAAC9xFL+akVA/AAAAAJqRUD8xcRQ/AACAPwAAAABJAh8zAAAAAJuRUL8wcRS/AAAAADJxFD+akVC/AACAPwAAAABJAh8zAAAAADJxFD+akVC/AAAAAJqRUD8xcRQ/AACAPwAAAABJAh8zwUJ+v5gW7Dyz5ea9Yil7v59JRL3B+D8+6yRGshOCcb9N0qm+AAAAAAhSf79zIJW9AAAAAAH2bj+Eq7c+MFKtMUyhfD+3miU+Yil7P6lJRL3E+D8+wkJ+P5YW7Dyx5ea9wUJ+v5gW7Dyz5ea9Yil7v59JRL3B+D8+AAAAAAH2bj+Eq7c+MFKtMUyhfD+3miU+6yRGshOCcb9N0qm+AAAAAAhSf79zIJW9Yil7P6lJRL3E+D8+wkJ+P5YW7Dyx5ea9zI54v7hzer0f+2w+Xojas7iBd7/syYK+0Rx1PmD5fb63T3A/zI54v7hzer0f+2w+U1C7tLiBdz/wyYI+0Rx1PmD5fb63T3A/zI54v7hzer0f+2w+6Bx1vjL5fT64T3C/Xojas7iBd7/syYK+zI54v7hzer0f+2w+6Bx1vjL5fT64T3C/U1C7tLiBdz/wyYI+Xojas7iBd7/syYK+0Rx1PmD5fb63T3A/y454Pyx0ej0S+2y+U1C7tLiBdz/wyYI+0Rx1PmD5fb63T3A/y454Pyx0ej0S+2y+6Bx1vjL5fT64T3C/Xojas7iBd7/syYK+y454Pyx0ej0S+2y+6Bx1vjL5fT64T3C/U1C7tLiBdz/wyYI+y454Pyx0ej0S+2y+AACAvwAAAAAAAACAAAAAAJfxZr+Q6tw+AAAAAI7q3D6X8WY/AACAvwAAAAAAAACAAAAAAI7q3D6X8WY/AAAAAJfxZj+Q6ty+AACAvwAAAAAAAACAAAAAAJfxZr+Q6tw+AAAAAI7q3L6X8Wa/AACAvwAAAAAAAACAAAAAAI7q3L6X8Wa/AAAAAJfxZj+Q6ty+AAAAAJfxZr+Q6tw+AAAAAI7q3D6X8WY/AACAPwAAAAAAAACAAAAAAI7q3D6X8WY/AAAAAJfxZj+Q6ty+AACAPwAAAAAAAACAAAAAAJfxZr+Q6tw+AAAAAI7q3L6X8Wa/AACAPwAAAAAAAACAAAAAAI7q3L6X8Wa/AAAAAJfxZj+Q6ty+AACAPwAAAAAAAACAAACAvwAAAAC2lcU0AAAAAJ7xZr916tw+AAAAAJ/q3D6W8WY/AACAvwAAAAC2lcU0AAAAAJ/q3D6W8WY/AAAAAJ7xZj956ty+AACAvwAAAAC2lcU0AAAAAJ7xZr916tw+AAAAAJzq3L6V8Wa/AACAvwAAAAC2lcU0AAAAAJzq3L6V8Wa/AAAAAJ7xZj956ty+AAAAAJ7xZr916tw+AAAAAJ/q3D6W8WY/AACAPwAAAAAAAACAAAAAAJ/q3D6W8WY/AAAAAJ7xZj956ty+AACAPwAAAAAAAACAAAAAAJ7xZr916tw+AAAAAJzq3L6V8Wa/AACAPwAAAAAAAACAAAAAAJzq3L6V8Wa/AAAAAJ7xZj956ty+AACAPwAAAAAAAACA0hx1vmH5fb63T3A/a8D5M7iBd7/tyYK+zI54P7hzer0f+2w+0hx1vmH5fb63T3A/U1C7NLiBdz/vyYI+zI54P7hzer0f+2w+a8D5M7iBd7/tyYK+6Bx1PjT5fT65T3C/zI54P7hzer0f+2w+U1C7NLiBdz/vyYI+6Bx1PjT5fT65T3C/zI54P7hzer0f+2w+zI54vy50ej0T+2y+0hx1vmH5fb63T3A/a8D5M7iBd7/tyYK+zI54vy50ej0T+2y+0hx1vmH5fb63T3A/U1C7NLiBdz/vyYI+zI54vy50ej0T+2y+a8D5M7iBd7/tyYK+6Bx1PjT5fT65T3C/zI54vy50ej0T+2y+U1C7NLiBdz/vyYI+6Bx1PjT5fT65T3C/AAAAAJfxZr+Q6tw+AAAAAI7q3D6X8WY/AACAPwAAAAAwkkyzAAAAAI7q3D6X8WY/AAAAAJfxZj+Q6ty+AACAPwAAAAAwkkyzAAAAAJfxZr+Q6tw+AAAAAI7q3L6X8Wa/AACAPwAAAAAwkkyzAAAAAI7q3L6X8Wa/AAAAAJfxZj+Q6ty+AACAPwAAAAAwkkyzAACAvwAAAAAwkkwyAAAAAJfxZr+Q6tw+AAAAAI7q3D6X8WY/AACAvwAAAAAwkkwyAAAAAI7q3D6X8WY/AAAAAJfxZj+Q6ty+AACAvwAAAAAwkkwyAAAAAJfxZr+Q6tw+AAAAAI7q3L6X8Wa/AACAvwAAAAAwkkwyAAAAAI7q3L6X8Wa/AAAAAJfxZj+Q6ty+AAAAAJ7xZr916tw+AAAAAJ/q3D6W8WY/AACAPwAAAAC2lcU0AAAAAJ/q3D6W8WY/AAAAAJ7xZj956ty+AACAPwAAAAC2lcU0AAAAAJ7xZr916tw+AAAAAJzq3L6V8Wa/AACAPwAAAAC2lcU0AAAAAJzq3L6V8Wa/AAAAAJ7xZj956ty+AACAPwAAAAC2lcU0AACAvwAAAAC2lcWzAAAAAJ7xZr916tw+AAAAAJ/q3D6W8WY/AACAvwAAAAC2lcWzAAAAAJ/q3D6W8WY/AAAAAJ7xZj956ty+AACAvwAAAAC2lcWzAAAAAJ7xZr916tw+AAAAAJzq3L6V8Wa/AACAvwAAAAC2lcWzAAAAAJzq3L6V8Wa/AAAAAJ7xZj956ty+4f1Wv/na275wEKo+8nHMvl8yZz+ruCE+JU+8PgAAAAB4Dm4/8nHMvl8yZz+ruCE+JU+8PgAAAAB4Dm4/4/1WP/3a2z5sEKq+4f1Wv/na275wEKo+8nHMvl8yZz+ruCE+N0+8vnTILrR2Dm6/8nHMvl8yZz+ruCE+N0+8vnTILrR2Dm6/4/1WP/3a2z5sEKq+4f1Wv/na275wEKo+JU+8PgAAAAB4Dm4/CXLMPlcyZ7/LuCG+JU+8PgAAAAB4Dm4/CXLMPlcyZ7/LuCG+4/1WP/3a2z5sEKq+4f1Wv/na275wEKo+N0+8vnTILrR2Dm6/CXLMPlcyZ7/LuCG+N0+8vnTILrR2Dm6/CXLMPlcyZ7/LuCG+4/1WP/3a2z5sEKq+9rNov5nxVz4ME7g+6S9OvjTteb99GaM9Jk+8Pn4p1rR4Dm4/9rNov5nxVz4ME7g+wi9OPjPteT/GGaO9Jk+8Pn4p1rR4Dm4/9rNov5nxVz4ME7g+KE+8vlvGDrV5Dm6/6S9OvjTteb99GaM99rNov5nxVz4ME7g+KE+8vlvGDrV5Dm6/wi9OPjPteT/GGaO96S9OvjTteb99GaM9Jk+8Pn4p1rR4Dm4/+LNoP3HxV74RE7i+wi9OPjPteT/GGaO9Jk+8Pn4p1rR4Dm4/+LNoP3HxV74RE7i+KE+8vlvGDrV5Dm6/6S9OvjTteb99GaM9+LNoP3HxV74RE7i+KE+8vlvGDrV5Dm6/wi9OPjPteT/GGaO9+LNoP3HxV74RE7i+7LU7v9pxHT/qe5Q+KE+8vlfGjjR5Dm6/NlIRPznESj+Z52W+KE+8vlfGjjR5Dm6/NlIRPznESj+Z52W+67U7P9txHb/me5S+7LU7v9pxHT/qe5Q+K0+8PlrGDrR3Dm4/NlIRPznESj+Z52W+K0+8PlrGDrR3Dm4/NlIRPznESj+Z52W+67U7P9txHb/me5S+7LU7v9pxHT/qe5Q+QVIRvyjESr8Z6GU+KE+8vlfGjjR5Dm6/QVIRvyjESr8Z6GU+KE+8vlfGjjR5Dm6/67U7P9txHb/me5S+7LU7v9pxHT/qe5Q+QVIRvyjESr8Z6GU+K0+8PlrGDrR3Dm4/QVIRvyjESr8Z6GU+K0+8PlrGDrR3Dm4/67U7P9txHb/me5S+OAlqv+BmO74BIbk+SEQuviutez+D2Yk9J0+8Phcc7TN4Dm4/SEQuviutez+D2Yk9J0+8Phcc7TN4Dm4/NwlqPwNnOz76ILm+OAlqv+BmO74BIbk+Mk+8vg0c7TN3Dm6/SEQuviutez+D2Yk9Mk+8vg0c7TN3Dm6/SEQuviutez+D2Yk9NwlqPwNnOz76ILm+OAlqv+BmO74BIbk+TUQuPiute7+o2Ym9J0+8Phcc7TN4Dm4/TUQuPiute7+o2Ym9J0+8Phcc7TN4Dm4/NwlqPwNnOz76ILm+OAlqv+BmO74BIbk+Mk+8vg0c7TN3Dm6/TUQuPiute7+o2Ym9Mk+8vg0c7TN3Dm6/TUQuPiute7+o2Ym9NwlqPwNnOz76ILm+FXFmv/za274FWZU9HiPbvl4yZz/gBQ49xV6lPZDTi7T/KX8/HiPbvl4yZz/gBQ49xV6lPZDTi7T/KX8/E3FmP/3a2z7/WJW9FXFmv/za274FWZU9HiPbvl4yZz/gBQ49Dl+lvZDTC7P/KX+/HiPbvl4yZz/gBQ49Dl+lvZDTC7P/KX+/E3FmP/3a2z7/WJW9FXFmv/za274FWZU9xV6lPZDTi7T/KX8/OyPbPlcyZ7+SBQ69xV6lPZDTi7T/KX8/OyPbPlcyZ7+SBQ69E3FmP/3a2z7/WJW9FXFmv/za274FWZU9Dl+lvZDTC7P/KX+/OyPbPlcyZ7+SBQ69Dl+lvZDTC7P/KX+/OyPbPlcyZ7+SBQ69E3FmP/3a2z7/WJW9/mx5v6HxVz6qp6E9DwFdvjTteb9nO488yF6lPYY8E7X/KX8//mx5v6HxVz6qp6E9yF6lPYY8E7X/KX8/DAFdPjPteT/1PI+8/mx5v6HxVz6qp6E9DwFdvjTteb9nO488216lvVfGjjMAKn+//mx5v6HxVz6qp6E9216lvVfGjjMAKn+/DAFdPjPteT/1PI+8DwFdvjTteb9nO488yF6lPYY8E7X/KX8/AW15P27xV74Fp6G9yF6lPYY8E7X/KX8/DAFdPjPteT/1PI+8AW15P27xV74Fp6G9DwFdvjTteb9nO488216lvVfGjjMAKn+/AW15P27xV74Fp6G9216lvVfGjjMAKn+/DAFdPjPteT/1PI+8AW15P27xV74Fp6G9ODNJv9txHT/rZYI9zl6lvU3GDjQAKn+/scMbPzTESj+W5Um9zl6lvU3GDjQAKn+/scMbPzTESj+W5Um9OzNJP9pxHb/8ZIK9ODNJv9txHT/rZYI99F6lPWDGjrQAKn8/scMbPzTESj+W5Um99F6lPWDGjrQAKn8/scMbPzTESj+W5Um9OzNJP9pxHb/8ZIK9ODNJv9txHT/rZYI9vMMbvyjESr+B50k9zl6lvU3GDjQAKn+/vMMbvyjESr+B50k9zl6lvU3GDjQAKn+/OzNJP9pxHb/8ZIK9ODNJv9txHT/rZYI9vMMbvyjESr+B50k99F6lPWDGjrQAKn8/vMMbvyjESr+B50k99F6lPWDGjrQAKn8/OzNJP9pxHb/8ZIK9yNp6v+NmO74klKI9Ico6vi2tez/IHnI8/16lPQAAAAAAKn8/Ico6vi2tez/IHnI8/16lPQAAAAAAKn8/x9p6PwdnOz6hk6K9yNp6v+NmO74klKI9Ico6vi2tez/IHnI8+16lvQsc7TL+KX+/Ico6vi2tez/IHnI8+16lvQsc7TL+KX+/x9p6PwdnOz6hk6K9yNp6v+NmO74klKI9/16lPQAAAAAAKn8/Zso6Piqte7/lHHK8/16lPQAAAAAAKn8/Zso6Piqte7/lHHK8x9p6PwdnOz6hk6K9yNp6v+NmO74klKI9+16lvQsc7TL+KX+/Zso6Piqte7/lHHK8+16lvQsc7TL+KX+/Zso6Piqte7/lHHK8x9p6PwdnOz6hk6K9zblmv/za277z92u9QGjbvl8yZz8oZOC8S6SCvXDILrOIen8/QGjbvl8yZz8oZOC8S6SCvXDILrOIen8/zrlmP//a2z5X92s9zblmv/za277z92u9QGjbvl8yZz8oZOC8J6SCPZLTi7OHen+/QGjbvl8yZz8oZOC8J6SCPZLTi7OHen+/zrlmP//a2z5X92s9zblmv/za277z92u9S6SCvXDILrOIen8/Z2jbPlcyZ79eZOA8S6SCvXDILrOIen8/Z2jbPlcyZ79eZOA8zrlmP//a2z5X92s9zblmv/za277z92u9J6SCPZLTi7OHen+/Z2jbPlcyZ79eZOA8J6SCPZLTi7OHen+/Z2jbPlcyZ79eZOA8zrlmP//a2z5X92s9uLt5v5jxVz5KZ3+9zUZdvjPteb/RTGK8Z6SCvaOp5LSGen8/uLt5v5jxVz5KZ3+9Z6SCvaOp5LSGen8/zEZdPjPteT+NS2I8uLt5v5jxVz5KZ3+9zUZdvjPteb/RTGK8VaSCPRqfoLKGen+/uLt5v5jxVz5KZ3+9VaSCPRqfoLKGen+/zEZdPjPteT+NS2I8zUZdvjPteb/RTGK8Z6SCvaOp5LSGen8/uLt5P3PxV77gaX89Z6SCvaOp5LSGen8/zEZdPjPteT+NS2I8uLt5P3PxV77gaX89zUZdvjPteb/RTGK8VaSCPRqfoLKGen+/uLt5P3PxV77gaX89VaSCPRqfoLKGen+/zEZdPjPteT+NS2I8uLt5P3PxV77gaX89t3JJv9pxHT9FB069ZaSCPR6fIDSGen+/2fQbPzPESj+vgB89ZaSCPR6fIDSGen+/2fQbPzPESj+vgB89t3JJP9xxHb8KBk49t3JJv9pxHT9FB069PKSCvW/av7SIen8/2fQbPzPESj+vgB89PKSCvW/av7SIen8/2fQbPzPESj+vgB89t3JJP9xxHb8KBk49t3JJv9pxHT9FB0694PQbvyzESr+zgB+9ZaSCPR6fIDSGen+/4PQbvyzESr+zgB+9ZaSCPR6fIDSGen+/t3JJP9xxHb8KBk49t3JJv9pxHT9FB0694PQbvyzESr+zgB+9PKSCvW/av7SIen8/4PQbvyzESr+zgB+9PKSCvW/av7SIen8/t3JJP9xxHb8KBk498yl7v+tmO76hb4C9HQU7vi2tez/NRD+8SqSCvT8DI7OHen8/HQU7vi2tez/NRD+8SqSCvT8DI7OHen8/8yl7P/9mOz6fb4A98yl7v+tmO76hb4C9HQU7vi2tez/NRD+8JaSCPYIxFDOGen+/HQU7vi2tez/NRD+8JaSCPYIxFDOGen+/8yl7P/9mOz6fb4A98yl7v+tmO76hb4C9SqSCvT8DI7OHen8/RAU7Piqte7+HRT88SqSCvT8DI7OHen8/RAU7Piqte7+HRT888yl7P/9mOz6fb4A98yl7v+tmO76hb4C9JaSCPYIxFDOGen+/RAU7Piqte7+HRT88JaSCPYIxFDOGen+/RAU7Piqte7+HRT888yl7P/9mOz6fb4A9NMVev/ja275CZXe+oNfTvlsyZz9tQuu98/eIvpDTi7Ntq3Y/oNfTvlsyZz9tQuu98/eIvpDTi7Ntq3Y/MsVeP//a2z5QZXc+NMVev/ja275CZXe+oNfTvlsyZz9tQuu95/eIPli9UbNwq3a/oNfTvlsyZz9tQuu95/eIPli9UbNwq3a/MsVeP//a2z5QZXc+NMVev/ja275CZXe+8/eIvpDTi7Ntq3Y/s9fTPlYyZ79kQus98/eIvpDTi7Ntq3Y/s9fTPlYyZ79kQus9MsVeP//a2z5QZXc+NMVev/ja275CZXe+5/eIPli9UbNwq3a/s9fTPlYyZ79kQus95/eIPli9UbNwq3a/s9fTPlYyZ79kQus9MsVeP//a2z5QZXc+UR9xv7XxVz5r44W+8veIvnop1rRsq3Y/paVVvjPteb+YQ229UR9xv7XxVz5r44W+8veIvnop1rRsq3Y/paVVPjTteT/yQm09UR9xv7XxVz5r44W+paVVvjPteb+YQ2297/eIPlfGjrNtq3a/UR9xv7XxVz5r44W+paVVPjTteT/yQm097/eIPlfGjrNtq3a/8veIvnop1rRsq3Y/paVVvjPteb+YQ229Vx9xP2rxV75o44U+8veIvnop1rRsq3Y/paVVPjTteT/yQm09Vx9xP2rxV75o44U+paVVvjPteb+YQ2297/eIPlfGjrNtq3a/Vx9xP2rxV75o44U+paVVPjTteT/yQm097/eIPlfGjrNtq3a/Vx9xP2rxV75o44U+ioBCv9pxHT/bAFi++feIPoIp1jRsq3a/N5QWPzDESj/LOSc++feIPoIp1jRsq3a/N5QWPzDESj/LOSc+i4BCP9xxHb+4AFg+ioBCv9pxHT/bAFi+7feIvoIp1rRuq3Y/N5QWPzDESj/LOSc+7feIvoIp1rRuq3Y/N5QWPzDESj/LOSc+i4BCP9xxHb+4AFg+ioBCv9pxHT/bAFi+QZQWvyvESr+oOSe++feIPoIp1jRsq3a/QZQWvyvESr+oOSe++feIPoIp1jRsq3a/i4BCP9xxHb+4AFg+ioBCv9pxHT/bAFi+QZQWvyvESr+oOSe+7feIvoIp1rRuq3Y/QZQWvyvESr+oOSe+7feIvoIp1rRuq3Y/i4BCP9xxHb+4AFg+74Byv+ZmO77Bp4a+8/eIvhkc7bNtq3Y/T5I0vi2tez9HiEi98/eIvhkc7bNtq3Y/T5I0vi2tez9HiEi974ByP/xmOz6/p4Y+74Byv+ZmO77Bp4a+T5I0vi2tez9HiEi94/eIPg0cbbNuq3a/T5I0vi2tez9HiEi94/eIPg0cbbNuq3a/74ByP/xmOz6/p4Y+74Byv+ZmO77Bp4a+8/eIvhkc7bNtq3Y/epI0Piqte7+giEg98/eIvhkc7bNtq3Y/epI0Piqte7+giEg974ByP/xmOz6/p4Y+74Byv+ZmO77Bp4a+epI0Piqte7+giEg94/eIPg0cbbNuq3a/epI0Piqte7+giEg94/eIPg0cbbNuq3a/74ByP/xmOz6/p4Y+JE+8vgAAAAB4Dm4/8nHMPl8yZz+ruCE+4f1WP/ra275wEKo+4/1Wv/3a2z5sEKq+JE+8vgAAAAB4Dm4/8nHMPl8yZz+ruCE+N0+8PpHTC7R2Dm6/8nHMPl8yZz+ruCE+4f1WP/ra275wEKo+4/1Wv/3a2z5sEKq+N0+8PpHTC7R2Dm6/8nHMPl8yZz+ruCE+C3LMvlcyZ7/LuCG+JE+8vgAAAAB4Dm4/4f1WP/ra275wEKo+4/1Wv/3a2z5sEKq+C3LMvlcyZ7/LuCG+JE+8vgAAAAB4Dm4/C3LMvlcyZ7/LuCG+N0+8PpHTC7R2Dm6/4f1WP/ra275wEKo+4/1Wv/3a2z5sEKq+C3LMvlcyZ7/LuCG+N0+8PpHTC7R2Dm6/I0+8vlTGDrV4Dm4/6S9OPjLteb99GaM99rNoP5vxVz4JE7g+I0+8vlTGDrV4Dm4/xS9OvjTteT/FGaO99rNoP5vxVz4JE7g+6S9OPjLteb99GaM9JU+8PlnGDrV4Dm6/9rNoP5vxVz4JE7g+xS9OvjTteT/FGaO9JU+8PlnGDrV4Dm6/9rNoP5vxVz4JE7g+9rNov23xV74UE7i+I0+8vlTGDrV4Dm4/6S9OPjLteb99GaM99rNov23xV74UE7i+I0+8vlTGDrV4Dm4/xS9OvjTteT/FGaO99rNov23xV74UE7i+6S9OPjLteb99GaM9JU+8PlnGDrV4Dm6/9rNov23xV74UE7i+xS9OvjTteT/FGaO9JU+8PlnGDrV4Dm6/NVIRvzvESj+R52W+Jk+8PlbGjjR6Dm6/67U7P9pxHT/pe5Q+67U7v9txHb/me5S+NVIRvzvESj+R52W+Jk+8PlbGjjR6Dm6/NVIRvzvESj+R52W+K0+8vlrGjrR3Dm4/67U7P9pxHT/pe5Q+67U7v9txHb/me5S+NVIRvzvESj+R52W+K0+8vlrGjrR3Dm4/Jk+8PlbGjjR6Dm6/RFIRPyXESr8c6GU+67U7P9pxHT/pe5Q+67U7v9txHb/me5S+Jk+8PlbGjjR6Dm6/RFIRPyXESr8c6GU+K0+8vlrGjrR3Dm4/RFIRPyXESr8c6GU+67U7P9pxHT/pe5Q+67U7v9txHb/me5S+K0+8vlrGjrR3Dm4/RFIRPyXESr8c6GU+J0+8vhcc7TN4Dm4/TEQuPiutez+C2Yk9OAlqP+VmO74BIbk+OAlqvwFnOz76ILm+J0+8vhcc7TN4Dm4/TEQuPiutez+C2Yk9TEQuPiutez+C2Yk9LU+8Pggc7TN3Dm6/OAlqP+VmO74BIbk+OAlqvwFnOz76ILm+TEQuPiutez+C2Yk9LU+8Pggc7TN3Dm6/J0+8vhcc7TN4Dm4/TUQuviute7+o2Ym9OAlqP+VmO74BIbk+OAlqvwFnOz76ILm+J0+8vhcc7TN4Dm4/TUQuviute7+o2Ym9TUQuviute7+o2Ym9LU+8Pggc7TN3Dm6/OAlqP+VmO74BIbk+OAlqvwFnOz76ILm+TUQuviute7+o2Ym9LU+8Pggc7TN3Dm6/xV6lvZDTi7T/KX8/GiPbPl0yZz/gBQ49FXFmP/ra274FWZU9E3Fmv/3a2z7/WJW9xV6lvZDTi7T/KX8/GiPbPl0yZz/gBQ49Dl+lPZDTi7P/KX+/GiPbPl0yZz/gBQ49FXFmP/ra274FWZU9E3Fmv/3a2z7/WJW9Dl+lPZDTi7P/KX+/GiPbPl0yZz/gBQ49PCPbvlcyZ7+SBQ69xV6lvZDTi7T/KX8/FXFmP/ra274FWZU9E3Fmv/3a2z7/WJW9PCPbvlcyZ7+SBQ69xV6lvZDTi7T/KX8/PCPbvlcyZ7+SBQ69Dl+lPZDTi7P/KX+/FXFmP/ra274FWZU9E3Fmv/3a2z7/WJW9PCPbvlcyZ7+SBQ69Dl+lPZDTi7P/KX+/xl6lvVPGDrX/KX8/EgFdPjPteb9nO488/Wx5P6PxVz6rp6E9CAFdvjPteT/0PI+8xl6lvVPGDrX/KX8//Wx5P6PxVz6rp6E93V6lPVfGDjQAKn+/EgFdPjPteb9nO488/Wx5P6PxVz6rp6E9CAFdvjPteT/0PI+83V6lPVfGDjQAKn+//Wx5P6PxVz6rp6E9Am15v27xV77rpqG9xl6lvVPGDrX/KX8/EgFdPjPteb9nO488Am15v27xV77rpqG9CAFdvjPteT/0PI+8xl6lvVPGDrX/KX8/Am15v27xV77rpqG93V6lPVfGDjQAKn+/EgFdPjPteb9nO488Am15v27xV77rpqG9CAFdvjPteT/0PI+83V6lPVfGDjQAKn+/scMbvzPESj985Um9zl6lPU3GDjQAKn+/ODNJP9txHT/qZYI9OjNJv9pxHb/8ZIK9scMbvzPESj985Um9zl6lPU3GDjQAKn+/scMbvzPESj985Um99l6lvWHGjrQAKn8/ODNJP9txHT/qZYI9OjNJv9pxHb/8ZIK9scMbvzPESj985Um99l6lvWHGjrQAKn8/zl6lPU3GDjQAKn+/u8MbPyrESr+B50k9ODNJP9txHT/qZYI9OjNJv9pxHb/8ZIK9zl6lPU3GDjQAKn+/u8MbPyrESr+B50k99l6lvWHGjrQAKn8/u8MbPyrESr+B50k9ODNJP9txHT/qZYI9OjNJv9pxHb/8ZIK99l6lvWHGjrQAKn8/u8MbPyrESr+B50k9BF+lvQAAAAAAKn8/GMo6Pi2tez/FHnI8yNp6P+RmO74klKI9x9p6vwVnOz6hk6K9BF+lvQAAAAAAKn8/GMo6Pi2tez/FHnI8+l6lPQocbTP/KX+/GMo6Pi2tez/FHnI8yNp6P+RmO74klKI9x9p6vwVnOz6hk6K9+l6lPQocbTP/KX+/GMo6Pi2tez/FHnI8aso6viqte7/lHHK8BF+lvQAAAAAAKn8/yNp6P+RmO74klKI9x9p6vwVnOz6hk6K9aso6viqte7/lHHK8BF+lvQAAAAAAKn8/aso6viqte7/lHHK8+l6lPQocbTP/KX+/yNp6P+RmO74klKI9x9p6vwVnOz6hk6K9aso6viqte7/lHHK8+l6lPQocbTP/KX+/SaSCPYvTC7OGen8/QGjbPl8yZz8oZOC8zblmP/za277z92u9zrlmv//a2z5X92s9SaSCPYvTC7OGen8/QGjbPl8yZz8oZOC8KKSCvZPTi7OIen+/QGjbPl8yZz8oZOC8zblmP/za277z92u9zrlmv//a2z5X92s9KKSCvZPTi7OIen+/QGjbPl8yZz8oZOC8Z2jbvlYyZ79eZOA8SaSCPYvTC7OGen8/zblmP/za277z92u9zrlmv//a2z5X92s9Z2jbvlYyZ79eZOA8SaSCPYvTC7OGen8/Z2jbvlYyZ79eZOA8KKSCvZPTi7OIen+/zblmP/za277z92u9zrlmv//a2z5X92s9Z2jbvlYyZ79eZOA8KKSCvZPTi7OIen+/Z6SCPUgC6LSGen8/zUZdPjPteb/RTGK8ubt5P5bxVz5KZ3+9zkZdvjPteT+NS2I8Z6SCPUgC6LSGen8/ubt5P5bxVz5KZ3+9VqSCvVDGDrOGen+/zUZdPjPteb/RTGK8ubt5P5bxVz5KZ3+9zkZdvjPteT+NS2I8VqSCvVDGDrOGen+/ubt5P5bxVz5KZ3+9uLt5v3HxV76aaX89Z6SCPUgC6LSGen8/zUZdPjPteb/RTGK8uLt5v3HxV76aaX89zkZdvjPteT+NS2I8Z6SCPUgC6LSGen8/uLt5v3HxV76aaX89VqSCvVDGDrOGen+/zUZdPjPteb/RTGK8uLt5v3HxV76aaX89zkZdvjPteT+NS2I8VqSCvVDGDrOGen+/1/QbvzXESj+egB89ZKSCveh3MjSHen+/uHJJP9txHT9IB069t3JJv9xxHb8KBk491/QbvzXESj+egB89ZKSCveh3MjSHen+/1/QbvzXESj+egB89OaSCPZ5QxLSHen8/uHJJP9txHT9IB069t3JJv9xxHb8KBk491/QbvzXESj+egB89OaSCPZ5QxLSHen8/ZKSCveh3MjSHen+/4vQbPyzESr+0gB+9uHJJP9txHT9IB069t3JJv9xxHb8KBk49ZKSCveh3MjSHen+/4vQbPyzESr+0gB+9OaSCPZ5QxLSHen8/4vQbPyzESr+0gB+9uHJJP9txHT9IB069t3JJv9xxHb8KBk49OaSCPZ5QxLSHen8/4vQbPyzESr+0gB+9SqSCPT8DI7OHen8/HwU7Piytez/LRD+88yl7P+xmO76hb4C98il7v/9mOz6fb4A9SqSCPT8DI7OHen8/HwU7Piytez/LRD+8IaSCvX8xFDOHen+/HwU7Piytez/LRD+88yl7P+xmO76hb4C98il7v/9mOz6fb4A9IaSCvX8xFDOHen+/HwU7Piytez/LRD+8SAU7viqte7+HRT88SqSCPT8DI7OHen8/8yl7P+xmO76hb4C98il7v/9mOz6fb4A9SAU7viqte7+HRT88SqSCPT8DI7OHen8/SAU7viqte7+HRT88IaSCvX8xFDOHen+/8yl7P+xmO76hb4C98il7v/9mOz6fb4A9SAU7viqte7+HRT88IaSCvX8xFDOHen+/8veIPo/Ti7Ntq3Y/oNfTPlwyZz9tQuu9NMVeP/ra275DZXe+MsVev//a2z5QZXc+8veIPo/Ti7Ntq3Y/oNfTPlwyZz9tQuu95/eIvpDTi7Nvq3a/oNfTPlwyZz9tQuu9NMVeP/ra275DZXe+MsVev//a2z5QZXc+5/eIvpDTi7Nvq3a/oNfTPlwyZz9tQuu9s9fTvlYyZ79iQus98veIPo/Ti7Ntq3Y/NMVeP/ra275DZXe+MsVev//a2z5QZXc+s9fTvlYyZ79iQus98veIPo/Ti7Ntq3Y/s9fTvlYyZ79iQus95/eIvpDTi7Nvq3a/NMVeP/ra275DZXe+MsVev//a2z5QZXc+s9fTvlYyZ79iQus95/eIvpDTi7Nvq3a/paVVPjPteb+YQ2298PeIPngp1rRtq3Y/UR9xP7XxVz5r44W+pKVVvjTteT/xQm098PeIPngp1rRtq3Y/UR9xP7XxVz5r44W+7veIvgAAAABtq3a/paVVPjPteb+YQ229UR9xP7XxVz5r44W+7veIvgAAAABtq3a/pKVVvjTteT/xQm09UR9xP7XxVz5r44W+Vx9xv2nxV75l44U+paVVPjPteb+YQ2298PeIPngp1rRtq3Y/Vx9xv2nxV75l44U+pKVVvjTteT/xQm098PeIPngp1rRtq3Y/Vx9xv2nxV75l44U+7veIvgAAAABtq3a/paVVPjPteb+YQ229Vx9xv2nxV75l44U+7veIvgAAAABtq3a/pKVVvjTteT/xQm09N5QWvzHESj/JOSc+9veIvn4p1jRrq3a/i4BCP9hxHT/ZAFi+ioBCv9txHb+1AFg+N5QWvzHESj/JOSc+9veIvn4p1jRrq3a/N5QWvzHESj/JOSc+7feIPoEp1rRuq3Y/i4BCP9hxHT/ZAFi+ioBCv9txHb+1AFg+N5QWvzHESj/JOSc+7feIPoEp1rRuq3Y/9veIvn4p1jRrq3a/QJQWPyvESr+nOSe+i4BCP9hxHT/ZAFi+ioBCv9txHb+1AFg+9veIvn4p1jRrq3a/QJQWPyvESr+nOSe+7feIPoEp1rRuq3Y/QJQWPyvESr+nOSe+i4BCP9hxHT/ZAFi+ioBCv9txHb+1AFg+7feIPoEp1rRuq3Y/QJQWPyvESr+nOSe+T5I0Piytez9HiEi98/eIPhcc7bNtq3Y/74ByP+ZmO77Ap4a+74Byv/1mOz6/p4Y+T5I0Piytez9HiEi98/eIPhcc7bNtq3Y/4veIvgocbbNuq3a/T5I0Piytez9HiEi974ByP+ZmO77Ap4a+74Byv/1mOz6/p4Y+4veIvgocbbNuq3a/T5I0Piytez9HiEi9gJI0viqte7+fiEg98/eIPhcc7bNtq3Y/74ByP+ZmO77Ap4a+74Byv/1mOz6/p4Y+gJI0viqte7+fiEg98/eIPhcc7bNtq3Y/4veIvgocbbNuq3a/gJI0viqte7+fiEg974ByP+ZmO77Ap4a+74Byv/1mOz6/p4Y+4veIvgocbbNuq3a/gJI0viqte7+fiEg9Uf3fPULt2z5SNAg+HvgXP74BAD1MAog+UDQIPh74Fz97/j8+Qu3bPlH93z1MAog+ev4/Plzwpz5QNAg+Qu3bPr4BAD1C7ds+UDQIPkLt2z4k/4c+XPCnPlH93z1C7ds+mgJwPh74Fz9R/d89XPCnPpoCcD4e+Bc/NR+gPh74Fz/KAQA9HvgXP3v+Pz5c8Kc+mgJwPkLt2z56/j8+Qu3bPpoCcD5C7ds+NR+gPkLt2z6+AQA9Qu3bPiT/hz5C7ds+ogUQP/j3fz7Ti0w/MBqBPvADST94v7Y9G3kSP6oGgT5tACQ/+Pd/Prz+XD94v7Y9R/tPP378pz5b50o/GnbUPvyaST8wGoE+kx0UPxp21D4W/WE/fvynPswdWz8wGoE+0VRFP3i/tj2iBRA/xLUXPvD1MT8wGoE+BloxP3i/tj39Di0/qgaBPm0AJD/EtRc+xb1EPzAagT5H+08/kCnYPmqaMz8adtQ++DozPzAagT6Hais/GnbUPhb9YT+QKdg+HBCgPaABAD21MvA9lPJvPscXYD548Ac+Svr/PKABAD3j/i8+ePAHPrUy8D2U8m8+HBCgPXjwBz6yMvA9ePAHPuP+Lz7wKD89Svr/PHjwBz7yAAA+8Cg/PbIy8D188Ac+Svr/PJTybz7HF2A+8Cg/PRwQoD2gAQA94/4vPvAoPz2/BFA+lPJvPvgL+z2gAQA9Svr/PHjwBz7j/i8+ePAHPhwQoD148Ac+8gAAPnjwBz6/BFA+ePAHPvIAAD548Ac+d4IvP4SbLj53gi8/hJsuPneCLz/AqKo+d4IvP8Coqj5M/04/iOKqPkz/Tj+I4qo+YyxHP4SbLj5jLEc/hJsuPmEsRz98my4+YSxHP3ybLj53gi8/iOKqPneCLz+I4qo+ogUQP8Coqj6iBRA/wKiqPkvWXj+Emy4+S9ZeP4SbLj5tAnI/8My/PWkAbD+gx/48ZgZmP6DH/jxvAHg/8My/PWkAbD/Ax/48ZgZmPwCX/jttAnI/wMf+PG0Ccj8Al/47aQBsP/DMvz1vAHg/wMf+PGkAbD8Al/47aQBsP/DMvz1tAnI/4Mf+PGkAbD+gx/48bwB4P+DH/jxmBmY/oMf+PGkAbD8Al/47dAJ+P+DH/jxtAnI/oMf+PG0Ccj/wzL89bwB4P/DMvz1rAGw/oMf+PGYGZj/wzL89dAJ+P/DMvz0vBXI/PNMPPi8Fcj8g9Rc+qAFmP9j9Lz4vBXI/wDzQPagBZj880w8+LwVyPyg68D2oAGw/PNMPPi8Fcj/Y/S8+LwVyP9j9Lz6oAGw/wDzQPS8Fcj880w8+0xh4Pyg68D3TGHg/IPUXPqgAbD/Y/S8+qABsP8A80D2oAGw/PNMPPi8Fcj9A0w8+qABsPzzTDz7TGHg/2P0vPqgAbD/Y/S8+qAFmP8A80D2oAGw/PNMPPtMYeD9A0w8+qAFmPzzTDz6l/20/sPpnPqX/bT8g+lc+9QBmP8j6Tz6l/20/yPpPPvUAZj/o/Tc+pf9tPwD1Pz5NAGo/rPpnPqX/bT+w+mc+pf9tP8j6Tz5NAGo/yPpPPqX/bT/o/Tc+/f5xPwD1Pz79/nE/IPpXPk0Aaj/I+k8+TQBqP8j6Tz5NAGo/5P03PqX/bT/I+k8+TQBqP7D6Zz79/nE/sPpnPk0Aaj/I+k8+9QBmP8j6Tz5NAGo/6P03Pv3+cT/I+k8+9QBmP7D6Zz5mBmY/oMf+PGkAbD+gx/48bQJyP/DMvz1mBmY/AJf+O2kAbD/Ax/48bwB4P/DMvz1pAGw/8My/PW0Ccj8Al/47bQJyP8DH/jxpAGw/8My/PWkAbD8Al/47bwB4P8DH/jxvAHg/4Mf+PGkAbD+gx/48bQJyP+DH/jx0An4/4Mf+PGkAbD8Al/47ZgZmP6DH/jxvAHg/8My/PW0Ccj/wzL89bQJyP6DH/jx0An4/8My/PWYGZj/wzL89awBsP6DH/jwvBXI/IPUXPqgBZj/Y/S8+LwVyPzzTDz6oAWY/PNMPPi8Fcj8oOvA9LwVyP8A80D0vBXI/2P0vPi8Fcj/Y/S8+qABsPzzTDz4vBXI/PNMPPtMYeD8oOvA9qABsP8A80D2oAGw/wDzQPdMYeD8g9Rc+qABsP9j9Lz6oAGw/PNMPPqgAbD880w8+LwVyP0DTDz6oAWY/wDzQPdMYeD/Y/S8+qABsP9j9Lz6oAWY/PNMPPqgAbD880w8+0xh4P0DTDz6l/20/IPpXPvUAZj/I+k8+pf9tP7D6Zz71AGY/6P03PqX/bT8A9T8+pf9tP8j6Tz6l/20/sPpnPqX/bT/I+k8+TQBqP6z6Zz6l/20/6P03Pv3+cT8A9T8+TQBqP8j6Tz5NAGo/yPpPPv3+cT8g+lc+TQBqP8j6Tz5NAGo/sPpnPk0Aaj/k/Tc+pf9tP8j6Tz71AGY/yPpPPv3+cT+w+mc+TQBqP8j6Tz71AGY/sPpnPk0Aaj/o/Tc+/f5xP8j6Tz7wAh4/G/1rP3r2KT+JBGY//QQMP9gSRD969ik/VAZgP2kFEj/YEkQ/rQoYP9gSRD8z+yM/Gv1rPzP7Iz+JBGY/aQUSPxv9az8z+yM/VAZgP60KGD8a/Ws/8AIeP9gSRD/wAh4/1xJEP/wEDD8b/Ws/fPYpP4oEZj9pBRI/G/1rP3z2KT8b/Ws/rgoYPxv9az8z+yM/1xJEP2kFEj/XEkQ/M/sjP4oEZj+tChg/2BJEPzP7Iz8a/Ws/8AIePxv9az8K+0s/LP9rP6MCRj8sAFI/FQEuPywAUj8K+0s/uxFmPzwSQD8s/2s/fw40P8D2UT+jAkY/LP9rP38OND/A9Ws/PBJAPywAUj+jAkY/uxFmPx4HOj8s/2s/Hgc6Pyz/az+jAkY/LP9rPxUBLj8s/2s/CvtLP0oEYD88EkA/LQBSP38OND/A9Ws/CvtLP7sRZj+ADjQ/wPZRPzwSQD8s/2s/owJGP0oEYD8eBzo/LQBSPx4HOj8sAFI/owJGP7oRZj+MEMw+5QJMP9Hysz7mBGY/2gDkPuYEZj/W/b8+5gRmP9oA5D6iC2A/2gDkPuUCTD8Z/dc+5QJMP4wQzD7mBGY/NCDwPuYEZj/W/b8+5gRmPzQg8D6iC2A/G/3XPuUCTD+MEMw+5gRmPzIg8D6iC2A/0fKzPuUCTD8yIPA++f1ZP9X9vz7lAkw/2gDkPuYEZj8Z/dc+5gRmP9oA5D6iC2A/jBDMPuUCTD/aAOQ++f1ZP9b9vz7lAkw/Gf3XPuYEZj/bDWg/Ce9DP40Abj+zAGY/WBFWP6b0az+NAG4/C/JfPz8KUD+m9Gs/cihcPwnvQz8nA2I/Ce9DP1oRVj+m9Gs/2w1oP7IAZj9zaFw/pvRrP9sNaD8L8l8/JwNiPwnvQz/bDWg/pvRrP40Abj+zAGY/WBFWPwnvQz+NAG4/pvRrPz0KUD8J70M/c2hcP6b0az8nQ2I/pvRrP1gRVj8J70M/2w1oP7MAZj9zKFw/Ce9DP9sNaD+m9Gs/J0NiP6b0az8z+yM/1xJEP3z2KT+KBGY/agUSP9cSRD989ik/VAZgP60KGD/YEkQ/rgoYP9gSRD/wAh4/2BJEPzP7Iz+KBGY//QQMPxv9az8z+yM/VAZgP2kFEj8a/Ws/8AIeP9gSRD8z+yM/G/1rP2kFEj8b/Ws/fPYpP4oEZj+tChg/G/1rP3z2KT8b/Ws/rQoYPxv9az/wAh4/G/1rP/wEDD/XEkQ/M/sjP4oEZj9pBRI/1xJEPzP7Iz8b/Ws/8AIePxv9az8K+0s/LP9rPzwSQD8s/2s/fw40P8D1az8K+0s/uxFmPxYBLj8s/2s/PBJAPyz/az+jAkY/LP9rP6MCRj8s/2s/Hgc6Py0AUj+jAkY/uxFmP38OND/A9lE/Hgc6Pyz/az88EkA/LABSP38OND/B9lE/owJGP7sRZj8VAS4/LQBSPzwSQD8sAFI/owJGP0oEYD+jAkY/LABSPx4HOj8s/2s/CvtLP7sRZj9/DjQ/wPVrPx4HOj8sAFI/CvtLP0oEYD8Z/dc+5gRmP9b9vz7lAkw/NCDwPqILYD/R8rM+5QJMPzIg8D7mBGY/2gDkPuUCTD+MEMw+5gRmP4wQzD7mBGY/2gDkPqILYD/W/b8+5gRmP9oA5D7mBGY/Gf3XPuUCTD8Z/dc+5QJMPzIg8D6iC2A/1f2/PuYEZj8yIPA++P1ZP9Hysz7mBGY/2gDkPuYEZj+MEMw+5QJMP9oA5D6hC2A/jBDMPuUCTD/aAOQ++P1ZP9b9vz7lAkw/Gf3XPuYEZj/bDWg/Cu9DP48Abj+yAGY/WBFWPwnvQz+PAG4/CvJfP3IoXD8K70M/cyhcPwrvQz8nA2I/Cu9DP9sNaD+zAGY/PwpQP6b0az/bDWg/C/JfP1gRVj+m9Gs/JwNiPwrvQz/bDWg/pvRrP1gRVj+m9Gs/jwBuP7QAZj9yaFw/pvRrP48Abj+m9Gs/c2hcP6b0az8nQ2I/pvRrPz0KUD8J70M/2w1oP7QAZj9YEVY/Ce9DP9sNaD+m9Gs/J0NiP6b0az/wAh4/G/1rP3r2KT+KBGY//AQMP9cSRD969ik/VAZgP2kFEj/XEkQ/rQoYP9gSRD8x+yM/G/1rPzP7Iz+KBGY/rQoYP9gSRD8x+yM/VAZgP2kFEj/YEkQ/8AIeP9gSRD/wAh4/1xJEP/0EDD8b/Ws/MfsjPxr9az9pBRI/G/1rPzH7Iz+KBGY/rQoYPxv9az8x+yM/2BJEP60KGD8b/Ws/evYpPxv9az9pBRI/G/1rP3r2KT+KBGY/8AIePxv9az+jAkY/uxFmP6MCRj8sAFI/FgEuPy0AUj+jAkY/LP9rP38OND/A9lE/Hgc6Py0AUj8K+0s/uxFmPzwSQD8sAFI/Hgc6PywAUj8K+0s/LP9rP38OND/A9lE/PBJAPywAUj+jAkY/LP9rPxUBLj8s/2s/CvtLP0oEYD9/DjQ/wPVrPx4HOj8s/2s/CvtLP7sRZj88EkA/LP9rPx4HOj8s/2s/owJGP0oEYD+ADjQ/wPVrPzwSQD8s/2s/owJGP7oRZj8Z/dc+5gRmP9b9vz7mBGY/MiDwPqILYD+MEMw+5gRmPzIg8D7mBGY/Gf3XPuYEZj+MEMw+5gRmP9Hysz7lAkw/2gDkPqILYD/W/b8+5QJMP9oA5D7mBGY/2gDkPuYEZj8Z/dc+5QJMP9oA5D74/Vk/1v2/PuUCTD/aAOQ+oQtgP4wQzD7lAkw/Gf3XPuUCTD+MEMw+5QJMPzIg8D74/Vk/0fKzPuYEZj8yIPA+ogtgP9b9vz7mBGY/2gDkPuUCTD8nA2I/Ce9DP40Abj+yAGY/WBFWP6b0az+NAG4/CvJfPz8KUD+m9Gs/JwNiPwrvQz9zKFw/Ce9DP9sNaD+zAGY/WBFWP6b0az/bDWg/CvJfP3NoXD+m9Gs/2w1oPwrvQz8nQ2I/pvRrP1gRVj8J70M/jQBuP7MAZj89ClA/Ce9DP40Abj+m9Gs/J0NiP6b0az9zaFw/pvRrP1gRVj8K70M/2w1oP7QAZj9zKFw/Cu9DP9sNaD+m9Gs/2w1oP6b0az8z+yM/1xJEP3z2KT+KBGY/rQoYPxv9az989ik/VAZgP2kFEj8a/Ws/rgoYP9gSRD/wAh4/1xJEPzP7Iz+JBGY/aQUSP9gSRD8z+yM/VAZgP/0EDD/YEkQ/8AIeP9gSRD8z+yM/G/1rP60KGD/XEkQ/M/sjPxr9az9pBRI/1xJEPzP7Iz+KBGY/rQoYPxv9az/wAh4/Gv1rP2kFEj8b/Ws/fPYpPxv9az/8BAw/G/1rP3z2KT+KBGY/8AIePxv9az8K+0s/uxFmP38OND/A9Ws/owJGPysAUj8K+0s/SgRgPxYBLj8s/2s/Hgc6PywAUj+jAkY/uxFmPzwSQD8rAFI/Hgc6PywAUj+jAkY/SgRgPzwSQD8rAFI/fw40P8D2UT9/DjQ/wPZRP6MCRj8s/2s/owJGPyz/az8VAS4/LQBSPx4HOj8s/2s/owJGP7sRZj88EkA/LP9rPx4HOj8s/2s/CvtLPyz/az88EkA/LP9rP4AOND/A9Ws/CvtLP7sRZj8b/dc+5gRmP9b9vz7lAkw/MiDwPvn9WT/R8rM+5QJMPzIg8D6iC2A/2gDkPuUCTD+MEMw+5gRmP4wQzD7mBGY/2gDkPvj9WT/W/b8+5gRmP9oA5D6iC2A/G/3XPuUCTD8b/dc+5QJMPzIg8D7mBGY/1f2/PuYEZj8yIPA+ogtgP9Hysz7mBGY/2gDkPuYEZj+MEMw+5QJMP9oA5D7mBGY/jBDMPuUCTD/aAOQ+ogtgP9b9vz7lAkw/G/3XPuYEZj/aDWg/Ce9DP1gRVj8J70M/2w1oPwryXz9yKFw/Ce9DP9sNaD+yAGY/cihcPwrvQz8nA2I/Ce9DP40Abj8K8l8/PwpQP6b0az+NAG4/tABmP1gRVj+m9Gs/JwNiPwrvQz/bDWg/pvRrP1gRVj+m9Gs/jQBuP7QAZj9xaFw/pvRrP40Abj+m9Gs/cmhcP6b0az8nQ2I/pvRrP9sNaD+0AGY/PQpQPwrvQz/bDWg/pvRrP1gRVj8K70M/J0NiP6b0az/9BAw/2BJEP3r2KT+JBGY/8AIePxv9az+tChg/2BJEP2kFEj/YEkQ/evYpP1QGYD9pBRI/G/1rPzP7Iz+JBGY/M/sjPxr9az/wAh4/2BJEP60KGD8a/Ws/M/sjP1QGYD989ik/igRmP/wEDD8b/Ws/8AIeP9cSRD+uChg/G/1rP3z2KT8b/Ws/aQUSPxv9az8z+yM/igRmP2kFEj/XEkQ/M/sjP9cSRD/wAh4/G/1rPzP7Iz8a/Ws/rQoYP9gSRD8VAS4/LABSP6MCRj8sAFI/CvtLPyz/az9/DjQ/wPZRPzwSQD8s/2s/CvtLP7sRZj88EkA/LABSP38OND/A9Ws/owJGPyz/az8eBzo/LP9rPx4HOj8s/2s/owJGP7sRZj8K+0s/SgRgPxUBLj8s/2s/owJGPyz/az8K+0s/uxFmP38OND/A9Ws/PBJAPy0AUj+jAkY/SgRgPzwSQD8s/2s/gA40P8D2UT+jAkY/uhFmPx4HOj8sAFI/Hgc6Py0AUj/aAOQ+5gRmP9Hysz7mBGY/jBDMPuUCTD/aAOQ+5QJMP9oA5D6iC2A/1v2/PuYEZj80IPA+5gRmP4wQzD7mBGY/Gf3XPuUCTD8b/dc+5QJMPzQg8D6iC2A/1v2/PuYEZj/R8rM+5QJMPzIg8D6iC2A/jBDMPuYEZj/aAOQ+5gRmP9X9vz7lAkw/MiDwPvn9WT+MEMw+5QJMP9oA5D6iC2A/Gf3XPuYEZj8Z/dc+5gRmP9b9vz7lAkw/2gDkPvn9WT9YEVY/pvRrP40Abj+zAGY/2w1oPwnvQz9yKFw/Ce9DPz8KUD+m9Gs/jQBuPwvyXz/bDWg/sgBmP1oRVj+m9Gs/JwNiPwnvQz8nA2I/Ce9DP9sNaD8L8l8/c2hcP6b0az9YEVY/Ce9DP40Abj+zAGY/2w1oP6b0az9zaFw/pvRrPz0KUD8J70M/jQBuP6b0az/bDWg/swBmP1gRVj8J70M/J0NiP6b0az8nQ2I/pvRrP9sNaD+m9Gs/cyhcPwnvQz9qBRI/1xJEP3z2KT+KBGY/M/sjP9cSRD+uChg/2BJEP60KGD/YEkQ/fPYpP1QGYD/9BAw/G/1rPzP7Iz+KBGY/8AIeP9gSRD/wAh4/2BJEP2kFEj8a/Ws/M/sjP1QGYD989ik/igRmP2kFEj8b/Ws/M/sjPxv9az+tChg/G/1rP3z2KT8b/Ws/rQoYPxv9az8z+yM/igRmP/wEDD/XEkQ/8AIePxv9az/wAh4/G/1rPzP7Iz8b/Ws/aQUSP9cSRD9/DjQ/wPVrPzwSQD8s/2s/CvtLPyz/az88EkA/LP9rPxYBLj8s/2s/CvtLP7sRZj8eBzo/LQBSP6MCRj8s/2s/owJGPyz/az8eBzo/LP9rP38OND/A9lE/owJGP7sRZj+jAkY/uxFmP38OND/B9lE/PBJAPywAUj+jAkY/SgRgPzwSQD8sAFI/FQEuPy0AUj8K+0s/uxFmPx4HOj8s/2s/owJGPywAUj8K+0s/SgRgPx4HOj8sAFI/fw40P8D1az80IPA+ogtgP9b9vz7lAkw/Gf3XPuYEZj/aAOQ+5QJMPzIg8D7mBGY/0fKzPuUCTD/aAOQ+ogtgP4wQzD7mBGY/jBDMPuYEZj8Z/dc+5QJMP9oA5D7mBGY/1v2/PuYEZj/V/b8+5gRmPzIg8D6iC2A/Gf3XPuUCTD/aAOQ+5gRmP9Hysz7mBGY/MiDwPvj9WT+MEMw+5QJMP9oA5D6hC2A/jBDMPuUCTD8Z/dc+5gRmP9b9vz7lAkw/2gDkPvj9WT9YEVY/Ce9DP48Abj+yAGY/2w1oPwrvQz9zKFw/Cu9DP3IoXD8K70M/jwBuPwryXz8/ClA/pvRrP9sNaD+zAGY/JwNiPwrvQz8nA2I/Cu9DP1gRVj+m9Gs/2w1oPwvyXz+PAG4/tABmP1gRVj+m9Gs/2w1oP6b0az9zaFw/pvRrP48Abj+m9Gs/cmhcP6b0az/bDWg/tABmPz0KUD8J70M/J0NiP6b0az8nQ2I/pvRrP9sNaD+m9Gs/WBFWPwnvQz/8BAw/1xJEP3r2KT+KBGY/8AIePxv9az+tChg/2BJEP2kFEj/XEkQ/evYpP1QGYD+tChg/2BJEPzP7Iz+KBGY/MfsjPxv9az/wAh4/2BJEP2kFEj/YEkQ/MfsjP1QGYD8x+yM/Gv1rP/0EDD8b/Ws/8AIeP9cSRD+tChg/G/1rPzH7Iz+KBGY/aQUSPxv9az969ik/G/1rP60KGD8b/Ws/MfsjP9gSRD/wAh4/G/1rP3r2KT+KBGY/aQUSPxv9az8WAS4/LQBSP6MCRj8sAFI/owJGP7sRZj8eBzo/LQBSP38OND/A9lE/owJGPyz/az8eBzo/LABSPzwSQD8sAFI/CvtLP7sRZj88EkA/LABSP38OND/A9lE/CvtLPyz/az8K+0s/SgRgPxUBLj8s/2s/owJGPyz/az8K+0s/uxFmPx4HOj8s/2s/fw40P8D1az+jAkY/SgRgPx4HOj8s/2s/PBJAPyz/az+jAkY/uhFmPzwSQD8s/2s/gA40P8D1az8yIPA+ogtgP9b9vz7mBGY/Gf3XPuYEZj8Z/dc+5gRmPzIg8D7mBGY/jBDMPuYEZj/aAOQ+ogtgP9Hysz7lAkw/jBDMPuYEZj/aAOQ+5gRmP9oA5D7mBGY/1v2/PuUCTD/W/b8+5QJMP9oA5D74/Vk/Gf3XPuUCTD8Z/dc+5QJMP4wQzD7lAkw/2gDkPqELYD/R8rM+5gRmPzIg8D74/Vk/jBDMPuUCTD/aAOQ+5QJMP9b9vz7mBGY/MiDwPqILYD9YEVY/pvRrP40Abj+yAGY/JwNiPwnvQz8nA2I/Cu9DPz8KUD+m9Gs/jQBuPwryXz9YEVY/pvRrP9sNaD+zAGY/cyhcPwnvQz/bDWg/Cu9DP3NoXD+m9Gs/2w1oPwryXz+NAG4/swBmP1gRVj8J70M/J0NiP6b0az8nQ2I/pvRrP40Abj+m9Gs/PQpQPwnvQz/bDWg/tABmP1gRVj8K70M/c2hcP6b0az/bDWg/pvRrP9sNaD+m9Gs/cyhcPwrvQz+tChg/G/1rP3z2KT+KBGY/M/sjP9cSRD+uChg/2BJEP2kFEj8a/Ws/fPYpP1QGYD9pBRI/2BJEPzP7Iz+JBGY/8AIeP9cSRD/wAh4/2BJEP/0EDD/YEkQ/M/sjP1QGYD8z+yM/Gv1rP60KGD/XEkQ/M/sjPxv9az+tChg/G/1rPzP7Iz+KBGY/aQUSP9cSRD989ik/G/1rP2kFEj8b/Ws/8AIePxr9az/wAh4/G/1rP3z2KT+KBGY//AQMPxv9az+jAkY/KwBSP38OND/A9Ws/CvtLP7sRZj8eBzo/LABSPxYBLj8s/2s/CvtLP0oEYD8eBzo/LABSPzwSQD8rAFI/owJGP7sRZj9/DjQ/wPZRPzwSQD8rAFI/owJGP0oEYD+jAkY/LP9rP6MCRj8s/2s/fw40P8D2UT+jAkY/uxFmPx4HOj8s/2s/FQEuPy0AUj8K+0s/LP9rPx4HOj8s/2s/PBJAPyz/az8K+0s/uxFmP4AOND/A9Ws/PBJAPyz/az8yIPA++f1ZP9b9vz7lAkw/G/3XPuYEZj/aAOQ+5QJMPzIg8D6iC2A/0fKzPuUCTD/aAOQ++P1ZP4wQzD7mBGY/jBDMPuYEZj8b/dc+5QJMP9oA5D6iC2A/1v2/PuYEZj/V/b8+5gRmPzIg8D7mBGY/G/3XPuUCTD/aAOQ+5gRmP9Hysz7mBGY/MiDwPqILYD+MEMw+5QJMP9oA5D7mBGY/jBDMPuUCTD8b/dc+5gRmP9b9vz7lAkw/2gDkPqILYD/bDWg/CvJfP1gRVj8J70M/2g1oPwnvQz9yKFw/Cu9DP9sNaD+yAGY/cihcPwnvQz8/ClA/pvRrP40Abj8K8l8/JwNiPwnvQz8nA2I/Cu9DP1gRVj+m9Gs/jQBuP7QAZj+NAG4/tABmP1gRVj+m9Gs/2w1oP6b0az9yaFw/pvRrP40Abj+m9Gs/cWhcP6b0az89ClA/Cu9DP9sNaD+0AGY/J0NiP6b0az8nQ2I/pvRrP1gRVj8K70M/2w1oP6b0az8BAA4AFAABABQABwAKAAYAEwAKABMAFwAVABIADAAVAAwADwAQAAMACQAQAAkAFgAFAAIACAAFAAgACwARAA0AAAARAAAABABMAFIALABMACwAHwAiAB4AKwAiACsALwBIAFAAJABIACQAJwBLAFUAIQBLACEALgBWAE4AIABWACAAIwApACUAGAApABgAHAA3AEIAPAA3ADwAMQA9AD8ANAA9ADQAMgBGADsANQBGADUAQAAwADMAOQAwADkANgBEAEcAQQBEAEEAPgA4ADoARQA4AEUAQwAdABoATwAdAE8AVwAoABsAVAAoAFQASgAtACoAUQAtAFEASQAZACYAUwAZAFMATQBYAFsAYQBYAGEAXgBfAGIAbQBfAG0AagBsAG8AaQBsAGkAZgBlAGgAXQBlAF0AWgBgAGsAZABgAGQAWQBuAGMAXABuAFwAZwBwAHMAeQBwAHkAdgB4AHoAhQB4AIUAgwCEAIcAgQCEAIEAfgB9AH8AdAB9AHQAcgB3AIIAfAB3AHwAcQCGAHsAdQCGAHUAgACIAIsAkQCIAJEAjgCQAJIAnQCQAJ0AmwCcAJ8AmQCcAJkAlgCVAJcAjACVAIwAigCPAJoAlACPAJQAiQCeAJMAjQCeAI0AmACiAKgAqwCiAKsApQCnALQAtwCnALcAqgCyAKwArwCyAK8AtQCtAKAAowCtAKMAsACmAKEArgCmAK4AswC2ALEApAC2AKQAqQC6AMAAwwC6AMMAvQC/AMwAzgC/AM4AwQDKAMQAxwDKAMcAzQDGALkAuwDGALsAyAC+ALgAxQC+AMUAywDPAMkAvADPALwAwgDSANgA2wDSANsA1QDXAOQA5gDXAOYA2QDiANwA3wDiAN8A5QDeANEA0wDeANMA4ADWANAA3QDWAN0A4wDnAOEA1ADnANQA2gDpAOsA8QDpAPEA7wDwAPIA/QDwAP0A+wD8AP4A+AD8APgA9gD1APcA7AD1AOwA6gDuAPoA9ADuAPQA6AD/APMA7QD/AO0A+QAAAQMBCQEAAQkBBgEHAQoBFQEHARUBEgEUARcBEQEUAREBDgENARABBQENAQUBAgEIARMBDAEIAQwBAQEWAQsBBAEWAQQBDwEpAR0BIwEpASMBLwEoASYBGQEoARkBGwEtASsBJQEtASUBJwEhAR8BLAEhASwBLgEYASQBKgEYASoBHgEcARoBIAEcASABIgExATMBOgExAToBOAE3ATkBRQE3AUUBQwFEAUYBPwFEAT8BPQE+AUABNAE+ATQBMgE2AUIBPAE2ATwBMAFHATsBNQFHATUBQQFJAUsBUQFJAVEBTwFQAVIBXQFQAV0BWwFcAV4BWAFcAVgBVgFVAVcBTAFVAUwBSgFOAVoBVAFOAVQBSAFfAVMBTQFfAU0BWQFgAWMBaQFgAWkBZgFoAWoBdQFoAXUBcwF0AXcBcQF0AXEBbgFtAW8BZAFtAWQBYgFnAXIBbAFnAWwBYQF2AWsBZQF2AWUBcAGJAX0BgwGJAYMBjwGIAYYBeQGIAXkBewGNAYsBhQGNAYUBhwGBAX8BjAGBAYwBjgF4AYQBigF4AYoBfgF8AXoBgAF8AYABggGRAZMBmQGRAZkBlwGYAZoBpQGYAaUBowGkAaYBoAGkAaABngGdAZ8BlAGdAZQBkgGWAaIBnAGWAZwBkAGnAZsBlQGnAZUBoQGpAasBsQGpAbEBrwGwAbIBvQGwAb0BuwG8Ab4BuAG8AbgBtgG1AbcBrAG1AawBqgGuAboBtAGuAbQBqAG/AbMBrQG/Aa0BuQHAAcMByQHAAckBxgHIAcoB1QHIAdUB0wHUAdcB0QHUAdEBzgHNAc8BxAHNAcQBwgHHAdIBzAHHAcwBwQHWAcsBxQHWAcUB0AHpAd0B4wHpAeMB7wHoAeYB2QHoAdkB2wHtAesB5QHtAeUB5wHhAd8B7AHhAewB7gHYAeQB6gHYAeoB3gHcAdoB4AHcAeAB4gHxAfMB+QHxAfkB9wH4AfoBBQL4AQUCAwIEAgYCAAIEAgAC/gH9Af8B9AH9AfQB8gH2AQIC/AH2AfwB8AEHAvsB9QEHAvUBAQIJAgsCEQIJAhECDwIQAhICHQIQAh0CGwIcAh4CGAIcAhgCFgIVAhcCDAIVAgwCCgIOAhoCFAIOAhQCCAIfAhMCDQIfAg0CGQIgAiMCKQIgAikCJgIoAisCNgIoAjYCMwI0AjcCMQI0AjECLgIsAi8CJAIsAiQCIQInAjICLQInAi0CIgI1AioCJQI1AiUCMAJJAj0CQwJJAkMCTwJIAkYCOQJIAjkCOwJNAksCRQJNAkUCRwJBAj8CTAJBAkwCTgI4AkQCSgI4AkoCPgI8AjoCQAI8AkACQgJSAlQCWQJSAlkCVwJYAloCZgJYAmYCZAJjAmUCYAJjAmACXgJdAl8CUwJdAlMCUQJWAmICXAJWAlwCUAJnAlsCVQJnAlUCYQJpAm8CcwJpAnMCbQJuAnsCfwJuAn8CcgJ6AnQCeAJ6AngCfgJ1AmgCbAJ1AmwCeQJwAmoCdgJwAnYCfAJ9AncCawJ9AmsCcQKCAogCiwKCAosChQKHApQClwKHApcCigKSAowCjwKSAo8ClQKNAoACgwKNAoMCkAKGAoECjgKGAo4CkwKWApEChAKWAoQCiQKnAq0CoQKnAqECmwKoAp0CmQKoApkCpAKvAqkCpQKvAqUCqwKjAq4CqgKjAqoCnwKaAqACrAKaAqwCpgKcAqICngKcAp4CmAKxArYCugKxAroCtQK3AsMCxwK3AscCuwLCAr0CwQLCAsECxgK8ArACtAK8ArQCwAK4ArICvgK4Ar4CxALFAr8CswLFArMCuQLJAs8C0wLJAtMCzQLOAtsC3wLOAt8C0gLaAtQC2ALaAtgC3gLVAsgCzALVAswC2QLQAsoC1gLQAtYC3ALdAtcCywLdAssC0QLiAugC6wLiAusC5QLmAvMC9wLmAvcC6gLyAuwC7wLyAu8C9QLtAuAC5ALtAuQC8QLnAuEC7gLnAu4C9AL2AvAC4wL2AuMC6QIHAw0DAQMHAwED+wIIA/0C+QIIA/kCBAMPAwkDBQMPAwUDCwMDAw4DCgMDAwoD/wL6AgADDAP6AgwDBgP8AgID/gL8Av4C+AIRAxcDGwMRAxsDFQMWAyMDJwMWAycDGgMiAxwDIAMiAyADJgMdAxADFAMdAxQDIQMYAxIDHgMYAx4DJAMlAx8DEwMlAxMDGQMpAy8DMwMpAzMDLQMuAzsDPwMuAz8DMgM6AzQDOAM6AzgDPgM1AygDLAM1AywDOQMwAyoDNgMwAzYDPAM9AzcDKwM9AysDMQNCA0gDSwNCA0sDRQNGA1MDVwNGA1cDSgNSA0wDTwNSA08DVQNNA0ADRANNA0QDUQNHA0EDTgNHA04DVANWA1ADQwNWA0MDSQNnA20DYQNnA2EDWwNoA10DWQNoA1kDZANvA2kDZQNvA2UDawNjA24DagNjA2oDXwNaA2ADbANaA2wDZgNcA2IDXgNcA14DWANxA3cDewNxA3sDdQN2A4MDhwN2A4cDegOCA3wDgAOCA4ADhgN9A3ADdAN9A3QDgQN4A3IDfgN4A34DhAOFA38DcwOFA3MDeQOJA48DkwOJA5MDjQOOA5sDnwOOA58DkgOaA5QDmAOaA5gDngOVA4gDjAOVA4wDmQOQA4oDlgOQA5YDnAOdA5cDiwOdA4sDkQOiA6gDqwOiA6sDpQOmA7MDtgOmA7YDqQOyA6wDrwOyA68DtQOuA6EDpAOuA6QDsQOnA6ADrQOnA60DtAO3A7ADowO3A6MDqgPHA80DwQPHA8EDuwPIA70DuQPIA7kDxAPPA8kDxQPPA8UDywPDA84DygPDA8oDvwO6A8ADzAO6A8wDxgO8A8IDvgO8A74DuAPQA9cD2wPQA9sD1APWA+ID5gPWA+YD2gPjA9wD4APjA+AD5wPdA9ED1QPdA9UD4QPYA9ID3gPYA94D5APlA98D0wPlA9MD2QM="}]} diff --git a/games/devtest/mods/gltf/models/gltf_triangle_with_vertex_stride.gltf b/games/devtest/mods/gltf/models/gltf_triangle_with_vertex_stride.gltf new file mode 100644 index 000000000..feddfbb02 --- /dev/null +++ b/games/devtest/mods/gltf/models/gltf_triangle_with_vertex_stride.gltf @@ -0,0 +1 @@ +{"scene":0,"scenes":[{"nodes":[0]}],"nodes":[{"mesh":0}],"meshes":[{"primitives":[{"attributes":{"POSITION":1},"indices":0}]}],"buffers":[{"uri":"data:application/octet-stream;base64,AAABAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAA=","byteLength":80}],"bufferViews":[{"buffer":0,"byteOffset":0,"byteLength":6,"target":34963},{"buffer":0,"byteOffset":8,"byteLength":72,"byteStride":24,"target":34962}],"accessors":[{"bufferView":0,"byteOffset":0,"componentType":5123,"count":3,"type":"SCALAR","max":[2],"min":[0]},{"bufferView":1,"byteOffset":0,"componentType":5126,"count":3,"type":"VEC3","max":[1,1,0],"min":[0,0,0]}],"asset":{"version":"2.0"}} diff --git a/games/devtest/mods/gltf/models/gltf_triangle_without_indices.gltf b/games/devtest/mods/gltf/models/gltf_triangle_without_indices.gltf new file mode 100644 index 000000000..e91cc0e5a --- /dev/null +++ b/games/devtest/mods/gltf/models/gltf_triangle_without_indices.gltf @@ -0,0 +1 @@ +{"scene":0,"scenes":[{"nodes":[0]}],"nodes":[{"mesh":0}],"meshes":[{"primitives":[{"attributes":{"POSITION":0}}]}],"buffers":[{"uri":"data:application/octet-stream;base64,AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAA","byteLength":36}],"bufferViews":[{"buffer":0,"byteOffset":0,"byteLength":36,"target":34962}],"accessors":[{"bufferView":0,"byteOffset":0,"componentType":5126,"count":3,"type":"VEC3","max":[1,1,0],"min":[0,0,0]}],"asset":{"version":"2.0"}} diff --git a/games/devtest/mods/gltf/textures/gltf_cube.png b/games/devtest/mods/gltf/textures/gltf_cube.png new file mode 100644 index 000000000..1d0191085 Binary files /dev/null and b/games/devtest/mods/gltf/textures/gltf_cube.png differ diff --git a/games/devtest/mods/gltf/textures/gltf_frog.png b/games/devtest/mods/gltf/textures/gltf_frog.png new file mode 100644 index 000000000..552ae3649 Binary files /dev/null and b/games/devtest/mods/gltf/textures/gltf_frog.png differ diff --git a/games/devtest/mods/gltf/textures/gltf_snow_man.png b/games/devtest/mods/gltf/textures/gltf_snow_man.png new file mode 100644 index 000000000..7f2784358 Binary files /dev/null and b/games/devtest/mods/gltf/textures/gltf_snow_man.png differ diff --git a/games/devtest/mods/gltf/textures/gltf_spider.png b/games/devtest/mods/gltf/textures/gltf_spider.png new file mode 100644 index 000000000..1e3d3ae8c Binary files /dev/null and b/games/devtest/mods/gltf/textures/gltf_spider.png differ diff --git a/games/devtest/mods/testentities/init.lua b/games/devtest/mods/testentities/init.lua index 9ab54f5ab..659febe20 100644 --- a/games/devtest/mods/testentities/init.lua +++ b/games/devtest/mods/testentities/init.lua @@ -1,4 +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") diff --git a/games/devtest/mods/testentities/models/LICENSE.txt b/games/devtest/mods/testentities/models/LICENSE.txt new file mode 100644 index 000000000..4317d68d3 --- /dev/null +++ b/games/devtest/mods/testentities/models/LICENSE.txt @@ -0,0 +1,7 @@ +Original model by MirceaKitsune (CC BY-SA 3.0). +Various alterations and fixes by kilbith, sofar, xunto, Rogier-5, TeTpaAka, Desour, +stujones11, An0n3m0us (CC BY-SA 3.0): + testentities_sam.b3d + +Jordach (CC BY-SA 3.0): + testentities_sam.png diff --git a/games/devtest/mods/testentities/models/testentities_sam.b3d b/games/devtest/mods/testentities/models/testentities_sam.b3d new file mode 100644 index 000000000..3e0827e40 Binary files /dev/null and b/games/devtest/mods/testentities/models/testentities_sam.b3d differ diff --git a/games/devtest/mods/testentities/models/testentities_sam.png b/games/devtest/mods/testentities/models/testentities_sam.png new file mode 100644 index 000000000..05021781e Binary files /dev/null and b/games/devtest/mods/testentities/models/testentities_sam.png differ diff --git a/games/devtest/mods/testentities/observers.lua b/games/devtest/mods/testentities/observers.lua new file mode 100644 index 000000000..6dbbeba42 --- /dev/null +++ b/games/devtest/mods/testentities/observers.lua @@ -0,0 +1,37 @@ +local function player_names_excluding(exclude_player_name) + local player_names = {} + for _, player in ipairs(minetest.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", { + initial_properties = { + visual = "sprite", + textures = { "testentities_sprite.png" }, + static_save = false, + infotext = "Punch to set observers to anyone but you" + }, + on_activate = function(self) + self.object:set_armor_groups({punch_operable = 1}) + assert(self.object:get_observers() == nil) + -- Using a value of `false` in the table should error. + assert(not pcall(self.object, self.object.set_observers, self.object, {test = false})) + end, + on_punch = function(self, puncher) + local puncher_name = puncher:get_player_name() + local observers = player_names_excluding(puncher_name) + self.object:set_observers(observers) + local got_observers = self.object:get_observers() + for name in pairs(observers) do + assert(got_observers[name]) + end + for name in pairs(got_observers) do + assert(observers[name]) + end + self.object:set_properties({infotext = "Excluding " .. puncher_name}) + return true + end +}) diff --git a/games/devtest/mods/testentities/visuals.lua b/games/devtest/mods/testentities/visuals.lua index e382ec44c..8e26a883e 100644 --- a/games/devtest/mods/testentities/visuals.lua +++ b/games/devtest/mods/testentities/visuals.lua @@ -66,6 +66,19 @@ minetest.register_entity("testentities:mesh_unshaded", { }, }) +minetest.register_entity("testentities:sam", { + initial_properties = { + visual = "mesh", + mesh = "testentities_sam.b3d", + textures = { + "testentities_sam.png" + }, + }, + on_activate = function(self) + self.object:set_animation({x = 0, y = 219}, 30, 0, true) + end, +}) + -- Advanced visual tests -- An entity for testing animated and yaw-modulated sprites diff --git a/games/devtest/mods/testformspec/formspec.lua b/games/devtest/mods/testformspec/formspec.lua index c2074e6e0..8d0b759f5 100644 --- a/games/devtest/mods/testformspec/formspec.lua +++ b/games/devtest/mods/testformspec/formspec.lua @@ -64,6 +64,41 @@ local inv_style_fs = [[ list[current_player;main;.5,7;8,4] ]] +-- Some textures from textures/base/pack and Devtest, with many different sizes +-- and aspect ratios. +local image_column = "image,0=logo.png,1=crack_anylength.png^[invert:rgb,2=checkbox_16.png," .. + "3=checkbox_32.png,4=checkbox_64.png,5=default_lava.png," .. + "6=progress_bar.png,7=progress_bar_bg.png" +local words = { + "esciunt", "repudiandae", "repellat", "voluptatem", "autem", "vitae", "et", + "minima", "quasi", "facere", "nihil", "ea", "nemo", "rem", "non", "eos", + "laudantium", "eveniet", "veritatis", +} + +local reseed = math.random(2^31-1) +math.randomseed(1337) + +local table_content = {} +for i = 1, 100 do + table.insert(table_content, words[math.random(#words)]) + table.insert(table_content, words[math.random(#words)]) + table.insert(table_content, words[math.random(#words)]) + table.insert(table_content, math.random(0, 7)) + table.insert(table_content, math.random(0, 7)) + table.insert(table_content, math.random(0, 7)) + table.insert(table_content, words[math.random(#words)]) +end + +math.randomseed(reseed) + +local table_fs = table.concat({ + "tablecolumns[text,align=left;text,align=right;text,align=center;", + image_column, ",align=left;", + image_column, ",align=right;", + image_column, ",align=center;text,align=right]", + "table[0,0;17,12;the_table;", table.concat(table_content, ","), ";1]" +}) + local hypertext_basic = [[A hypertext element Normal test This is a normal text. @@ -350,6 +385,10 @@ local pages = { "label[11,0.5;Noclip]" .. "container[11.5,1]" .. clip_fs:gsub("%%c", "true") .. "container_end[]", + -- Table + "size[18,13]real_coordinates[true]" .. + "container[0.5,0.5]" .. table_fs.. "container_end[]", + -- Hypertext "size[12,13]real_coordinates[true]" .. "container[0.5,0.5]" .. hypertext_fs .. "container_end[]", @@ -477,7 +516,7 @@ local function show_test_formspec(pname) page = page() end - local fs = page .. "tabheader[0,0;11,0.65;maintabs;Real Coord,Styles,Noclip,Hypertext,Tabs,Invs,Window,Anim,Model,ScrollC,Sound,Background,Unsized;" .. page_id .. ";false;false]" + 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) end diff --git a/games/devtest/mods/testfullscreenfs/init.lua b/games/devtest/mods/testfullscreenfs/init.lua index e1af3ae33..7abc7f817 100644 --- a/games/devtest/mods/testfullscreenfs/init.lua +++ b/games/devtest/mods/testfullscreenfs/init.lua @@ -1,18 +1,30 @@ -local function show_fullscreen_fs(name) - local window = minetest.get_player_window_information(name) - if not window then - return false, "Unable to get window info" - end +local function window_info_equal(a, b) + return + -- size + a.size.x == b.size.x and a.size.y == b.size.y and + -- real_gui_scaling, real_hud_scaling + a.real_gui_scaling == b.real_gui_scaling and + a.real_hud_scaling == b.real_hud_scaling and + -- max_formspec_size + a.max_formspec_size.x == b.max_formspec_size.x and + a.max_formspec_size.y == b.max_formspec_size.y and + -- touch_controls + a.touch_controls == b.touch_controls +end +local last_window_info = {} + +local function show_fullscreen_fs(name, window) print(dump(window)) - local size = { x = window.max_formspec_size.x * 1.1, y = window.max_formspec_size.y * 1.1 } + local size = window.max_formspec_size local touch_text = window.touch_controls and "Touch controls enabled" or "Touch controls disabled" local fs = { "formspec_version[4]", ("size[%f,%f]"):format(size.x, size.y), - "padding[-0.01,-0.01]", + "padding[0,0]", + "bgcolor[;true]", ("button[%f,%f;1,1;%s;%s]"):format(0, 0, "tl", "TL"), ("button[%f,%f;1,1;%s;%s]"):format(size.x - 1, 0, "tr", "TR"), ("button[%f,%f;1,1;%s;%s]"):format(size.x - 1, size.y - 1, "br", "BR"), @@ -23,10 +35,37 @@ local function show_fullscreen_fs(name) } minetest.show_formspec(name, "testfullscreenfs:fs", table.concat(fs)) - return true, ("Calculated size of %f, %f"):format(size.x, size.y) + minetest.chat_send_player(name, ("Calculated size of %f, %f"):format(size.x, size.y)) + last_window_info[name] = window end - minetest.register_chatcommand("testfullscreenfs", { - func = show_fullscreen_fs, + func = function(name) + local window = minetest.get_player_window_information(name) + if not window then + return false, "Unable to get window info" + end + + show_fullscreen_fs(name, window) + return true + end, }) + +minetest.register_globalstep(function() + for name, last_window in pairs(last_window_info) do + local window = minetest.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) + if formname == "testfullscreenfs:fs" and fields.quit then + last_window_info[player:get_player_name()] = nil + end +end) + +minetest.register_on_leaveplayer(function(player) + last_window_info[player:get_player_name()] = nil +end) diff --git a/games/devtest/mods/testhud/init.lua b/games/devtest/mods/testhud/init.lua index 9afed8fc7..1788ad77e 100644 --- a/games/devtest/mods/testhud/init.lua +++ b/games/devtest/mods/testhud/init.lua @@ -208,9 +208,75 @@ minetest.register_chatcommand("zoomfov", { end, }) +-- Hotbars + +local hud_hotbar_defs = { + { + type = "hotbar", + position = {x=0.2, y=0.5}, + direction = 0, + alignment = {x=1, y=-1}, + }, + { + type = "hotbar", + position = {x=0.2, y=0.5}, + direction = 2, + alignment = {x=1, y=1}, + }, + { + type = "hotbar", + position = {x=0.7, y=0.5}, + direction = 0, + offset = {x=140, y=20}, + alignment = {x=-1, y=-1}, + }, + { + type = "hotbar", + position = {x=0.7, y=0.5}, + direction = 2, + offset = {x=140, y=20}, + alignment = {x=-1, y=1}, + }, +} + + +local player_hud_hotbars= {} +minetest.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) + if not player then + return false, "No player." + end + + local id_table = player_hud_hotbars[name] + if not id_table then + id_table = {} + player_hud_hotbars[name] = id_table + end + + if params == "remove" then + for _, id in ipairs(id_table) do + player:hud_remove(id) + end + return true, "Hotbars removed." + end + + -- params == "add" or default + for _, def in ipairs(hud_hotbar_defs) do + table.insert(id_table, player:hud_add(def)) + end + return true, #hud_hotbar_defs .." Hotbars 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 end) minetest.register_chatcommand("hudprint", { @@ -232,3 +298,26 @@ minetest.register_chatcommand("hudprint", { return true, s end }) + +local hud_flags = {"hotbar", "healthbar", "crosshair", "wielditem", "breathbar", + "minimap", "minimap_radar", "basic_debug", "chat"} + +minetest.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) + if not player then + return false, "No player." + end + + local flags = player:hud_get_flags() + if flags[params] == nil then + return false, "Unknown hud flag." + end + + flags[params] = not flags[params] + player:hud_set_flags(flags) + return true, "Flag \"".. params .."\" set to ".. tostring(flags[params]) .. "." + end +}) diff --git a/games/devtest/mods/testnodes/textures.lua b/games/devtest/mods/testnodes/textures.lua index 86bc3e343..96f291d6a 100644 --- a/games/devtest/mods/testnodes/textures.lua +++ b/games/devtest/mods/testnodes/textures.lua @@ -89,10 +89,12 @@ for a=1,#alphas do end minetest.register_node("testnodes:alpha_compositing", { - description = S("Alpha Compositing Test Node") .. "\n" .. + description = S("Texture Overlay Test Node") .. "\n" .. S("A regular grid should be visible where each cell contains two " .. - "texels with the same colour.") .. "\n" .. - S("Alpha compositing is gamma-incorrect for backwards compatibility."), + "texels with the same color.") .. "\n" .. + S("Texture overlay is gamma-incorrect, " .. + "and in general it does not do alpha compositing, " .. + "both for backwards compatibility."), drawtype = "glasslike", paramtype = "light", tiles = {"testnodes_alpha_compositing_bottom.png^" .. diff --git a/games/devtest/mods/testnodes/textures/testnodes_alpha_compositing_bottom.png b/games/devtest/mods/testnodes/textures/testnodes_alpha_compositing_bottom.png index 83447e423..40d9f53de 100644 Binary files a/games/devtest/mods/testnodes/textures/testnodes_alpha_compositing_bottom.png and b/games/devtest/mods/testnodes/textures/testnodes_alpha_compositing_bottom.png differ diff --git a/games/devtest/mods/unittests/async_env.lua b/games/devtest/mods/unittests/async_env.lua index d7a714941..b00deb3b6 100644 --- a/games/devtest/mods/unittests/async_env.lua +++ b/games/devtest/mods/unittests/async_env.lua @@ -167,18 +167,18 @@ local function test_userdata_passing2(cb, _, pos) end unittests.register("test_userdata_passing2", test_userdata_passing2, {map=true, async=true}) -local function test_async_metatable_override() - assert(pcall(core.register_async_metatable, "__builtin:vector", vector.metatable), +local function test_portable_metatable_override() + assert(pcall(core.register_portable_metatable, "__builtin:vector", vector.metatable), "Metatable name aliasing throws an error when it should be allowed") - assert(not pcall(core.register_async_metatable, "__builtin:vector", {}), + assert(not pcall(core.register_portable_metatable, "__builtin:vector", {}), "Illegal metatable overriding allowed") end -unittests.register("test_async_metatable_override", test_async_metatable_override) +unittests.register("test_portable_metatable_override", test_portable_metatable_override) -local function test_async_metatable_registration(cb) +local function test_portable_metatable_registration(cb) local custom_metatable = {} - core.register_async_metatable("unittests:custom_metatable", custom_metatable) + core.register_portable_metatable("unittests:custom_metatable", custom_metatable) core.handle_async(function(x) -- unittests.custom_metatable is registered in inside_async_env.lua @@ -193,7 +193,7 @@ local function test_async_metatable_registration(cb) cb() end, setmetatable({}, custom_metatable)) end -unittests.register("test_async_metatable_registration", test_async_metatable_registration, {async=true}) +unittests.register("test_portable_metatable_registration", test_portable_metatable_registration, {async=true}) local function test_vector_preserve(cb) local vec = vector.new(1, 2, 3) diff --git a/games/devtest/mods/unittests/color.lua b/games/devtest/mods/unittests/color.lua new file mode 100644 index 000000000..86154445c --- /dev/null +++ b/games/devtest/mods/unittests/color.lua @@ -0,0 +1,17 @@ +local function assert_colors_equal(c1, c2) + if type(c1) == "table" and type(c2) == "table" then + assert(c1.r == c2.r and c1.g == c2.g and c1.b == c2.b and c1.a == c2.a) + else + assert(c1 == c2) + end +end + +local function test_color_conversion() + assert_colors_equal(core.colorspec_to_table("#fff"), {r = 255, g = 255, b = 255, a = 255}) + assert_colors_equal(core.colorspec_to_table(0xFF00FF00), {r = 0, g = 255, b = 0, a = 255}) + assert_colors_equal(core.colorspec_to_table("#00000000"), {r = 0, g = 0, b = 0, a = 0}) + assert_colors_equal(core.colorspec_to_table("green"), {r = 0, g = 128, b = 0, a = 255}) + assert_colors_equal(core.colorspec_to_table("gren"), nil) +end + +unittests.register("test_color_conversion", test_color_conversion) diff --git a/games/devtest/mods/unittests/entity.lua b/games/devtest/mods/unittests/entity.lua index 565dd6adf..af91a2a94 100644 --- a/games/devtest/mods/unittests/entity.lua +++ b/games/devtest/mods/unittests/entity.lua @@ -40,12 +40,36 @@ core.register_entity("unittests:callbacks", { end, on_attach_child = function(self, child) insert_log("on_attach_child(%s)", objref_str(self, child)) + assert(child:get_attach() == self.object) + local ok = false + for _, obj in ipairs(self.object:get_children()) do + if obj == child then + ok = true + end + end + assert(ok, "Child not found in get_children") end, on_detach_child = function(self, child) insert_log("on_detach_child(%s)", objref_str(self, child)) + assert(child:get_attach() == nil) + local ok = true + for _, obj in ipairs(self.object:get_children()) do + if obj == child then + ok = false + end + end + assert(ok, "Former child found in get_children") end, on_detach = function(self, parent) insert_log("on_detach(%s)", objref_str(self, parent)) + assert(self.object:get_attach() == nil) + local ok = true + for _, obj in ipairs(parent:get_children()) do + if obj == self.object then + ok = false + end + end + assert(ok, "Former child found in get_children") end, get_staticdata = function(self) assert(false) @@ -71,13 +95,13 @@ local function test_entity_lifecycle(_, pos) -- with binary in staticdata local obj = core.add_entity(pos, "unittests:callbacks", "abc\000def") + assert(obj and obj:is_valid()) check_log({"on_activate(7)"}) obj:set_hp(0) check_log({"on_death(nil)", "on_deactivate(true)"}) - -- objectref must be invalid now - assert(obj:get_velocity() == nil) + assert(not obj:is_valid()) end unittests.register("test_entity_lifecycle", test_entity_lifecycle, {map=true}) @@ -118,15 +142,95 @@ local function test_entity_attach(player, pos) -- attach player to entity player:set_attach(obj) check_log({"on_attach_child(player)"}) + assert(player:get_attach() == obj) player:set_detach() check_log({"on_detach_child(player)"}) + assert(player:get_attach() == nil) -- attach entity to player obj:set_attach(player) check_log({}) + assert(obj:get_attach() == player) obj:set_detach() check_log({"on_detach(player)"}) + assert(obj:get_attach() == nil) obj:remove() end unittests.register("test_entity_attach", test_entity_attach, {player=true, map=true}) + +--------- + +core.register_entity("unittests:dummy", { + initial_properties = { + hp_max = 1, + visual = "upright_sprite", + textures = { "no_texture.png" }, + static_save = false, + }, +}) + +local function test_entity_raycast(_, pos) + local obj1 = core.add_entity(pos, "unittests:dummy") + local obj2 = core.add_entity(pos:offset(1, 0, 0), "unittests:dummy") + local raycast = core.raycast(pos:offset(-1, 0, 0), pos:offset(2, 0, 0), true, false) + for pt in raycast do + if pt.type == "object" then + assert(pt.ref == obj1) + obj1:remove() + obj2:remove() + obj1 = nil -- object should be hit exactly one + end + end + assert(obj1 == nil) +end +unittests.register("test_entity_raycast", test_entity_raycast, {map=true}) + +local function test_object_iterator(pos, make_iterator) + local obj1 = core.add_entity(pos, "unittests:dummy") + local obj2 = core.add_entity(pos, "unittests:dummy") + assert(obj1 and obj2) + local found = false + -- As soon as we find one of the objects, we remove both, invalidating the other. + for obj in make_iterator() do + assert(obj:is_valid()) + if obj == obj1 or obj == obj2 then + obj1:remove() + obj2:remove() + found = true + end + end + assert(found) +end + +unittests.register("test_objects_inside_radius", function(_, pos) + test_object_iterator(pos, function() + return core.objects_inside_radius(pos, 1) + end) +end, {map=true}) + +unittests.register("test_objects_in_area", function(_, pos) + test_object_iterator(pos, function() + return core.objects_in_area(pos:offset(-1, -1, -1), pos:offset(1, 1, 1)) + end) +end, {map=true}) + +-- Tests that bone rotation euler angles are preserved (see #14992) +local function test_get_bone_rot(_, pos) + local obj = core.add_entity(pos, "unittests:dummy") + for _ = 1, 100 do + local function assert_similar(euler_angles) + local _, rot = obj:get_bone_position("bonename") + assert(euler_angles:distance(rot) < 1e-3) + local override = obj:get_bone_override("bonename") + assert(euler_angles:distance(override.rotation.vec:apply(math.deg)) < 1e-3) + end + local deg = 1e3 * vector.new(math.random(), math.random(), math.random()) + obj:set_bone_position("bonename", vector.zero(), deg) + assert_similar(deg) + local rad = 3 * math.pi * vector.new(math.random(), math.random(), math.random()) + obj:set_bone_override("bonename", {rotation = {vec = rad}}) + assert_similar(rad:apply(math.deg)) + end +end +unittests.register("test_get_bone_rot", test_get_bone_rot, {map=true}) diff --git a/games/devtest/mods/unittests/init.lua b/games/devtest/mods/unittests/init.lua index 47568d9fc..a967a986f 100644 --- a/games/devtest/mods/unittests/init.lua +++ b/games/devtest/mods/unittests/init.lua @@ -186,6 +186,8 @@ dofile(modpath .. "/metadata.lua") dofile(modpath .. "/raycast.lua") dofile(modpath .. "/inventory.lua") dofile(modpath .. "/load_time.lua") +dofile(modpath .. "/on_shutdown.lua") +dofile(modpath .. "/color.lua") -------------- diff --git a/games/devtest/mods/unittests/inside_async_env.lua b/games/devtest/mods/unittests/inside_async_env.lua index 5f97ec15d..fb610604d 100644 --- a/games/devtest/mods/unittests/inside_async_env.lua +++ b/games/devtest/mods/unittests/inside_async_env.lua @@ -3,7 +3,7 @@ unittests = {} core.log("info", "Hello World") unittests.custom_metatable = {} -core.register_async_metatable("unittests:custom_metatable", unittests.custom_metatable) +core.register_portable_metatable("unittests:custom_metatable", unittests.custom_metatable) local function do_tests() assert(core == minetest) diff --git a/games/devtest/mods/unittests/on_shutdown.lua b/games/devtest/mods/unittests/on_shutdown.lua new file mode 100644 index 000000000..6d5d88638 --- /dev/null +++ b/games/devtest/mods/unittests/on_shutdown.lua @@ -0,0 +1,22 @@ +-- Test whether players still exist on shutdown +local players = {} + +core.register_on_joinplayer(function(player) + players[player:get_player_name()] = true +end) + +core.register_on_leaveplayer(function(player) + local name = player:get_player_name(); + assert(players[name], "Unrecorded player join.") + players[name] = nil +end) + +core.register_on_shutdown(function() + for _, player in pairs(core.get_connected_players()) do + local name = player:get_player_name() + assert(players[name], "Unrecorded player join or left too early.") + players[name] = nil + end + + assert(not next(players), "Invalid connected players on shutdown.") +end) diff --git a/games/devtest/mods/unittests/player.lua b/games/devtest/mods/unittests/player.lua index 70b3b6cae..7650d5f57 100644 --- a/games/devtest/mods/unittests/player.lua +++ b/games/devtest/mods/unittests/player.lua @@ -2,7 +2,7 @@ -- HP Change Reasons -- local expect = nil -minetest.register_on_player_hpchange(function(player, hp, reason) +core.register_on_player_hpchange(function(player, hp_change, reason) if expect == nil then return end @@ -37,6 +37,48 @@ local function run_hpchangereason_tests(player) end unittests.register("test_hpchangereason", run_hpchangereason_tests, {player=true}) +-- +-- HP differences +-- + +local expected_diff = nil +core.register_on_player_hpchange(function(player, hp_change, reason) + if expected_diff then + assert(hp_change == expected_diff) + end +end) + +local function run_hp_difference_tests(player) + local old_hp = player:get_hp() + local old_hp_max = player:get_properties().hp_max + + expected_diff = nil + player:set_properties({hp_max = 30}) + player:set_hp(22) + + -- final HP value is clamped to >= 0 before difference calculation + expected_diff = -22 + player:set_hp(-3) + -- and actual final HP value is clamped to >= 0 too + assert(player:get_hp() == 0) + + expected_diff = 22 + player:set_hp(22) + assert(player:get_hp() == 22) + + -- final HP value is clamped to <= U16_MAX before difference calculation + expected_diff = 65535 - 22 + player:set_hp(1000000) + -- and actual final HP value is clamped to <= hp_max + assert(player:get_hp() == 30) + + expected_diff = nil + player:set_properties({hp_max = old_hp_max}) + player:set_hp(old_hp) + core.close_formspec(player:get_player_name(), "") -- hide death screen +end +unittests.register("test_hp_difference", run_hp_difference_tests, {player=true}) + -- -- Player meta -- @@ -84,3 +126,25 @@ local function run_player_add_pos_tests(player) end unittests.register("test_player_add_pos", run_player_add_pos_tests, {player=true}) +-- +-- Hotbar selection clamp +-- +local function run_player_hotbar_clamp_tests(player) + local inv = player:get_inventory() + local old_inv_size = inv:get_size("main") + local old_inv_list = inv:get_list("main") -- Avoid accidentally removing item + local old_bar_size = player:hud_get_hotbar_itemcount() + + inv:set_size("main", 5) + + player:hud_set_hotbar_itemcount(2) + assert(player:hud_get_hotbar_itemcount() == 2) + + player:hud_set_hotbar_itemcount(6) + assert(player:hud_get_hotbar_itemcount() == 5) + + inv:set_size("main", old_inv_size) + inv:set_list("main", old_inv_list) + player:hud_set_hotbar_itemcount(old_bar_size) +end +unittests.register("test_player_hotbar_clamp", run_player_hotbar_clamp_tests, {player=true}) diff --git a/irr/.github/workflows/build.yml b/irr/.github/workflows/build.yml deleted file mode 100644 index f31521bd2..000000000 --- a/irr/.github/workflows/build.yml +++ /dev/null @@ -1,310 +0,0 @@ -name: build - -# build on c/cpp changes or workflow changes -on: - - push - - pull_request - -jobs: - - linux-gl: - runs-on: ubuntu-20.04 - steps: - - uses: actions/checkout@v4 - - name: Install deps - run: | - sudo apt-get update - sudo apt-get install g++ cmake libxi-dev libgl1-mesa-dev libpng-dev libjpeg-dev zlib1g-dev -qyy - - - name: Build - run: | - cmake . -DUSE_SDL2=OFF - make VERBOSE=1 -j2 - - - name: Test - run: | - ctest --output-on-failure - - - name: Package - run: | - make DESTDIR=$PWD/_install install - tar -c -I "gzip -9" -f irrlicht-linux.tar.gz -C ./_install/usr/local . - - - uses: actions/upload-artifact@v4 - with: - name: irrlicht-linux - path: ./irrlicht-linux.tar.gz - - linux-gles: - # Xvfb test is broken on 20.04 for unknown reasons (not our bug) - runs-on: ubuntu-22.04 - steps: - - uses: actions/checkout@v4 - - name: Install deps - run: | - sudo apt-get update - sudo apt-get install g++ cmake libxi-dev libgles2-mesa-dev libpng-dev libjpeg-dev zlib1g-dev xvfb -qyy - - - name: Build - run: | - cmake . -DBUILD_EXAMPLES=1 -DUSE_SDL2=OFF -DENABLE_OPENGL=OFF -DENABLE_GLES2=ON - make -j2 - - - name: Test (headless) - run: | - cd bin/Linux - ./AutomatedTest null - - - name: Test (Xvfb) - run: | - cd bin/Linux - LIBGL_ALWAYS_SOFTWARE=true xvfb-run ./AutomatedTest ogles2 - - linux-sdl: - runs-on: ubuntu-20.04 - steps: - - uses: actions/checkout@v4 - - name: Install deps - run: | - sudo apt-get update - sudo apt-get install g++ cmake libsdl2-dev libpng-dev libjpeg-dev zlib1g-dev -qyy - - - name: Build - run: | - cmake . -DBUILD_EXAMPLES=1 -DUSE_SDL2=ON -DCMAKE_BUILD_TYPE=Debug - make -j2 - - - name: Test (headless) - run: | - cd bin/Linux - ./AutomatedTest null - - linux-sdl-gl3: - # Xvfb test is broken on 20.04 for unknown reasons (not our bug) - runs-on: ubuntu-22.04 - steps: - - uses: actions/checkout@v4 - - name: Install deps - run: | - sudo apt-get update - sudo apt-get install g++ cmake libsdl2-dev libpng-dev libjpeg-dev zlib1g-dev xvfb -qyy - - - name: Build - run: | - cmake . -DBUILD_EXAMPLES=1 -DUSE_SDL2=ON -DENABLE_OPENGL=OFF -DENABLE_OPENGL3=ON - make -j2 - - - name: Test (headless) - run: | - cd bin/Linux - ./AutomatedTest null - - - name: Test (Xvfb) - run: | - cd bin/Linux - LIBGL_ALWAYS_SOFTWARE=true xvfb-run ./AutomatedTest opengl3 - - linux-sdl-gles2: - runs-on: ubuntu-20.04 - steps: - - uses: actions/checkout@v4 - - name: Install deps - run: | - sudo apt-get update - sudo apt-get install g++ cmake libsdl2-dev libpng-dev libjpeg-dev zlib1g-dev xvfb -qyy - - - name: Build - run: | - cmake . -DBUILD_EXAMPLES=1 -DUSE_SDL2=ON -DENABLE_OPENGL=OFF -DENABLE_GLES2=ON - make -j2 - - - name: Test (headless) - run: | - cd bin/Linux - ./AutomatedTest null - - - name: Test (Xvfb) - run: | - cd bin/Linux - LIBGL_ALWAYS_SOFTWARE=true xvfb-run ./AutomatedTest ogles2 - - mingw: - name: "MinGW ${{matrix.config.variant}}${{matrix.config.extras}}" - runs-on: ubuntu-22.04 - strategy: - fail-fast: false - matrix: - config: - - {variant: win32, arch: i686} - - {variant: win64, arch: x86_64} - - {variant: win32, arch: i686, extras: "-sdl"} - - {variant: win64, arch: x86_64, extras: "-sdl"} - steps: - - uses: actions/checkout@v4 - - name: Install compiler - run: | - sudo apt-get update && sudo apt-get install cmake -qyy - ./scripts/ci-get-mingw.sh - - - name: Build - run: | - ./scripts/ci-build-mingw.sh package - env: - CC: ${{matrix.config.arch}}-w64-mingw32-clang - CXX: ${{matrix.config.arch}}-w64-mingw32-clang++ - extras: ${{matrix.config.extras}} - - - uses: actions/upload-artifact@v4 - with: - name: irrlicht-${{matrix.config.variant}}${{matrix.config.extras}} - path: ./irrlicht-${{matrix.config.variant}}${{matrix.config.extras}}.zip - - macos: - runs-on: macos-latest - steps: - - uses: actions/checkout@v4 - - name: Install deps - run: | - brew update --auto-update - brew install cmake libpng jpeg - env: - HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK: 1 - HOMEBREW_NO_INSTALL_CLEANUP: 1 - - - name: Build - run: | - cmake . -DCMAKE_FIND_FRAMEWORK=LAST -DBUILD_EXAMPLES=1 - make -j3 - - - name: Test (headless) - run: | - ./bin/OSX/AutomatedTest null - - macos-sdl: - runs-on: macos-latest - steps: - - uses: actions/checkout@v4 - - name: Install deps - run: | - brew update --auto-update - brew install cmake libpng jpeg sdl2 - env: - HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK: 1 - HOMEBREW_NO_INSTALL_CLEANUP: 1 - - - name: Build - run: | - cmake . -DCMAKE_FIND_FRAMEWORK=LAST -DBUILD_EXAMPLES=1 -DUSE_SDL2=1 - make -j3 - - msvc: - name: VS 2019 ${{ matrix.config.arch }} ${{ matrix.sdl.label }} - runs-on: windows-2019 - env: - VCPKG_VERSION: 8eb57355a4ffb410a2e94c07b4dca2dffbee8e50 - # 2023.10.19 - vcpkg_packages: zlib libpng libjpeg-turbo - strategy: - fail-fast: false - matrix: - config: - - - arch: x86 - generator: "-G'Visual Studio 16 2019' -A Win32" - vcpkg_triplet: x86-windows - - - arch: x64 - generator: "-G'Visual Studio 16 2019' -A x64" - vcpkg_triplet: x64-windows - sdl: - - - use: FALSE - label: '(no SDL)' - vcpkg_packages: opengl-registry - - - use: TRUE - label: '(with SDL)' - vcpkg_packages: sdl2 - - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Restore from cache and run vcpkg - uses: lukka/run-vcpkg@v7 - with: - vcpkgArguments: ${{env.vcpkg_packages}} ${{matrix.sdl.vcpkg_packages}} - vcpkgDirectory: '${{ github.workspace }}\vcpkg' - appendedCacheKey: ${{ matrix.config.vcpkg_triplet }} - vcpkgGitCommitId: ${{ env.VCPKG_VERSION }} - vcpkgTriplet: ${{ matrix.config.vcpkg_triplet }} - - - name: CMake - run: | - cmake ${{matrix.config.generator}} ` - -DUSE_SDL2=${{matrix.sdl.use}} ` - -DCMAKE_TOOLCHAIN_FILE="${{ github.workspace }}\vcpkg\scripts\buildsystems\vcpkg.cmake" ` - -DCMAKE_BUILD_TYPE=Release . - - - name: Build - run: cmake --build . --config Release - - - name: Create artifact folder - run: | - mkdir artifact/ - mkdir artifact/lib/ - - - name: Move dlls into artifact folder - run: move bin\Win32-VisualStudio\Release\* artifact\lib\ - - - name: Move includes into artifact folder - run: move include artifact/ - - - name: Upload Artifact - uses: actions/upload-artifact@v4 - with: - name: msvc-${{ matrix.config.arch }}-${{matrix.sdl.use}} - path: artifact/ - - android: - name: Android ${{ matrix.arch }} - runs-on: ubuntu-20.04 - env: - ndk_version: "r25c" - ANDROID_NDK: ${{ github.workspace }}/android-ndk - strategy: - matrix: - arch: [armeabi-v7a, arm64-v8a, x86, x86_64] - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Install deps - run: | - sudo rm /var/lib/man-db/auto-update - sudo apt-get update - sudo apt-get install -qyy wget unzip zip gcc-multilib make cmake - - - name: Cache NDK - id: cache-ndk - uses: actions/cache@v4 - with: - key: android-ndk-${{ env.ndk_version }}-linux - path: ${{ env.ANDROID_NDK }} - - - name: Install NDK - run: | - wget --progress=bar:force "http://dl.google.com/android/repository/android-ndk-${ndk_version}-linux.zip" - unzip -q "android-ndk-${ndk_version}-linux.zip" - rm "android-ndk-${ndk_version}-linux.zip" - mv "android-ndk-${ndk_version}" "${ANDROID_NDK}" - if: ${{ steps.cache-ndk.outputs.cache-hit != 'true' }} - - - name: Build - run: ./scripts/ci-build-android.sh ${{ matrix.arch }} - - #- name: Upload Artifact - # uses: actions/upload-artifact@v4 - # with: - # name: irrlicht-android-${{ matrix.arch }} - # path: ${{ runner.temp }}/pkg/${{ matrix.arch }} diff --git a/irr/CMakeLists.txt b/irr/CMakeLists.txt index ccc00f271..dfd6b189a 100644 --- a/irr/CMakeLists.txt +++ b/irr/CMakeLists.txt @@ -11,14 +11,5 @@ if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type: Debug or Release" FORCE) endif() -# FIXME: tests need to be moved to MT if we want to keep them - list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") -#enable_testing() add_subdirectory(src) -#add_subdirectory(test) - -#option(BUILD_EXAMPLES "Build example applications" FALSE) -#if(BUILD_EXAMPLES) -# add_subdirectory(examples) -#endif() diff --git a/irr/README.md b/irr/README.md index 96d3b0d97..50e7338a5 100644 --- a/irr/README.md +++ b/irr/README.md @@ -20,12 +20,11 @@ The following libraries are required to be installed: Aside from standard search options (`ZLIB_INCLUDE_DIR`, `ZLIB_LIBRARY`, ...) the following options are available: * `ENABLE_OPENGL` - Enable OpenGL driver * `ENABLE_OPENGL3` (default: `OFF`) - Enable OpenGL 3+ driver -* `ENABLE_GLES1` - Enable OpenGL ES driver, legacy * `ENABLE_GLES2` - Enable OpenGL ES 2+ driver * `USE_SDL2` (default: platform-dependent, usually `ON`) - Use SDL2 instead of older native device code However, IrrlichtMt cannot be built or installed separately. - + Platforms --------- diff --git a/irr/examples/AutomatedTest/main.cpp b/irr/examples/AutomatedTest/main.cpp deleted file mode 100644 index c9e5bab68..000000000 --- a/irr/examples/AutomatedTest/main.cpp +++ /dev/null @@ -1,154 +0,0 @@ -#include -#include -#include "exampleHelper.h" - -using namespace irr; - -static IrrlichtDevice *device = nullptr; -static int test_fail = 0; - -void test_irr_array(); -void test_irr_string(); - -static video::E_DRIVER_TYPE chooseDriver(core::stringc arg_) -{ - if (arg_ == "null") - return video::EDT_NULL; - if (arg_ == "ogles1") - return video::EDT_OGLES1; - if (arg_ == "ogles2") - return video::EDT_OGLES2; - if (arg_ == "opengl") - return video::EDT_OPENGL; - if (arg_ == "opengl3") - return video::EDT_OPENGL3; - std::cerr << "Unknown driver type: " << arg_.c_str() << ". Trying OpenGL." << std::endl; - return video::EDT_OPENGL; -} - -static inline void check(bool ok, const char *msg) -{ - if (!ok) { - test_fail++; - device->getLogger()->log((core::stringc("FAILED TEST: ") + msg).c_str(), ELL_ERROR); - } -} - -void run_unit_tests() -{ - std::cout << "Running unit tests:" << std::endl; - try { - test_irr_array(); - test_irr_string(); - } catch (const std::exception &e) { - std::cerr << e.what() << std::endl; - test_fail++; - } - std::cout << std::endl; -} - -int main(int argc, char *argv[]) -{ - run_unit_tests(); - - SIrrlichtCreationParameters p; - p.DriverType = chooseDriver(argc > 1 ? argv[1] : ""); - p.WindowSize = core::dimension2du(640, 480); - p.Vsync = true; - p.LoggingLevel = ELL_DEBUG; - - device = createDeviceEx(p); - if (!device) - return 1; - - { - u32 total = 0; - device->getOSOperator()->getSystemMemory(&total, nullptr); - core::stringc message = core::stringc("Total RAM in MiB: ") + core::stringc(total >> 10); - device->getLogger()->log(message.c_str(), ELL_INFORMATION); - check(total > 130 * 1024, "RAM amount"); - } - - device->setWindowCaption(L"Hello World!"); - device->setResizable(true); - - video::IVideoDriver *driver = device->getVideoDriver(); - scene::ISceneManager *smgr = device->getSceneManager(); - gui::IGUIEnvironment *guienv = device->getGUIEnvironment(); - - guienv->addStaticText(L"sample text", core::rect(10, 10, 110, 22), false); - - gui::IGUIButton *button = guienv->addButton( - core::rect(10, 30, 110, 30 + 32), 0, -1, L"sample button", - L"sample tooltip"); - - gui::IGUIEditBox *editbox = guienv->addEditBox(L"", - core::rect(10, 70, 60, 70 + 16)); - - const io::path mediaPath = getExampleMediaPath(); - - auto mesh_file = device->getFileSystem()->createAndOpenFile(mediaPath + "coolguy_opt.x"); - check(mesh_file, "mesh file loading"); - scene::IAnimatedMesh *mesh = smgr->getMesh(mesh_file); - check(mesh, "mesh loading"); - if (mesh_file) - mesh_file->drop(); - if (mesh) { - video::ITexture *tex = driver->getTexture(mediaPath + "cooltexture.png"); - check(tex, "texture loading"); - scene::IAnimatedMeshSceneNode *node = smgr->addAnimatedMeshSceneNode(mesh); - if (node) { - node->forEachMaterial([tex](video::SMaterial &mat) { - mat.Lighting = false; - mat.setTexture(0, tex); - }); - node->setFrameLoop(0, 29); - node->setAnimationSpeed(30); - } - } - - smgr->addCameraSceneNode(0, core::vector3df(0, 4, 5), core::vector3df(0, 2, 0)); - - s32 n = 0; - SEvent event; - device->getTimer()->start(); - - while (device->run()) { - if (device->getTimer()->getTime() >= 1000) { - device->getTimer()->setTime(0); - ++n; - if (n == 1) { // Tooltip display - bzero(&event, sizeof(SEvent)); - event.EventType = irr::EET_MOUSE_INPUT_EVENT; - event.MouseInput.Event = irr::EMIE_MOUSE_MOVED; - event.MouseInput.X = button->getAbsolutePosition().getCenter().X; - event.MouseInput.Y = button->getAbsolutePosition().getCenter().Y; - device->postEventFromUser(event); - } else if (n == 2) // Text input focus - guienv->setFocus(editbox); - else if (n == 3) { // Keypress for Text input - bzero(&event, sizeof(SEvent)); - event.EventType = irr::EET_KEY_INPUT_EVENT; - event.KeyInput.Char = L'a'; - event.KeyInput.Key = KEY_KEY_A; - event.KeyInput.PressedDown = true; - device->postEventFromUser(event); - event.KeyInput.PressedDown = false; - device->postEventFromUser(event); - } else - device->closeDevice(); - } - - driver->beginScene(video::ECBF_COLOR | video::ECBF_DEPTH, - video::SColor(255, 100, 100, 150)); - smgr->drawAll(); - guienv->drawAll(); - driver->endScene(); - } - - check(core::stringw(L"a") == editbox->getText(), "EditBox text"); - - device->getLogger()->log("Done.", ELL_INFORMATION); - device->drop(); - return test_fail > 0 ? 1 : 0; -} diff --git a/irr/examples/AutomatedTest/test_array.cpp b/irr/examples/AutomatedTest/test_array.cpp deleted file mode 100644 index 42959e913..000000000 --- a/irr/examples/AutomatedTest/test_array.cpp +++ /dev/null @@ -1,138 +0,0 @@ -#include -#include "test_helper.h" - -using namespace irr; -using core::array; - -static void test_basics() -{ - array v; - v.push_back(1); // 1 - v.push_front(2); // 2, 1 - v.insert(4, 0); // 4, 2, 1 - v.insert(3, 1); // 4, 3, 2, 1 - v.insert(0, 4); // 4, 3, 2, 1, 0 - UASSERTEQ(v.size(), 5); - UASSERTEQ(v[0], 4); - UASSERTEQ(v[1], 3); - UASSERTEQ(v[2], 2); - UASSERTEQ(v[3], 1); - UASSERTEQ(v[4], 0); - array w = v; - UASSERTEQ(w.size(), 5); - UASSERT(w == v); - w.clear(); - UASSERTEQ(w.size(), 0); - UASSERTEQ(w.allocated_size(), 0); - UASSERT(w.empty()); - w = v; - UASSERTEQ(w.size(), 5); - w.set_used(3); - UASSERTEQ(w.size(), 3); - UASSERTEQ(w[0], 4); - UASSERTEQ(w[1], 3); - UASSERTEQ(w[2], 2); - UASSERTEQ(w.getLast(), 2); - w.set_used(20); - UASSERTEQ(w.size(), 20); - w = v; - w.sort(); - UASSERTEQ(w.size(), 5); - UASSERTEQ(w[0], 0); - UASSERTEQ(w[1], 1); - UASSERTEQ(w[2], 2); - UASSERTEQ(w[3], 3); - UASSERTEQ(w[4], 4); - w.erase(0); - UASSERTEQ(w.size(), 4); - UASSERTEQ(w[0], 1); - UASSERTEQ(w[1], 2); - UASSERTEQ(w[2], 3); - UASSERTEQ(w[3], 4); - w.erase(1, 2); - UASSERTEQ(w.size(), 2); - UASSERTEQ(w[0], 1); - UASSERTEQ(w[1], 4); - w.swap(v); - UASSERTEQ(w.size(), 5); - UASSERTEQ(v.size(), 2); -} - -static void test_linear_searches() -{ - // Populate the array with 0, 1, 2, ..., 100, 100, 99, 98, 97, ..., 0 - array arr; - for (int i = 0; i <= 100; i++) - arr.push_back(i); - for (int i = 100; i >= 0; i--) - arr.push_back(i); - s32 end = arr.size() - 1; - for (int i = 0; i <= 100; i++) { - s32 index = arr.linear_reverse_search(i); - UASSERTEQ(index, end - i); - } - for (int i = 0; i <= 100; i++) { - s32 index = arr.linear_search(i); - UASSERTEQ(index, i); - } -} - -static void test_binary_searches() -{ - const auto &values = {3, 5, 1, 2, 5, 10, 19, 9, 7, 1, 2, 5, 8, 15}; - array arr; - for (int value : values) { - arr.push_back(value); - } - // Test the const form first, it uses a linear search without sorting - const array &carr = arr; - UASSERTEQ(carr.binary_search(20), -1); - UASSERTEQ(carr.binary_search(0), -1); - UASSERTEQ(carr.binary_search(1), 2); - - // Sorted: 1, 1, 2, 2, 3, 5, 5, 5, 7, 8, 9, 10, 15, 19 - UASSERTEQ(arr.binary_search(20), -1); - UASSERTEQ(arr.binary_search(0), -1); - - for (int value : values) { - s32 i = arr.binary_search(value); - UASSERTNE(i, -1); - UASSERTEQ(arr[i], value); - } - - s32 first, last; - first = arr.binary_search_multi(1, last); - UASSERTEQ(first, 0); - UASSERTEQ(last, 1); - - first = arr.binary_search_multi(2, last); - UASSERTEQ(first, 2); - UASSERTEQ(last, 3); - - first = arr.binary_search_multi(3, last); - UASSERTEQ(first, 4); - UASSERTEQ(last, 4); - - first = arr.binary_search_multi(4, last); - UASSERTEQ(first, -1); - - first = arr.binary_search_multi(5, last); - UASSERTEQ(first, 5); - UASSERTEQ(last, 7); - - first = arr.binary_search_multi(7, last); - UASSERTEQ(first, 8); - UASSERTEQ(last, 8); - - first = arr.binary_search_multi(19, last); - UASSERTEQ(first, 13); - UASSERTEQ(last, 13); -} - -void test_irr_array() -{ - test_basics(); - test_linear_searches(); - test_binary_searches(); - std::cout << " test_irr_array PASSED" << std::endl; -} diff --git a/irr/examples/AutomatedTest/test_helper.h b/irr/examples/AutomatedTest/test_helper.h deleted file mode 100644 index 5229eff29..000000000 --- a/irr/examples/AutomatedTest/test_helper.h +++ /dev/null @@ -1,33 +0,0 @@ -#pragma once - -#include -#include - -class TestFailedException : public std::exception -{ -}; - -// Asserts the comparison specified by CMP is true, or fails the current unit test -#define UASSERTCMP(CMP, actual, expected) \ - do { \ - const auto &a = (actual); \ - const auto &e = (expected); \ - if (!CMP(a, e)) { \ - std::cout \ - << "Test assertion failed: " << #actual << " " << #CMP << " " \ - << #expected << std::endl \ - << " at " << __FILE__ << ":" << __LINE__ << std::endl \ - << " actual: " << a << std::endl \ - << " expected: " \ - << e << std::endl; \ - throw TestFailedException(); \ - } \ - } while (0) - -#define CMPEQ(a, e) (a == e) -#define CMPTRUE(a, e) (a) -#define CMPNE(a, e) (a != e) - -#define UASSERTEQ(actual, expected) UASSERTCMP(CMPEQ, actual, expected) -#define UASSERTNE(actual, nexpected) UASSERTCMP(CMPNE, actual, nexpected) -#define UASSERT(actual) UASSERTCMP(CMPTRUE, actual, true) diff --git a/irr/examples/AutomatedTest/test_string.cpp b/irr/examples/AutomatedTest/test_string.cpp deleted file mode 100644 index 4d1291f18..000000000 --- a/irr/examples/AutomatedTest/test_string.cpp +++ /dev/null @@ -1,205 +0,0 @@ -#include -#include -#include -#include -#include "test_helper.h" - -using namespace irr; -using namespace irr::core; - -#define CMPSTR(a, b) (!strcmp(a, b)) -#define UASSERTSTR(actual, expected) UASSERTCMP(CMPSTR, actual.c_str(), expected) - -static void test_basics() -{ - // ctor - stringc s; - UASSERTEQ(s.c_str()[0], '\0'); - s = stringc(0.1234567); - UASSERTSTR(s, "0.123457"); - s = stringc(0x1p+53); - UASSERTSTR(s, "9007199254740992.000000"); - s = stringc(static_cast(-102400)); - UASSERTSTR(s, "-102400"); - s = stringc(static_cast(102400)); - UASSERTSTR(s, "102400"); - s = stringc(static_cast(-1024000)); - UASSERTSTR(s, "-1024000"); - s = stringc(static_cast(1024000)); - UASSERTSTR(s, "1024000"); - s = stringc("YESno", 3); - UASSERTSTR(s, "YES"); - s = stringc(L"test", 4); - UASSERTSTR(s, "test"); - s = stringc("Hello World!"); - UASSERTSTR(s, "Hello World!"); - // operator= - s = stringw(L"abcdef"); - UASSERTSTR(s, "abcdef"); - s = L"abcdef"; - UASSERTSTR(s, "abcdef"); - s = static_cast(nullptr); - UASSERTSTR(s, ""); - // operator+ - s = s + stringc("foo"); - UASSERTSTR(s, "foo"); - s = s + L"bar"; - UASSERTSTR(s, "foobar"); - // the rest - s = "f"; - UASSERTEQ(s[0], 'f'); - const auto &sref = s; - UASSERTEQ(sref[0], 'f'); - UASSERT(sref == "f"); - UASSERT(sref == stringc("f")); - s = "a"; - UASSERT(sref < stringc("aa")); - UASSERT(sref < stringc("b")); - UASSERT(stringc("Z") < sref); - UASSERT(!(sref < stringc("a"))); - UASSERT(sref.lower_ignore_case("AA")); - UASSERT(sref.lower_ignore_case("B")); - UASSERT(!sref.lower_ignore_case("A")); - s = "dog"; - UASSERT(sref != "cat"); - UASSERT(sref != stringc("cat")); -} - -static void test_methods() -{ - stringc s; - const auto &sref = s; - s = "irrlicht"; - UASSERTEQ(sref.size(), 8); - UASSERT(!sref.empty()); - s.clear(); - UASSERTEQ(sref.size(), 0); - UASSERT(sref.empty()); - UASSERT(sref[0] == 0); - s = "\tAz#`"; - s.make_lower(); - UASSERTSTR(s, "\taz#`"); - s.make_upper(); - UASSERTSTR(s, "\tAZ#`"); - UASSERT(sref.equals_ignore_case("\taz#`")); - UASSERT(sref.equals_substring_ignore_case("Z#`", 2)); - s = "irrlicht"; - UASSERT(sref.equalsn(stringc("irr"), 3)); - UASSERT(sref.equalsn("irr", 3)); - s = "fo"; - s.append('o'); - UASSERTSTR(s, "foo"); - s.append("bar", 1); - UASSERTSTR(s, "foob"); - s.append("ar", 999999); - UASSERTSTR(s, "foobar"); - s = "nyan"; - s.append(stringc("cat")); - UASSERTSTR(s, "nyancat"); - s.append(stringc("sam"), 1); - UASSERTSTR(s, "nyancats"); - s = "fbar"; - s.insert(1, "ooXX", 2); - UASSERTSTR(s, "foobar"); - UASSERTEQ(sref.findFirst('o'), 1); - UASSERTEQ(sref.findFirst('X'), -1); - UASSERTEQ(sref.findFirstChar("abff", 2), 3); - UASSERTEQ(sref.findFirstCharNotInList("fobb", 2), 3); - UASSERTEQ(sref.findLast('o'), 2); - UASSERTEQ(sref.findLast('X'), -1); - UASSERTEQ(sref.findLastChar("abrr", 2), 4); - UASSERTEQ(sref.findLastCharNotInList("rabb", 2), 3); - UASSERTEQ(sref.findNext('o', 2), 2); - UASSERTEQ(sref.findLast('o', 1), 1); - s = "ob-oob"; - UASSERTEQ(sref.find("ob", 1), 4); - UASSERTEQ(sref.find("ob"), 0); - UASSERTEQ(sref.find("?"), -1); - s = "HOMEOWNER"; - stringc s2 = sref.subString(2, 4); - UASSERTSTR(s2, "MEOW"); - s2 = sref.subString(2, 4, true); - UASSERTSTR(s2, "meow"); - s = "land"; - s.replace('l', 's'); - UASSERTSTR(s, "sand"); - s = ">dog<"; - s.replace("dog", "cat"); - UASSERTSTR(s, ">cat<"); - s.replace("cat", "horse"); - UASSERTSTR(s, ">horse<"); - s.replace("horse", "gnu"); - UASSERTSTR(s, ">gnu<"); - s = " h e l p "; - s.remove(' '); - UASSERTSTR(s, "help"); - s.remove("el"); - UASSERTSTR(s, "hp"); - s = "irrlicht"; - s.removeChars("it"); - UASSERTSTR(s, "rrlch"); - s = "\r\nfoo bar "; - s.trim(); - UASSERTSTR(s, "foo bar"); - s = "foxo"; - s.erase(2); - UASSERTSTR(s, "foo"); - s = "a"; - s.append('\0'); - s.append('b'); - UASSERTEQ(s.size(), 3); - s.validate(); - UASSERTEQ(s.size(), 1); - UASSERTEQ(s.lastChar(), 'a'); - std::vector res; - s = "a,,b,c"; - s.split(res, ",aa", 1, true, false); - UASSERTEQ(res.size(), 3); - UASSERTSTR(res[0], "a"); - UASSERTSTR(res[2], "c"); - res.clear(); - s.split(res, ",", 1, false, true); - UASSERTEQ(res.size(), 7); - UASSERTSTR(res[0], "a"); - UASSERTSTR(res[2], ""); - for (int i = 0; i < 3; i++) - UASSERTSTR(res[2 * i + 1], ","); -} - -static void test_conv() -{ - // locale-independent - - stringw out; - utf8ToWString(out, "†††"); - UASSERTEQ(out.size(), 3); - for (int i = 0; i < 3; i++) - UASSERTEQ(static_cast(out[i]), 0x2020); - - stringc out2; - wStringToUTF8(out2, L"†††"); - UASSERTEQ(out2.size(), 9); - for (int i = 0; i < 3; i++) { - UASSERTEQ(static_cast(out2[3 * i]), 0xe2); - UASSERTEQ(static_cast(out2[3 * i + 1]), 0x80); - UASSERTEQ(static_cast(out2[3 * i + 2]), 0xa0); - } - - // locale-dependent - if (!setlocale(LC_CTYPE, "C.UTF-8")) - setlocale(LC_CTYPE, "UTF-8"); // macOS - - stringw out3; - multibyteToWString(out3, "†††"); - UASSERTEQ(out3.size(), 3); - for (int i = 0; i < 3; i++) - UASSERTEQ(static_cast(out3[i]), 0x2020); -} - -void test_irr_string() -{ - test_basics(); - test_methods(); - test_conv(); - std::cout << " test_irr_string PASSED" << std::endl; -} diff --git a/irr/examples/CMakeLists.txt b/irr/examples/CMakeLists.txt deleted file mode 100644 index 03553048e..000000000 --- a/irr/examples/CMakeLists.txt +++ /dev/null @@ -1,17 +0,0 @@ -set(IRREXAMPLES - # removed -) -if(UNIX) - list(APPEND IRREXAMPLES AutomatedTest) -endif() - -foreach(exname IN ITEMS ${IRREXAMPLES}) - file(GLOB sources "${CMAKE_CURRENT_SOURCE_DIR}/${exname}/*.cpp") - add_executable(${exname} ${sources}) - - target_include_directories(${exname} PRIVATE - ${CMAKE_SOURCE_DIR}/include - ${CMAKE_CURRENT_SOURCE_DIR}/${exname} - ) - target_link_libraries(${exname} IrrlichtMt) -endforeach() diff --git a/irr/include/CIndexBuffer.h b/irr/include/CIndexBuffer.h new file mode 100644 index 000000000..904b0ab9a --- /dev/null +++ b/irr/include/CIndexBuffer.h @@ -0,0 +1,103 @@ +// 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 +#include "IIndexBuffer.h" + +// Define to receive warnings when violating the hw mapping hints +//#define INDEXBUFFER_HINT_DEBUG + +#ifdef INDEXBUFFER_HINT_DEBUG +#include "../src/os.h" +#endif + +namespace irr +{ +namespace scene +{ +//! Template implementation of the IIndexBuffer interface +template +class CIndexBuffer final : public IIndexBuffer +{ +public: + //! Default constructor for empty buffer + CIndexBuffer() + { +#ifdef _DEBUG + setDebugName("CIndexBuffer"); +#endif + } + + video::E_INDEX_TYPE getType() const override + { + static_assert(sizeof(T) == 2 || sizeof(T) == 4, "invalid index type"); + return sizeof(T) == 2 ? video::EIT_16BIT : video::EIT_32BIT; + } + + const void *getData() const override + { + return Data.data(); + } + + void *getData() override + { + return Data.data(); + } + + u32 getCount() const override + { + return static_cast(Data.size()); + } + + E_HARDWARE_MAPPING getHardwareMappingHint() const override + { + return MappingHint; + } + + void setHardwareMappingHint(E_HARDWARE_MAPPING NewMappingHint) override + { + MappingHint = NewMappingHint; + } + + void setDirty() override + { + ++ChangedID; +#ifdef INDEXBUFFER_HINT_DEBUG + if (MappingHint == EHM_STATIC && HWBuffer) { + char buf[100]; + snprintf_irr(buf, sizeof(buf), "CIndexBuffer @ %p modified, but it has a static hint", this); + os::Printer::log(buf, ELL_WARNING); + } +#endif + } + + u32 getChangedID() const override { return ChangedID; } + + void setHWBuffer(void *ptr) const override + { + HWBuffer = ptr; + } + + void *getHWBuffer() const override + { + return HWBuffer; + } + + u32 ChangedID = 1; + + //! hardware mapping hint + E_HARDWARE_MAPPING MappingHint = EHM_NEVER; + mutable void *HWBuffer = nullptr; + + //! Indices of this buffer + std::vector Data; +}; + +//! Standard 16-bit buffer +typedef CIndexBuffer SIndexBuffer; + +} // end namespace scene +} // end namespace irr diff --git a/irr/include/CMeshBuffer.h b/irr/include/CMeshBuffer.h index 8f8158ff1..9a6d4426f 100644 --- a/irr/include/CMeshBuffer.h +++ b/irr/include/CMeshBuffer.h @@ -4,8 +4,10 @@ #pragma once -#include "irrArray.h" +#include #include "IMeshBuffer.h" +#include "CVertexBuffer.h" +#include "CIndexBuffer.h" namespace irr { @@ -13,16 +15,24 @@ namespace scene { //! Template implementation of the IMeshBuffer interface template -class CMeshBuffer : public IMeshBuffer +class CMeshBuffer final : public IMeshBuffer { public: //! Default constructor for empty meshbuffer CMeshBuffer() : - ChangedID_Vertex(1), ChangedID_Index(1), MappingHint_Vertex(EHM_NEVER), MappingHint_Index(EHM_NEVER), HWBuffer(NULL), PrimitiveType(EPT_TRIANGLES) + PrimitiveType(EPT_TRIANGLES) { #ifdef _DEBUG setDebugName("CMeshBuffer"); #endif + Vertices = new CVertexBuffer(); + Indices = new SIndexBuffer(); + } + + ~CMeshBuffer() + { + Vertices->drop(); + Indices->drop(); } //! Get material of this meshbuffer @@ -39,53 +49,24 @@ public: return Material; } - //! Get pointer to vertices - /** \return Pointer to vertices. */ - const void *getVertices() const override + const scene::IVertexBuffer *getVertexBuffer() const override { - return Vertices.const_pointer(); + return Vertices; } - //! Get pointer to vertices - /** \return Pointer to vertices. */ - void *getVertices() override + scene::IVertexBuffer *getVertexBuffer() override { - return Vertices.pointer(); + return Vertices; } - //! Get number of vertices - /** \return Number of vertices. */ - u32 getVertexCount() const override + const scene::IIndexBuffer *getIndexBuffer() const override { - return Vertices.size(); + return Indices; } - //! Get type of index data which is stored in this meshbuffer. - /** \return Index type of this buffer. */ - video::E_INDEX_TYPE getIndexType() const override + scene::IIndexBuffer *getIndexBuffer() override { - return video::EIT_16BIT; - } - - //! Get pointer to indices - /** \return Pointer to indices. */ - const u16 *getIndices() const override - { - return Indices.const_pointer(); - } - - //! Get pointer to indices - /** \return Pointer to indices. */ - u16 *getIndices() override - { - return Indices.pointer(); - } - - //! Get number of indices - /** \return Number of indices. */ - u32 getIndexCount() const override - { - return Indices.size(); + return Indices; } //! Get the axis aligned bounding box @@ -107,102 +88,34 @@ public: /** should be called if the mesh changed. */ void recalculateBoundingBox() override { - if (!Vertices.empty()) { - BoundingBox.reset(Vertices[0].Pos); - const irr::u32 vsize = Vertices.size(); + if (Vertices->getCount()) { + BoundingBox.reset(Vertices->getPosition(0)); + const irr::u32 vsize = Vertices->getCount(); for (u32 i = 1; i < vsize; ++i) - BoundingBox.addInternalPoint(Vertices[i].Pos); + BoundingBox.addInternalPoint(Vertices->getPosition(i)); } else BoundingBox.reset(0, 0, 0); } - //! Get type of vertex data stored in this buffer. - /** \return Type of vertex data. */ - video::E_VERTEX_TYPE getVertexType() const override - { - return T::getType(); - } - - //! returns position of vertex i - const core::vector3df &getPosition(u32 i) const override - { - return Vertices[i].Pos; - } - - //! returns position of vertex i - core::vector3df &getPosition(u32 i) override - { - return Vertices[i].Pos; - } - - //! returns normal of vertex i - const core::vector3df &getNormal(u32 i) const override - { - return Vertices[i].Normal; - } - - //! returns normal of vertex i - core::vector3df &getNormal(u32 i) override - { - return Vertices[i].Normal; - } - - //! returns texture coord of vertex i - const core::vector2df &getTCoords(u32 i) const override - { - return Vertices[i].TCoords; - } - - //! returns texture coord of vertex i - core::vector2df &getTCoords(u32 i) override - { - return Vertices[i].TCoords; - } - //! Append the vertices and indices to the current buffer - /** Only works for compatible types, i.e. either the same type - or the main buffer is of standard type. Otherwise, behavior is - undefined. - */ void append(const void *const vertices, u32 numVertices, const u16 *const indices, u32 numIndices) override { if (vertices == getVertices()) return; const u32 vertexCount = getVertexCount(); - u32 i; + const u32 indexCount = getIndexCount(); - Vertices.reallocate(vertexCount + numVertices); - for (i = 0; i < numVertices; ++i) { - Vertices.push_back(static_cast(vertices)[i]); - BoundingBox.addInternalPoint(static_cast(vertices)[i].Pos); + auto *vt = static_cast(vertices); + Vertices->Data.insert(Vertices->Data.end(), vt, vt + numVertices); + for (u32 i = vertexCount; i < getVertexCount(); i++) + BoundingBox.addInternalPoint(Vertices->getPosition(i)); + + Indices->Data.insert(Indices->Data.end(), indices, indices + numIndices); + if (vertexCount != 0) { + for (u32 i = indexCount; i < getIndexCount(); i++) + Indices->Data[i] += vertexCount; } - - Indices.reallocate(getIndexCount() + numIndices); - for (i = 0; i < numIndices; ++i) { - Indices.push_back(indices[i] + vertexCount); - } - } - - //! get the current hardware mapping hint - E_HARDWARE_MAPPING getHardwareMappingHint_Vertex() const override - { - return MappingHint_Vertex; - } - - //! get the current hardware mapping hint - E_HARDWARE_MAPPING getHardwareMappingHint_Index() const override - { - return MappingHint_Index; - } - - //! set the hardware mapping hint, for driver - void setHardwareMappingHint(E_HARDWARE_MAPPING NewMappingHint, E_BUFFER_TYPE Buffer = EBT_VERTEX_AND_INDEX) override - { - if (Buffer == EBT_VERTEX_AND_INDEX || Buffer == EBT_VERTEX) - MappingHint_Vertex = NewMappingHint; - if (Buffer == EBT_VERTEX_AND_INDEX || Buffer == EBT_INDEX) - MappingHint_Index = NewMappingHint; } //! Describe what kind of primitive geometry is used by the meshbuffer @@ -217,47 +130,12 @@ public: return PrimitiveType; } - //! flags the mesh as changed, reloads hardware buffers - void setDirty(E_BUFFER_TYPE Buffer = EBT_VERTEX_AND_INDEX) override - { - if (Buffer == EBT_VERTEX_AND_INDEX || Buffer == EBT_VERTEX) - ++ChangedID_Vertex; - if (Buffer == EBT_VERTEX_AND_INDEX || Buffer == EBT_INDEX) - ++ChangedID_Index; - } - - //! Get the currently used ID for identification of changes. - /** This shouldn't be used for anything outside the VideoDriver. */ - u32 getChangedID_Vertex() const override { return ChangedID_Vertex; } - - //! Get the currently used ID for identification of changes. - /** This shouldn't be used for anything outside the VideoDriver. */ - u32 getChangedID_Index() const override { return ChangedID_Index; } - - void setHWBuffer(void *ptr) const override - { - HWBuffer = ptr; - } - - void *getHWBuffer() const override - { - return HWBuffer; - } - - u32 ChangedID_Vertex; - u32 ChangedID_Index; - - //! hardware mapping hint - E_HARDWARE_MAPPING MappingHint_Vertex; - E_HARDWARE_MAPPING MappingHint_Index; - mutable void *HWBuffer; - //! Material for this meshbuffer. video::SMaterial Material; - //! Vertices of this buffer - core::array Vertices; - //! Indices into the vertices of this buffer. - core::array Indices; + //! Vertex buffer + CVertexBuffer *Vertices; + //! Index buffer + SIndexBuffer *Indices; //! Bounding box of this meshbuffer. core::aabbox3d BoundingBox; //! Primitive type used for rendering (triangles, lines, ...) diff --git a/irr/include/CVertexBuffer.h b/irr/include/CVertexBuffer.h new file mode 100644 index 000000000..4b3f33688 --- /dev/null +++ b/irr/include/CVertexBuffer.h @@ -0,0 +1,136 @@ +// 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 +#include "IVertexBuffer.h" + +// Define to receive warnings when violating the hw mapping hints +//#define VERTEXBUFFER_HINT_DEBUG + +#ifdef VERTEXBUFFER_HINT_DEBUG +#include "../src/os.h" +#endif + +namespace irr +{ +namespace scene +{ +//! Template implementation of the IVertexBuffer interface +template +class CVertexBuffer final : public IVertexBuffer +{ +public: + //! Default constructor for empty buffer + CVertexBuffer() + { +#ifdef _DEBUG + setDebugName("CVertexBuffer"); +#endif + } + + const void *getData() const override + { + return Data.data(); + } + + void *getData() override + { + return Data.data(); + } + + u32 getCount() const override + { + return static_cast(Data.size()); + } + + video::E_VERTEX_TYPE getType() const override + { + return T::getType(); + } + + const core::vector3df &getPosition(u32 i) const override + { + return Data[i].Pos; + } + + core::vector3df &getPosition(u32 i) override + { + return Data[i].Pos; + } + + const core::vector3df &getNormal(u32 i) const override + { + return Data[i].Normal; + } + + core::vector3df &getNormal(u32 i) override + { + return Data[i].Normal; + } + + const core::vector2df &getTCoords(u32 i) const override + { + return Data[i].TCoords; + } + + core::vector2df &getTCoords(u32 i) override + { + return Data[i].TCoords; + } + + E_HARDWARE_MAPPING getHardwareMappingHint() const override + { + return MappingHint; + } + + void setHardwareMappingHint(E_HARDWARE_MAPPING NewMappingHint) override + { + MappingHint = NewMappingHint; + } + + void setDirty() override + { + ++ChangedID; +#ifdef VERTEXBUFFER_HINT_DEBUG + if (MappingHint == EHM_STATIC && HWBuffer) { + char buf[100]; + snprintf_irr(buf, sizeof(buf), "CVertexBuffer @ %p modified, but it has a static hint", this); + os::Printer::log(buf, ELL_WARNING); + } +#endif + } + + u32 getChangedID() const override { return ChangedID; } + + void setHWBuffer(void *ptr) const override + { + HWBuffer = ptr; + } + + void *getHWBuffer() const override + { + return HWBuffer; + } + + u32 ChangedID = 1; + + //! hardware mapping hint + E_HARDWARE_MAPPING MappingHint = EHM_NEVER; + mutable void *HWBuffer = nullptr; + + //! Vertices of this buffer + std::vector Data; +}; + +//! Standard buffer +typedef CVertexBuffer SVertexBuffer; +//! Buffer with two texture coords per vertex, e.g. for lightmaps +typedef CVertexBuffer SVertexBufferLightMap; +//! Buffer with vertices having tangents stored, e.g. for normal mapping +typedef CVertexBuffer SVertexBufferTangents; + +} // end namespace scene +} // end namespace irr diff --git a/irr/include/EDriverTypes.h b/irr/include/EDriverTypes.h index 33f987889..f19e65ace 100644 --- a/irr/include/EDriverTypes.h +++ b/irr/include/EDriverTypes.h @@ -24,9 +24,6 @@ enum E_DRIVER_TYPE primitives. */ EDT_OPENGL, - //! OpenGL-ES 1.x driver, for embedded and mobile systems - EDT_OGLES1, - //! OpenGL-ES 2.x driver, for embedded and mobile systems /** Supports shaders etc. */ EDT_OGLES2, diff --git a/irr/include/EMaterialProps.h b/irr/include/EMaterialProps.h index 6f37c95b8..765084340 100644 --- a/irr/include/EMaterialProps.h +++ b/irr/include/EMaterialProps.h @@ -18,12 +18,6 @@ enum E_MATERIAL_PROP //! Corresponds to SMaterial::PointCloud. EMP_POINTCLOUD = 0x2, - //! Corresponds to SMaterial::GouraudShading. - EMP_GOURAUD_SHADING = 0x4, - - //! Corresponds to SMaterial::Lighting. - EMP_LIGHTING = 0x8, - //! Corresponds to SMaterial::ZBuffer. EMP_ZBUFFER = 0x10, @@ -48,9 +42,6 @@ enum E_MATERIAL_PROP //! Corresponds to SMaterial::FogEnable. EMP_FOG_ENABLE = 0x800, - //! Corresponds to SMaterial::NormalizeNormals. - EMP_NORMALIZE_NORMALS = 0x1000, - //! Corresponds to SMaterialLayer::TextureWrapU, TextureWrapV and //! TextureWrapW. EMP_TEXTURE_WRAP = 0x2000, @@ -61,9 +52,6 @@ enum E_MATERIAL_PROP //! Corresponds to SMaterial::ColorMask. EMP_COLOR_MASK = 0x8000, - //! Corresponds to SMaterial::ColorMaterial. - EMP_COLOR_MATERIAL = 0x10000, - //! Corresponds to SMaterial::UseMipMaps. EMP_USE_MIP_MAPS = 0x20000, diff --git a/irr/include/EVideoTypes.h b/irr/include/EVideoTypes.h new file mode 100644 index 000000000..fe90f0652 --- /dev/null +++ b/irr/include/EVideoTypes.h @@ -0,0 +1,75 @@ +// 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 "SMaterial.h" // MATERIAL_MAX_TEXTURES + +namespace irr::video +{ + +//! enumeration for geometry transformation states +enum E_TRANSFORMATION_STATE +{ + //! View transformation + ETS_VIEW = 0, + //! World transformation + ETS_WORLD, + //! Projection transformation + ETS_PROJECTION, + //! Texture 0 transformation + //! Use E_TRANSFORMATION_STATE(ETS_TEXTURE_0 + texture_number) to access other texture transformations + ETS_TEXTURE_0, + //! Only used internally + ETS_COUNT = ETS_TEXTURE_0 + MATERIAL_MAX_TEXTURES +}; + +//! Special render targets, which usually map to dedicated hardware +/** These render targets (besides 0 and 1) need not be supported by gfx cards */ +enum E_RENDER_TARGET +{ + //! Render target is the main color frame buffer + ERT_FRAME_BUFFER = 0, + //! Render target is a render texture + ERT_RENDER_TEXTURE, + //! Multi-Render target textures + ERT_MULTI_RENDER_TEXTURES, + //! Render target is the main color frame buffer + ERT_STEREO_LEFT_BUFFER, + //! Render target is the right color buffer (left is the main buffer) + ERT_STEREO_RIGHT_BUFFER, + //! Render to both stereo buffers at once + ERT_STEREO_BOTH_BUFFERS, + //! Auxiliary buffer 0 + ERT_AUX_BUFFER0, + //! Auxiliary buffer 1 + ERT_AUX_BUFFER1, + //! Auxiliary buffer 2 + ERT_AUX_BUFFER2, + //! Auxiliary buffer 3 + ERT_AUX_BUFFER3, + //! Auxiliary buffer 4 + ERT_AUX_BUFFER4 +}; + +//! Enum for the flags of clear buffer +enum E_CLEAR_BUFFER_FLAG +{ + ECBF_NONE = 0, + ECBF_COLOR = 1, + ECBF_DEPTH = 2, + ECBF_STENCIL = 4, + ECBF_ALL = ECBF_COLOR | ECBF_DEPTH | ECBF_STENCIL +}; + +//! Enum for the types of fog distributions to choose from +enum E_FOG_TYPE +{ + EFT_FOG_EXP = 0, + EFT_FOG_LINEAR, + EFT_FOG_EXP2 +}; + +} // irr::video + diff --git a/irr/include/IAttributes.h b/irr/include/IAttributes.h index 906d334a2..4606c5710 100644 --- a/irr/include/IAttributes.h +++ b/irr/include/IAttributes.h @@ -23,27 +23,13 @@ namespace io class IAttributes : public virtual IReferenceCounted { public: - //! Returns amount of attributes in this collection of attributes. - virtual u32 getAttributeCount() const = 0; - - //! Returns attribute name by index. - //! \param index: Index value, must be between 0 and getAttributeCount()-1. - virtual const c8 *getAttributeName(s32 index) const = 0; - //! Returns the type of an attribute //! \param attributeName: Name for the attribute virtual E_ATTRIBUTE_TYPE getAttributeType(const c8 *attributeName) const = 0; - //! Returns attribute type by index. - //! \param index: Index value, must be between 0 and getAttributeCount()-1. - virtual E_ATTRIBUTE_TYPE getAttributeType(s32 index) const = 0; - //! Returns if an attribute with a name exists virtual bool existsAttribute(const c8 *attributeName) const = 0; - //! Returns attribute index from name, -1 if not found - virtual s32 findAttribute(const c8 *attributeName) const = 0; - //! Removes all attributes virtual void clear() = 0; @@ -65,13 +51,6 @@ public: //! \return Returns value of the attribute previously set by setAttribute() virtual s32 getAttributeAsInt(const c8 *attributeName, irr::s32 defaultNotFound = 0) const = 0; - //! Gets an attribute as integer value - //! \param index: Index value, must be between 0 and getAttributeCount()-1. - virtual s32 getAttributeAsInt(s32 index) const = 0; - - //! Sets an attribute as integer value - virtual void setAttribute(s32 index, s32 value) = 0; - /* Float Attribute @@ -90,13 +69,6 @@ public: //! \return Returns value of the attribute previously set by setAttribute() virtual f32 getAttributeAsFloat(const c8 *attributeName, irr::f32 defaultNotFound = 0.f) const = 0; - //! Gets an attribute as float value - //! \param index: Index value, must be between 0 and getAttributeCount()-1. - virtual f32 getAttributeAsFloat(s32 index) const = 0; - - //! Sets an attribute as float value - virtual void setAttribute(s32 index, f32 value) = 0; - /* Bool Attribute */ @@ -112,13 +84,6 @@ public: //! \param defaultNotFound Value returned when attributeName was not found //! \return Returns value of the attribute previously set by setAttribute() virtual bool getAttributeAsBool(const c8 *attributeName, bool defaultNotFound = false) const = 0; - - //! Gets an attribute as boolean value - //! \param index: Index value, must be between 0 and getAttributeCount()-1. - virtual bool getAttributeAsBool(s32 index) const = 0; - - //! Sets an attribute as boolean value - virtual void setAttribute(s32 index, bool value) = 0; }; } // end namespace io diff --git a/irr/include/IEventReceiver.h b/irr/include/IEventReceiver.h index cf7dee3ab..a484bfb84 100644 --- a/irr/include/IEventReceiver.h +++ b/irr/include/IEventReceiver.h @@ -205,6 +205,9 @@ enum EAPPLICATION_EVENT_TYPE //! The application received a memory warning. EAET_MEMORY_WARNING, + //! The display density changed (only works on SDL). + EAET_DPI_CHANGED, + //! No real event, but to get number of event types. EAET_COUNT }; diff --git a/irr/include/IFileSystem.h b/irr/include/IFileSystem.h index 1fe9fe6f2..f144bbaee 100644 --- a/irr/include/IFileSystem.h +++ b/irr/include/IFileSystem.h @@ -85,113 +85,6 @@ public: See IReferenceCounted::drop() for more information. */ virtual IWriteFile *createAndWriteFile(const path &filename, bool append = false) = 0; - //! Adds an archive to the file system. - /** After calling this, the Irrlicht Engine will also search and open - files directly from this archive. This is useful for hiding data from - the end user, speeding up file access and making it possible to access - for example Quake3 .pk3 files, which are just renamed .zip files. By - default Irrlicht supports ZIP, PAK, TAR, PNK, and directories as - archives. You can provide your own archive types by implementing - IArchiveLoader and passing an instance to addArchiveLoader. - Irrlicht supports AES-encrypted zip files, and the advanced compression - techniques lzma and bzip2. - \param filename: Filename of the archive to add to the file system. - \param ignoreCase: If set to true, files in the archive can be accessed without - writing all letters in the right case. - \param ignorePaths: If set to true, files in the added archive can be accessed - without its complete path. - \param archiveType: If no specific E_FILE_ARCHIVE_TYPE is selected then - the type of archive will depend on the extension of the file name. If - you use a different extension then you can use this parameter to force - a specific type of archive. - \param password An optional password, which is used in case of encrypted archives. - \param retArchive A pointer that will be set to the archive that is added. - \return True if the archive was added successfully, false if not. */ - virtual bool addFileArchive(const path &filename, bool ignoreCase = true, - bool ignorePaths = true, - E_FILE_ARCHIVE_TYPE archiveType = EFAT_UNKNOWN, - const core::stringc &password = "", - IFileArchive **retArchive = 0) = 0; - - //! Adds an archive to the file system. - /** After calling this, the Irrlicht Engine will also search and open - files directly from this archive. This is useful for hiding data from - the end user, speeding up file access and making it possible to access - for example Quake3 .pk3 files, which are just renamed .zip files. By - default Irrlicht supports ZIP, PAK, TAR, PNK, and directories as - archives. You can provide your own archive types by implementing - IArchiveLoader and passing an instance to addArchiveLoader. - Irrlicht supports AES-encrypted zip files, and the advanced compression - techniques lzma and bzip2. - If you want to add a directory as an archive, prefix its name with a - slash in order to let Irrlicht recognize it as a folder mount (mypath/). - Using this technique one can build up a search order, because archives - are read first, and can be used more easily with relative filenames. - \param file: Archive to add to the file system. - \param ignoreCase: If set to true, files in the archive can be accessed without - writing all letters in the right case. - \param ignorePaths: If set to true, files in the added archive can be accessed - without its complete path. - \param archiveType: If no specific E_FILE_ARCHIVE_TYPE is selected then - the type of archive will depend on the extension of the file name. If - you use a different extension then you can use this parameter to force - a specific type of archive. - \param password An optional password, which is used in case of encrypted archives. - \param retArchive A pointer that will be set to the archive that is added. - \return True if the archive was added successfully, false if not. */ - virtual bool addFileArchive(IReadFile *file, bool ignoreCase = true, - bool ignorePaths = true, - E_FILE_ARCHIVE_TYPE archiveType = EFAT_UNKNOWN, - const core::stringc &password = "", - IFileArchive **retArchive = 0) = 0; - - //! Adds an archive to the file system. - /** \param archive: The archive to add to the file system. - \return True if the archive was added successfully, false if not. */ - virtual bool addFileArchive(IFileArchive *archive) = 0; - - //! Get the number of archives currently attached to the file system - virtual u32 getFileArchiveCount() const = 0; - - //! Removes an archive from the file system. - /** This will close the archive and free any file handles, but will not - close resources which have already been loaded and are now cached, for - example textures and meshes. - \param index: The index of the archive to remove - \return True on success, false on failure */ - virtual bool removeFileArchive(u32 index) = 0; - - //! Removes an archive from the file system. - /** This will close the archive and free any file handles, but will not - close resources which have already been loaded and are now cached, for - example textures and meshes. Note that a relative filename might be - interpreted differently on each call, depending on the current working - directory. In case you want to remove an archive that was added using - a relative path name, you have to change to the same working directory - again. This means, that the filename given on creation is not an - identifier for the archive, but just a usual filename that is used for - locating the archive to work with. - \param filename The archive pointed to by the name will be removed - \return True on success, false on failure */ - virtual bool removeFileArchive(const path &filename) = 0; - - //! Removes an archive from the file system. - /** This will close the archive and free any file handles, but will not - close resources which have already been loaded and are now cached, for - example textures and meshes. - \param archive The archive to remove. - \return True on success, false on failure */ - virtual bool removeFileArchive(const IFileArchive *archive) = 0; - - //! Changes the search order of attached archives. - /** - \param sourceIndex: The index of the archive to change - \param relative: The relative change in position, archives with a lower index are searched first */ - virtual bool moveFileArchive(u32 sourceIndex, s32 relative) = 0; - - //! Get the archive at a given index. - virtual IFileArchive *getFileArchive(u32 index) = 0; - //! Adds an external archive loader to the engine. /** Use this function to add support for new archive types to the engine, for example proprietary or encrypted file storage. */ diff --git a/irr/include/IGUIButton.h b/irr/include/IGUIButton.h index 0fbf866ac..8870f8b1c 100644 --- a/irr/include/IGUIButton.h +++ b/irr/include/IGUIButton.h @@ -200,7 +200,7 @@ public: \param loop: True if the animation should loop, false if not \param scale: True if the sprite should scale to button size, false if not */ virtual void setSprite(EGUI_BUTTON_STATE state, s32 index, - video::SColor color = video::SColor(255, 255, 255, 255), bool loop = false, bool scale = false) = 0; + video::SColor color = video::SColor(255, 255, 255, 255), bool loop = false) = 0; //! Get the sprite-index for the given state or -1 when no sprite is set virtual s32 getSpriteIndex(EGUI_BUTTON_STATE state) const = 0; @@ -211,9 +211,6 @@ public: //! Returns if the sprite in the given state does loop virtual bool getSpriteLoop(EGUI_BUTTON_STATE state) const = 0; - //! Returns if the sprite in the given state is scaled - virtual bool getSpriteScale(EGUI_BUTTON_STATE state) const = 0; - //! Sets if the button should behave like a push button. /** Which means it can be in two states: Normal or Pressed. With a click on the button, the user can change the state of the button. */ diff --git a/irr/include/IGUISkin.h b/irr/include/IGUISkin.h index 6ec456472..b323983ae 100644 --- a/irr/include/IGUISkin.h +++ b/irr/include/IGUISkin.h @@ -374,6 +374,12 @@ const c8 *const GUISkinFontNames[EGDF_COUNT + 1] = { class IGUISkin : virtual public IReferenceCounted { public: + //! returns display density scaling factor + virtual float getScale() const = 0; + + //! sets display density scaling factor + virtual void setScale(float scale) = 0; + //! returns default color virtual video::SColor getColor(EGUI_DEFAULT_COLOR color) const = 0; @@ -431,6 +437,10 @@ public: virtual void draw3DButtonPaneStandard(IGUIElement *element, const core::rect &rect, const core::rect *clip = 0) = 0; + virtual void drawColored3DButtonPaneStandard(IGUIElement* element, + const core::rect& rect, + const core::rect* clip=0, + const video::SColor* colors=0) = 0; //! draws a pressed 3d button pane /** Used for drawing for example buttons in pressed state. @@ -444,6 +454,10 @@ public: virtual void draw3DButtonPanePressed(IGUIElement *element, const core::rect &rect, const core::rect *clip = 0) = 0; + virtual void drawColored3DButtonPanePressed(IGUIElement* element, + const core::rect& rect, + const core::rect* clip=0, + const video::SColor* colors=0) = 0; //! draws a sunken 3d pane /** Used for drawing the background of edit, combo or check boxes. diff --git a/irr/include/IIndexBuffer.h b/irr/include/IIndexBuffer.h index 3d5b8e76a..01282f0c8 100644 --- a/irr/include/IIndexBuffer.h +++ b/irr/include/IIndexBuffer.h @@ -7,45 +7,39 @@ #include "IReferenceCounted.h" #include "irrArray.h" #include "EHardwareBufferFlags.h" +#include "EPrimitiveTypes.h" #include "SVertexIndex.h" namespace irr { -namespace video -{ - -} - namespace scene { class IIndexBuffer : public virtual IReferenceCounted { public: + //! Get type of index data which is stored in this meshbuffer. + /** \return Index type of this buffer. */ + virtual video::E_INDEX_TYPE getType() const = 0; + + //! Get access to indices. + /** \return Pointer to indices array. */ + virtual const void *getData() const = 0; + + //! Get access to indices. + /** \return Pointer to indices array. */ virtual void *getData() = 0; - virtual video::E_INDEX_TYPE getType() const = 0; - virtual void setType(video::E_INDEX_TYPE IndexType) = 0; - - virtual u32 stride() const = 0; - - virtual u32 size() const = 0; - virtual void push_back(const u32 &element) = 0; - virtual u32 operator[](u32 index) const = 0; - virtual u32 getLast() = 0; - virtual void setValue(u32 index, u32 value) = 0; - virtual void set_used(u32 usedNow) = 0; - virtual void reallocate(u32 new_size) = 0; - virtual u32 allocated_size() const = 0; - - virtual void *pointer() = 0; + //! Get amount of indices in this meshbuffer. + /** \return Number of indices in this buffer. */ + virtual u32 getCount() const = 0; //! get the current hardware mapping hint virtual E_HARDWARE_MAPPING getHardwareMappingHint() const = 0; //! set the hardware mapping hint, for driver - virtual void setHardwareMappingHint(E_HARDWARE_MAPPING NewMappingHint) = 0; + virtual void setHardwareMappingHint(E_HARDWARE_MAPPING newMappingHint) = 0; //! flags the meshbuffer as changed, reloads hardware buffers virtual void setDirty() = 0; @@ -53,6 +47,35 @@ public: //! Get the currently used ID for identification of changes. /** This shouldn't be used for anything outside the VideoDriver. */ virtual u32 getChangedID() const = 0; + + //! Used by the VideoDriver to remember the buffer link. + virtual void setHWBuffer(void *ptr) const = 0; + virtual void *getHWBuffer() const = 0; + + //! Calculate how many geometric primitives would be drawn + u32 getPrimitiveCount(E_PRIMITIVE_TYPE primitiveType) const + { + const u32 indexCount = getCount(); + switch (primitiveType) { + case scene::EPT_POINTS: + return indexCount; + case scene::EPT_LINE_STRIP: + return indexCount - 1; + case scene::EPT_LINE_LOOP: + return indexCount; + case scene::EPT_LINES: + return indexCount / 2; + case scene::EPT_TRIANGLE_STRIP: + return (indexCount - 2); + case scene::EPT_TRIANGLE_FAN: + return (indexCount - 2); + case scene::EPT_TRIANGLES: + return indexCount / 3; + case scene::EPT_POINT_SPRITES: + return indexCount; + } + return 0; + } }; } // end namespace scene diff --git a/irr/include/IMesh.h b/irr/include/IMesh.h index 6d06eb762..8ee180d5d 100644 --- a/irr/include/IMesh.h +++ b/irr/include/IMesh.h @@ -86,6 +86,17 @@ public: mesh buffer. */ virtual IMeshBuffer *getMeshBuffer(const video::SMaterial &material) const = 0; + //! Minetest binds textures (node tiles, object textures) to models. + // glTF allows multiple primitives (mesh buffers) to reference the same texture. + // This is reflected here: This function gets the texture slot for a mesh buffer. + /** \param meshbufNr: Zero based index of the mesh buffer. The maximum value is + getMeshBufferCount() - 1; + \return number of texture slot to bind to the given mesh buffer */ + virtual u32 getTextureSlot(u32 meshbufNr) const + { + return meshbufNr; + } + //! Get an axis aligned bounding box of the mesh. /** \return Bounding box of this mesh. */ virtual const core::aabbox3d &getBoundingBox() const = 0; diff --git a/irr/include/IMeshBuffer.h b/irr/include/IMeshBuffer.h index c69a12d1d..55c05211a 100644 --- a/irr/include/IMeshBuffer.h +++ b/irr/include/IMeshBuffer.h @@ -7,8 +7,8 @@ #include "IReferenceCounted.h" #include "SMaterial.h" #include "aabbox3d.h" -#include "S3DVertex.h" -#include "SVertexIndex.h" +#include "IVertexBuffer.h" +#include "IIndexBuffer.h" #include "EHardwareBufferFlags.h" #include "EPrimitiveTypes.h" @@ -46,39 +46,17 @@ public: /** \return Material of this buffer. */ virtual const video::SMaterial &getMaterial() const = 0; - //! Get type of vertex data which is stored in this meshbuffer. - /** \return Vertex type of this buffer. */ - virtual video::E_VERTEX_TYPE getVertexType() const = 0; + /// Get the vertex buffer + virtual const scene::IVertexBuffer *getVertexBuffer() const = 0; - //! Get access to vertex data. The data is an array of vertices. - /** Which vertex type is used can be determined by getVertexType(). - \return Pointer to array of vertices. */ - virtual const void *getVertices() const = 0; + /// Get the vertex buffer + virtual scene::IVertexBuffer *getVertexBuffer() = 0; - //! Get access to vertex data. The data is an array of vertices. - /** Which vertex type is used can be determined by getVertexType(). - \return Pointer to array of vertices. */ - virtual void *getVertices() = 0; + /// Get the index buffer + virtual const scene::IIndexBuffer *getIndexBuffer() const = 0; - //! Get amount of vertices in meshbuffer. - /** \return Number of vertices in this buffer. */ - virtual u32 getVertexCount() const = 0; - - //! Get type of index data which is stored in this meshbuffer. - /** \return Index type of this buffer. */ - virtual video::E_INDEX_TYPE getIndexType() const = 0; - - //! Get access to indices. - /** \return Pointer to indices array. */ - virtual const u16 *getIndices() const = 0; - - //! Get access to indices. - /** \return Pointer to indices array. */ - virtual u16 *getIndices() = 0; - - //! Get amount of indices in this meshbuffer. - /** \return Number of indices in this buffer. */ - virtual u32 getIndexCount() const = 0; + /// Get the index buffer + virtual scene::IIndexBuffer *getIndexBuffer() = 0; //! Get the axis aligned bounding box of this meshbuffer. /** \return Axis aligned bounding box of this buffer. */ @@ -92,24 +70,6 @@ public: //! Recalculates the bounding box. Should be called if the mesh changed. virtual void recalculateBoundingBox() = 0; - //! returns position of vertex i - virtual const core::vector3df &getPosition(u32 i) const = 0; - - //! returns position of vertex i - virtual core::vector3df &getPosition(u32 i) = 0; - - //! returns normal of vertex i - virtual const core::vector3df &getNormal(u32 i) const = 0; - - //! returns normal of vertex i - virtual core::vector3df &getNormal(u32 i) = 0; - - //! returns texture coord of vertex i - virtual const core::vector2df &getTCoords(u32 i) const = 0; - - //! returns texture coord of vertex i - virtual core::vector2df &getTCoords(u32 i) = 0; - //! Append the vertices and indices to the current buffer /** Only works for compatible vertex types. \param vertices Pointer to a vertex array. @@ -118,29 +78,123 @@ public: \param numIndices Number of indices in array. */ virtual void append(const void *const vertices, u32 numVertices, const u16 *const indices, u32 numIndices) = 0; - //! get the current hardware mapping hint - virtual E_HARDWARE_MAPPING getHardwareMappingHint_Vertex() const = 0; + /* Leftover functions that are now just helpers for accessing the respective buffer. */ - //! get the current hardware mapping hint - virtual E_HARDWARE_MAPPING getHardwareMappingHint_Index() const = 0; + //! Get type of vertex data which is stored in this meshbuffer. + /** \return Vertex type of this buffer. */ + inline video::E_VERTEX_TYPE getVertexType() const + { + return getVertexBuffer()->getType(); + } + + //! Get access to vertex data. The data is an array of vertices. + /** Which vertex type is used can be determined by getVertexType(). + \return Pointer to array of vertices. */ + inline const void *getVertices() const + { + return getVertexBuffer()->getData(); + } + + //! Get access to vertex data. The data is an array of vertices. + /** Which vertex type is used can be determined by getVertexType(). + \return Pointer to array of vertices. */ + inline void *getVertices() + { + return getVertexBuffer()->getData(); + } + + //! Get amount of vertices in meshbuffer. + /** \return Number of vertices in this buffer. */ + inline u32 getVertexCount() const + { + return getVertexBuffer()->getCount(); + } + + //! Get type of index data which is stored in this meshbuffer. + /** \return Index type of this buffer. */ + inline video::E_INDEX_TYPE getIndexType() const + { + return getIndexBuffer()->getType(); + } + + //! Get access to indices. + /** \return Pointer to indices array. */ + inline const u16 *getIndices() const + { + _IRR_DEBUG_BREAK_IF(getIndexBuffer()->getType() != video::EIT_16BIT); + return static_cast(getIndexBuffer()->getData()); + } + + //! Get access to indices. + /** \return Pointer to indices array. */ + inline u16 *getIndices() + { + _IRR_DEBUG_BREAK_IF(getIndexBuffer()->getType() != video::EIT_16BIT); + return static_cast(getIndexBuffer()->getData()); + } + + //! Get amount of indices in this meshbuffer. + /** \return Number of indices in this buffer. */ + inline u32 getIndexCount() const + { + return getIndexBuffer()->getCount(); + } + + //! returns position of vertex i + inline const core::vector3df &getPosition(u32 i) const + { + return getVertexBuffer()->getPosition(i); + } + + //! returns position of vertex i + inline core::vector3df &getPosition(u32 i) + { + return getVertexBuffer()->getPosition(i); + } + + //! returns normal of vertex i + inline const core::vector3df &getNormal(u32 i) const + { + return getVertexBuffer()->getNormal(i); + } + + //! returns normal of vertex i + inline core::vector3df &getNormal(u32 i) + { + return getVertexBuffer()->getNormal(i); + } + + //! returns texture coord of vertex i + inline const core::vector2df &getTCoords(u32 i) const + { + return getVertexBuffer()->getTCoords(i); + } + + //! returns texture coord of vertex i + inline core::vector2df &getTCoords(u32 i) + { + return getVertexBuffer()->getTCoords(i); + } //! set the hardware mapping hint, for driver - virtual void setHardwareMappingHint(E_HARDWARE_MAPPING newMappingHint, E_BUFFER_TYPE buffer = EBT_VERTEX_AND_INDEX) = 0; + inline void setHardwareMappingHint(E_HARDWARE_MAPPING newMappingHint, E_BUFFER_TYPE buffer = EBT_VERTEX_AND_INDEX) + { + if (buffer == EBT_VERTEX_AND_INDEX || buffer == EBT_VERTEX) + getVertexBuffer()->setHardwareMappingHint(newMappingHint); + if (buffer == EBT_VERTEX_AND_INDEX || buffer == EBT_INDEX) + getIndexBuffer()->setHardwareMappingHint(newMappingHint); + } //! flags the meshbuffer as changed, reloads hardware buffers - virtual void setDirty(E_BUFFER_TYPE buffer = EBT_VERTEX_AND_INDEX) = 0; + inline void setDirty(E_BUFFER_TYPE buffer = EBT_VERTEX_AND_INDEX) + { + if (buffer == EBT_VERTEX_AND_INDEX || buffer == EBT_VERTEX) + getVertexBuffer()->setDirty(); + if (buffer == EBT_VERTEX_AND_INDEX || buffer == EBT_INDEX) + getIndexBuffer()->setDirty(); + } - //! Get the currently used ID for identification of changes. - /** This shouldn't be used for anything outside the VideoDriver. */ - virtual u32 getChangedID_Vertex() const = 0; - - //! Get the currently used ID for identification of changes. - /** This shouldn't be used for anything outside the VideoDriver. */ - virtual u32 getChangedID_Index() const = 0; - - //! Used by the VideoDriver to remember the buffer link. - virtual void setHWBuffer(void *ptr) const = 0; - virtual void *getHWBuffer() const = 0; + /* End helpers */ //! Describe what kind of primitive geometry is used by the meshbuffer /** Note: Default is EPT_TRIANGLES. Using other types is fine for rendering. @@ -153,32 +207,13 @@ public: virtual E_PRIMITIVE_TYPE getPrimitiveType() const = 0; //! Calculate how many geometric primitives are used by this meshbuffer - virtual u32 getPrimitiveCount() const + u32 getPrimitiveCount() const { - const u32 indexCount = getIndexCount(); - switch (getPrimitiveType()) { - case scene::EPT_POINTS: - return indexCount; - case scene::EPT_LINE_STRIP: - return indexCount - 1; - case scene::EPT_LINE_LOOP: - return indexCount; - case scene::EPT_LINES: - return indexCount / 2; - case scene::EPT_TRIANGLE_STRIP: - return (indexCount - 2); - case scene::EPT_TRIANGLE_FAN: - return (indexCount - 2); - case scene::EPT_TRIANGLES: - return indexCount / 3; - case scene::EPT_POINT_SPRITES: - return indexCount; - } - return 0; + return getIndexBuffer()->getPrimitiveCount(getPrimitiveType()); } //! Calculate size of vertices and indices in memory - virtual size_t getSize() const + size_t getSize() const { size_t ret = 0; switch (getVertexType()) { diff --git a/irr/include/IReferenceCounted.h b/irr/include/IReferenceCounted.h index 6f85bb904..68aa20fb6 100644 --- a/irr/include/IReferenceCounted.h +++ b/irr/include/IReferenceCounted.h @@ -42,7 +42,7 @@ class IReferenceCounted public: //! Constructor. IReferenceCounted() : - DebugName(0), ReferenceCounter(1) + ReferenceCounter(1) { } @@ -51,6 +51,10 @@ public: { } + // Reference counted objects can be neither copied nor moved. + IReferenceCounted(const IReferenceCounted &) = delete; + IReferenceCounted &operator=(const IReferenceCounted &) = delete; + //! Grabs the object. Increments the reference counter by one. /** Someone who calls grab() to an object, should later also call drop() to it. If an object never gets as much drop() as @@ -132,6 +136,7 @@ public: return ReferenceCounter; } +#ifdef _DEBUG //! Returns the debug name of the object. /** The Debugname may only be set and changed by the object itself. This method should only be used in Debug mode. @@ -153,7 +158,10 @@ protected: private: //! The debug name. - const c8 *DebugName; + const c8 *DebugName = nullptr; +#endif + +private: //! The reference counter. Mutable to do reference counting on const objects. mutable s32 ReferenceCounter; diff --git a/irr/include/ISceneNode.h b/irr/include/ISceneNode.h index 7a03a2256..1eab3a3fd 100644 --- a/irr/include/ISceneNode.h +++ b/irr/include/ISceneNode.h @@ -10,6 +10,7 @@ #include "EDebugSceneTypes.h" #include "SMaterial.h" #include "irrString.h" +#include "irrArray.h" #include "aabbox3d.h" #include "matrix4.h" #include "IAttributes.h" diff --git a/irr/include/ISkinnedMesh.h b/irr/include/ISkinnedMesh.h index 9cc7469cb..bb611bba2 100644 --- a/irr/include/ISkinnedMesh.h +++ b/irr/include/ISkinnedMesh.h @@ -199,6 +199,9 @@ public: //! Adds a new meshbuffer to the mesh, access it as last one virtual SSkinMeshBuffer *addMeshBuffer() = 0; + //! Adds a new meshbuffer to the mesh, access it as last one + virtual void addMeshBuffer(SSkinMeshBuffer *meshbuf) = 0; + //! Adds a new joint to the mesh, access it as last one virtual SJoint *addJoint(SJoint *parent = 0) = 0; diff --git a/irr/include/IVertexBuffer.h b/irr/include/IVertexBuffer.h index a4ec5efd9..e5be83904 100644 --- a/irr/include/IVertexBuffer.h +++ b/irr/include/IVertexBuffer.h @@ -17,24 +17,47 @@ namespace scene class IVertexBuffer : public virtual IReferenceCounted { public: - virtual void *getData() = 0; + //! Get type of vertex data which is stored in this meshbuffer. + /** \return Vertex type of this buffer. */ virtual video::E_VERTEX_TYPE getType() const = 0; - virtual void setType(video::E_VERTEX_TYPE vertexType) = 0; - virtual u32 stride() const = 0; - virtual u32 size() const = 0; - virtual void push_back(const video::S3DVertex &element) = 0; - virtual video::S3DVertex &operator[](const u32 index) const = 0; - virtual video::S3DVertex &getLast() = 0; - virtual void set_used(u32 usedNow) = 0; - virtual void reallocate(u32 new_size) = 0; - virtual u32 allocated_size() const = 0; - virtual video::S3DVertex *pointer() = 0; + + //! Get access to vertex data. The data is an array of vertices. + /** Which vertex type is used can be determined by getVertexType(). + \return Pointer to array of vertices. */ + virtual const void *getData() const = 0; + + //! Get access to vertex data. The data is an array of vertices. + /** Which vertex type is used can be determined by getVertexType(). + \return Pointer to array of vertices. */ + virtual void *getData() = 0; + + //! Get amount of vertices in meshbuffer. + /** \return Number of vertices in this buffer. */ + virtual u32 getCount() const = 0; + + //! returns position of vertex i + virtual const core::vector3df &getPosition(u32 i) const = 0; + + //! returns position of vertex i + virtual core::vector3df &getPosition(u32 i) = 0; + + //! returns normal of vertex i + virtual const core::vector3df &getNormal(u32 i) const = 0; + + //! returns normal of vertex i + virtual core::vector3df &getNormal(u32 i) = 0; + + //! returns texture coord of vertex i + virtual const core::vector2df &getTCoords(u32 i) const = 0; + + //! returns texture coord of vertex i + virtual core::vector2df &getTCoords(u32 i) = 0; //! get the current hardware mapping hint virtual E_HARDWARE_MAPPING getHardwareMappingHint() const = 0; //! set the hardware mapping hint, for driver - virtual void setHardwareMappingHint(E_HARDWARE_MAPPING NewMappingHint) = 0; + virtual void setHardwareMappingHint(E_HARDWARE_MAPPING newMappingHint) = 0; //! flags the meshbuffer as changed, reloads hardware buffers virtual void setDirty() = 0; @@ -42,6 +65,10 @@ public: //! Get the currently used ID for identification of changes. /** This shouldn't be used for anything outside the VideoDriver. */ virtual u32 getChangedID() const = 0; + + //! Used by the VideoDriver to remember the buffer link. + virtual void setHWBuffer(void *ptr) const = 0; + virtual void *getHWBuffer() const = 0; }; } // end namespace scene diff --git a/irr/include/IVideoDriver.h b/irr/include/IVideoDriver.h index 2d651c6bf..af8d97fef 100644 --- a/irr/include/IVideoDriver.h +++ b/irr/include/IVideoDriver.h @@ -9,14 +9,16 @@ #include "ITexture.h" #include "irrArray.h" #include "matrix4.h" -#include "plane3d.h" #include "dimension2d.h" #include "position2d.h" -#include "IMeshBuffer.h" #include "EDriverTypes.h" #include "EDriverFeatures.h" +#include "EPrimitiveTypes.h" +#include "EVideoTypes.h" #include "SExposedVideoData.h" #include "SOverrideMaterial.h" +#include "S3DVertex.h" // E_VERTEX_TYPE +#include "SVertexIndex.h" // E_INDEX_TYPE namespace irr { @@ -29,6 +31,8 @@ class IWriteFile; namespace scene { class IMeshBuffer; +class IVertexBuffer; +class IIndexBuffer; class IMesh; class IMeshManipulator; class ISceneNode; @@ -36,77 +40,12 @@ class ISceneNode; namespace video { -struct S3DVertex; -struct S3DVertex2TCoords; -struct S3DVertexTangents; class IImageLoader; class IImageWriter; class IMaterialRenderer; class IGPUProgrammingServices; class IRenderTarget; -//! enumeration for geometry transformation states -enum E_TRANSFORMATION_STATE -{ - //! View transformation - ETS_VIEW = 0, - //! World transformation - ETS_WORLD, - //! Projection transformation - ETS_PROJECTION, - //! Texture 0 transformation - //! Use E_TRANSFORMATION_STATE(ETS_TEXTURE_0 + texture_number) to access other texture transformations - ETS_TEXTURE_0, - //! Only used internally - ETS_COUNT = ETS_TEXTURE_0 + MATERIAL_MAX_TEXTURES -}; - -//! Special render targets, which usually map to dedicated hardware -/** These render targets (besides 0 and 1) need not be supported by gfx cards */ -enum E_RENDER_TARGET -{ - //! Render target is the main color frame buffer - ERT_FRAME_BUFFER = 0, - //! Render target is a render texture - ERT_RENDER_TEXTURE, - //! Multi-Render target textures - ERT_MULTI_RENDER_TEXTURES, - //! Render target is the main color frame buffer - ERT_STEREO_LEFT_BUFFER, - //! Render target is the right color buffer (left is the main buffer) - ERT_STEREO_RIGHT_BUFFER, - //! Render to both stereo buffers at once - ERT_STEREO_BOTH_BUFFERS, - //! Auxiliary buffer 0 - ERT_AUX_BUFFER0, - //! Auxiliary buffer 1 - ERT_AUX_BUFFER1, - //! Auxiliary buffer 2 - ERT_AUX_BUFFER2, - //! Auxiliary buffer 3 - ERT_AUX_BUFFER3, - //! Auxiliary buffer 4 - ERT_AUX_BUFFER4 -}; - -//! Enum for the flags of clear buffer -enum E_CLEAR_BUFFER_FLAG -{ - ECBF_NONE = 0, - ECBF_COLOR = 1, - ECBF_DEPTH = 2, - ECBF_STENCIL = 4, - ECBF_ALL = ECBF_COLOR | ECBF_DEPTH | ECBF_STENCIL -}; - -//! Enum for the types of fog distributions to choose from -enum E_FOG_TYPE -{ - EFT_FOG_EXP = 0, - EFT_FOG_LINEAR, - EFT_FOG_EXP2 -}; - const c8 *const FogTypeNames[] = { "FogExp", "FogLinear", @@ -114,6 +53,17 @@ const c8 *const FogTypeNames[] = { 0, }; +struct SFrameStats { + //! Number of draw calls + u32 Drawcalls = 0; + //! Count of primitives drawn + u32 PrimitivesDrawn = 0; + //! Number of hardware buffers uploaded (new or updated) + u32 HWBuffersUploaded = 0; + //! Sum of uploaded hardware buffer size + u32 HWBuffersUploadedSize = 0; +}; + //! Interface to driver which is able to perform 2d and 3d graphics functions. /** This interface is one of the most important interfaces of the Irrlicht Engine: All rendering and texture manipulation is done with @@ -182,7 +132,6 @@ public: MaxSupportedTextures (int) The maximum number of simultaneous textures supported by the fixed function pipeline of the (hw) driver. The actual supported number of textures supported by the engine can be lower. MaxLights (int) Number of hardware lights supported in the fixed function pipeline of the driver, typically 6-8. Use light manager or deferred shading for more. MaxAnisotropy (int) Number of anisotropy levels supported for filtering. At least 1, max is typically at 16 or 32. - MaxUserClipPlanes (int) Number of additional clip planes, which can be set by the user via dedicated driver methods. MaxAuxBuffers (int) Special render buffers, which are currently not really usable inside Irrlicht. Only supported by OpenGL MaxMultipleRenderTargets (int) Number of render targets which can be bound simultaneously. Rendering to MRTs is done via shaders. MaxIndices (int) Number of indices which can be used in one render call (i.e. one mesh buffer). @@ -195,12 +144,6 @@ public: */ virtual const io::IAttributes &getDriverAttributes() const = 0; - //! Check if the driver was recently reset. - /** For d3d devices you will need to recreate the RTTs if the - driver was reset. Should be queried right after beginScene(). - */ - virtual bool checkDriverReset() = 0; - //! Sets transformation matrices. /** \param state Transformation type to be set, e.g. view, world, or projection. @@ -360,7 +303,10 @@ public: virtual void removeAllTextures() = 0; //! Remove hardware buffer - virtual void removeHardwareBuffer(const scene::IMeshBuffer *mb) = 0; + virtual void removeHardwareBuffer(const scene::IVertexBuffer *vb) = 0; + + //! Remove hardware buffer + virtual void removeHardwareBuffer(const scene::IIndexBuffer *ib) = 0; //! Remove all hardware buffers virtual void removeAllHardwareBuffers() = 0; @@ -799,6 +745,17 @@ public: /** \param mb Buffer to draw */ virtual void drawMeshBuffer(const scene::IMeshBuffer *mb) = 0; + /** + * Draws a mesh from individual vertex and index buffers. + * @param vb vertices to use + * @param ib indices to use + * @param primCount amount of primitives + * @param pType primitive type + */ + virtual void drawBuffers(const scene::IVertexBuffer *vb, + const scene::IIndexBuffer *ib, u32 primCount, + scene::E_PRIMITIVE_TYPE pType = scene::EPT_TRIANGLES) = 0; + //! Draws normals of a mesh buffer /** \param mb Buffer to draw the normals of \param length length scale factor of the normals @@ -856,12 +813,8 @@ public: \return Approximate amount of frames per second drawn. */ virtual s32 getFPS() const = 0; - //! Returns amount of primitives (mostly triangles) which were drawn in the last frame. - /** Together with getFPS() very useful method for statistics. - \param mode Defines if the primitives drawn are accumulated or - counted per frame. - \return Amount of primitives drawn in the last frame. */ - virtual u32 getPrimitiveCountDrawn(u32 mode = 0) const = 0; + //! Return some statistics about the last frame + virtual SFrameStats getFrameStats() const = 0; //! Gets name of this video driver. /** \return Returns the name of the video driver, e.g. in case @@ -1109,26 +1062,6 @@ public: \return Pointer to loaded texture, or 0 if not found. */ virtual video::ITexture *findTexture(const io::path &filename) = 0; - //! Set or unset a clipping plane. - /** There are at least 6 clipping planes available for the user - to set at will. - \param index The plane index. Must be between 0 and - MaxUserClipPlanes. - \param plane The plane itself. - \param enable If true, enable the clipping plane else disable - it. - \return True if the clipping plane is usable. */ - virtual bool setClipPlane(u32 index, const core::plane3df &plane, bool enable = false) = 0; - - //! Enable or disable a clipping plane. - /** There are at least 6 clipping planes available for the user - to set at will. - \param index The plane index. Must be between 0 and - MaxUserClipPlanes. - \param enable If true, enable the clipping plane else disable - it. */ - virtual void enableClipPlane(u32 index, bool enable) = 0; - //! Set the minimum number of vertices for which a hw buffer will be created /** \param count Number of vertices to set as minimum. */ virtual void setMinHardwareBufferVertexCount(u32 count) = 0; diff --git a/irr/include/IrrlichtDevice.h b/irr/include/IrrlichtDevice.h index 11619010c..777a23420 100644 --- a/irr/include/IrrlichtDevice.h +++ b/irr/include/IrrlichtDevice.h @@ -6,14 +6,16 @@ #include "IReferenceCounted.h" #include "dimension2d.h" -#include "IVideoDriver.h" #include "EDriverTypes.h" #include "EDeviceTypes.h" #include "IEventReceiver.h" #include "ICursorControl.h" #include "ITimer.h" #include "IOSOperator.h" +#include "irrArray.h" #include "IrrCompileConfig.h" +#include "position2d.h" +#include "SColor.h" // video::ECOLOR_FORMAT namespace irr { @@ -38,6 +40,9 @@ class ISceneManager; namespace video { class IContextManager; +class IImage; +class ITexture; +class IVideoDriver; extern "C" IRRLICHT_API bool IRRCALLCONV isDriverSupported(E_DRIVER_TYPE driver); } // end namespace video diff --git a/irr/include/SAnimatedMesh.h b/irr/include/SAnimatedMesh.h index 8fdaae0ee..8fe14b41f 100644 --- a/irr/include/SAnimatedMesh.h +++ b/irr/include/SAnimatedMesh.h @@ -4,10 +4,10 @@ #pragma once +#include #include "IAnimatedMesh.h" #include "IMesh.h" #include "aabbox3d.h" -#include "irrArray.h" namespace irr { @@ -15,7 +15,7 @@ namespace scene { //! Simple implementation of the IAnimatedMesh interface. -struct SAnimatedMesh : public IAnimatedMesh +struct SAnimatedMesh final : public IAnimatedMesh { //! constructor SAnimatedMesh(scene::IMesh *mesh = 0, scene::E_ANIMATED_MESH_TYPE type = scene::EAMT_UNKNOWN) : @@ -32,15 +32,15 @@ struct SAnimatedMesh : public IAnimatedMesh virtual ~SAnimatedMesh() { // drop meshes - for (u32 i = 0; i < Meshes.size(); ++i) - Meshes[i]->drop(); + for (auto *mesh : Meshes) + mesh->drop(); } //! Gets the frame count of the animated mesh. /** \return Amount of frames. If the amount is 1, it is a static, non animated mesh. */ u32 getFrameCount() const override { - return Meshes.size(); + return static_cast(Meshes.size()); } //! Gets the default animation speed of the animated mesh. @@ -161,7 +161,7 @@ struct SAnimatedMesh : public IAnimatedMesh } //! All meshes defining the animated mesh - core::array Meshes; + std::vector Meshes; //! The bounding box of this mesh core::aabbox3d Box; diff --git a/irr/include/SMaterial.h b/irr/include/SMaterial.h index c803f5fde..cceccad78 100644 --- a/irr/include/SMaterial.h +++ b/irr/include/SMaterial.h @@ -6,7 +6,6 @@ #include "SColor.h" #include "matrix4.h" -#include "irrArray.h" #include "irrMath.h" #include "EMaterialTypes.h" #include "EMaterialProps.h" @@ -195,29 +194,6 @@ enum E_ANTI_ALIASING_MODE EAAM_ALPHA_TO_COVERAGE = 4 }; -//! These flags allow to define the interpretation of vertex color when lighting is enabled -/** Without lighting being enabled the vertex color is the only value defining the fragment color. -Once lighting is enabled, the four values for diffuse, ambient, emissive, and specular take over. -With these flags it is possible to define which lighting factor shall be defined by the vertex color -instead of the lighting factor which is the same for all faces of that material. -The default is to use vertex color for the diffuse value, another pretty common value is to use -vertex color for both diffuse and ambient factor. */ -enum E_COLOR_MATERIAL -{ - //! Don't use vertex color for lighting - ECM_NONE = 0, - //! Use vertex color for diffuse light, this is default - ECM_DIFFUSE, - //! Use vertex color for ambient light - ECM_AMBIENT, - //! Use vertex color for emissive light - ECM_EMISSIVE, - //! Use vertex color for specular light - ECM_SPECULAR, - //! Use vertex color for both diffuse and ambient light - ECM_DIFFUSE_AND_AMBIENT -}; - //! Names for polygon offset direction const c8 *const PolygonOffsetDirectionNames[] = { "Back", @@ -263,16 +239,14 @@ class SMaterial public: //! Default constructor. Creates a solid, lit material with white colors SMaterial() : - MaterialType(EMT_SOLID), AmbientColor(255, 255, 255, 255), - DiffuseColor(255, 255, 255, 255), EmissiveColor(0, 0, 0, 0), - SpecularColor(255, 255, 255, 255), Shininess(0.0f), + MaterialType(EMT_SOLID), ColorParam(0, 0, 0, 0), MaterialTypeParam(0.0f), Thickness(1.0f), ZBuffer(ECFN_LESSEQUAL), - AntiAliasing(EAAM_SIMPLE), ColorMask(ECP_ALL), ColorMaterial(ECM_DIFFUSE), + AntiAliasing(EAAM_SIMPLE), ColorMask(ECP_ALL), BlendOperation(EBO_NONE), BlendFactor(0.0f), PolygonOffsetDepthBias(0.f), PolygonOffsetSlopeScale(0.f), Wireframe(false), PointCloud(false), - GouraudShading(true), Lighting(true), ZWriteEnable(EZW_AUTO), + ZWriteEnable(EZW_AUTO), BackfaceCulling(true), FrontfaceCulling(false), FogEnable(false), - NormalizeNormals(false), UseMipMaps(true) + UseMipMaps(true) { } @@ -282,42 +256,9 @@ public: //! Type of the material. Specifies how everything is blended together E_MATERIAL_TYPE MaterialType; - //! How much ambient light (a global light) is reflected by this material. - /** The default is full white, meaning objects are completely - globally illuminated. Reduce this if you want to see diffuse - or specular light effects. */ - SColor AmbientColor; - - //! How much diffuse light coming from a light source is reflected by this material. - /** The default is full white. */ - SColor DiffuseColor; - - //! Light emitted by this material. Default is to emit no light. - SColor EmissiveColor; - - //! How much specular light (highlights from a light) is reflected. - /** The default is to reflect white specular light. See - SMaterial::Shininess on how to enable specular lights. */ - SColor SpecularColor; - - //! Value affecting the size of specular highlights. - /** A value of 20 is common. If set to 0, no specular - highlights are being used. To activate, simply set the - shininess of a material to a value in the range [0.5;128]: - \code - sceneNode->getMaterial(0).Shininess = 20.0f; - \endcode - - You can change the color of the highlights using - \code - sceneNode->getMaterial(0).SpecularColor.set(255,255,255,255); - \endcode - - The specular color of the dynamic lights - (SLight::SpecularColor) will influence the the highlight color - too, but they are set to a useful value by default when - creating the light scene node.*/ - f32 Shininess; + //! Custom color parameter, can be used by custom shader materials. + // See MainShaderConstantSetter in Minetest. + SColor ColorParam; //! Free parameter, dependent on the material type. /** Mostly ignored, used for example in @@ -345,14 +286,6 @@ public: depth or stencil buffer, or using Red and Green for Stereo rendering. */ u8 ColorMask : 4; - //! Defines the interpretation of vertex color in the lighting equation - /** Values should be chosen from E_COLOR_MATERIAL. - When lighting is enabled, vertex color can be used instead of the - material values for light modulation. This allows to easily change e.g. the - diffuse light behavior of each face. The default, ECM_DIFFUSE, will result in - a very similar rendering as with lighting turned off, just with light shading. */ - u8 ColorMaterial : 3; - //! Store the blend operation of choice /** Values to be chosen from E_BLEND_OPERATION. */ E_BLEND_OPERATION BlendOperation : 4; @@ -393,12 +326,6 @@ public: //! Draw as point cloud or filled triangles? Default: false bool PointCloud : 1; - //! Flat or Gouraud shading? Default: true - bool GouraudShading : 1; - - //! Will this material be lighted? Default: true - bool Lighting : 1; - //! Is the zbuffer writable or is it read-only. Default: EZW_AUTO. /** If this parameter is not EZW_OFF, you probably also want to set ZBuffer to values other than ECFN_DISABLED */ @@ -413,10 +340,6 @@ public: //! Is fog enabled? Default: false bool FogEnable : 1; - //! Should normals be normalized? - /** Always use this if the mesh lit and scaled. Default: false */ - bool NormalizeNormals : 1; - //! Shall mipmaps be used if available /** Sometimes, disabling mipmap usage can be useful. Default: true */ bool UseMipMaps : 1; @@ -487,26 +410,17 @@ public: { bool different = MaterialType != b.MaterialType || - AmbientColor != b.AmbientColor || - DiffuseColor != b.DiffuseColor || - EmissiveColor != b.EmissiveColor || - SpecularColor != b.SpecularColor || - Shininess != b.Shininess || MaterialTypeParam != b.MaterialTypeParam || Thickness != b.Thickness || Wireframe != b.Wireframe || PointCloud != b.PointCloud || - GouraudShading != b.GouraudShading || - Lighting != b.Lighting || ZBuffer != b.ZBuffer || ZWriteEnable != b.ZWriteEnable || BackfaceCulling != b.BackfaceCulling || FrontfaceCulling != b.FrontfaceCulling || FogEnable != b.FogEnable || - NormalizeNormals != b.NormalizeNormals || AntiAliasing != b.AntiAliasing || ColorMask != b.ColorMask || - ColorMaterial != b.ColorMaterial || BlendOperation != b.BlendOperation || BlendFactor != b.BlendFactor || PolygonOffsetDepthBias != b.PolygonOffsetDepthBias || diff --git a/irr/include/SMesh.h b/irr/include/SMesh.h index e865a5d2d..15fa65115 100644 --- a/irr/include/SMesh.h +++ b/irr/include/SMesh.h @@ -4,17 +4,17 @@ #pragma once +#include #include "IMesh.h" #include "IMeshBuffer.h" #include "aabbox3d.h" -#include "irrArray.h" namespace irr { namespace scene { //! Simple implementation of the IMesh interface. -struct SMesh : public IMesh +struct SMesh final : public IMesh { //! constructor SMesh() @@ -28,15 +28,15 @@ struct SMesh : public IMesh virtual ~SMesh() { // drop buffers - for (u32 i = 0; i < MeshBuffers.size(); ++i) - MeshBuffers[i]->drop(); + for (auto *buf : MeshBuffers) + buf->drop(); } //! clean mesh virtual void clear() { - for (u32 i = 0; i < MeshBuffers.size(); ++i) - MeshBuffers[i]->drop(); + for (auto *buf : MeshBuffers) + buf->drop(); MeshBuffers.clear(); BoundingBox.reset(0.f, 0.f, 0.f); } @@ -44,7 +44,7 @@ struct SMesh : public IMesh //! returns amount of mesh buffers. u32 getMeshBufferCount() const override { - return MeshBuffers.size(); + return static_cast(MeshBuffers.size()); } //! returns pointer to a mesh buffer @@ -57,14 +57,24 @@ struct SMesh : public IMesh /** reverse search */ IMeshBuffer *getMeshBuffer(const video::SMaterial &material) const override { - for (s32 i = (s32)MeshBuffers.size() - 1; i >= 0; --i) { - if (material == MeshBuffers[i]->getMaterial()) - return MeshBuffers[i]; + for (auto it = MeshBuffers.rbegin(); it != MeshBuffers.rend(); it++) { + if (material == (*it)->getMaterial()) + return *it; } - - return 0; + return nullptr; } + u32 getTextureSlot(u32 meshbufNr) const override + { + return TextureSlots.at(meshbufNr); + } + + void setTextureSlot(u32 meshbufNr, u32 textureSlot) + { + TextureSlots.at(meshbufNr) = textureSlot; + } + + //! returns an axis aligned bounding box const core::aabbox3d &getBoundingBox() const override { @@ -81,8 +91,8 @@ struct SMesh : public IMesh void recalculateBoundingBox() { bool hasMeshBufferBBox = false; - for (u32 i = 0; i < MeshBuffers.size(); ++i) { - const core::aabbox3df &bb = MeshBuffers[i]->getBoundingBox(); + for (auto *buf : MeshBuffers) { + const core::aabbox3df &bb = buf->getBoundingBox(); if (!bb.isEmpty()) { if (!hasMeshBufferBBox) { hasMeshBufferBBox = true; @@ -104,25 +114,28 @@ struct SMesh : public IMesh if (buf) { buf->grab(); MeshBuffers.push_back(buf); + TextureSlots.push_back(getMeshBufferCount() - 1); } } //! set the hardware mapping hint, for driver void setHardwareMappingHint(E_HARDWARE_MAPPING newMappingHint, E_BUFFER_TYPE buffer = EBT_VERTEX_AND_INDEX) override { - for (u32 i = 0; i < MeshBuffers.size(); ++i) - MeshBuffers[i]->setHardwareMappingHint(newMappingHint, buffer); + for (auto *buf : MeshBuffers) + buf->setHardwareMappingHint(newMappingHint, buffer); } //! flags the meshbuffer as changed, reloads hardware buffers void setDirty(E_BUFFER_TYPE buffer = EBT_VERTEX_AND_INDEX) override { - for (u32 i = 0; i < MeshBuffers.size(); ++i) - MeshBuffers[i]->setDirty(buffer); + for (auto *buf : MeshBuffers) + buf->setDirty(buffer); } //! The meshbuffers of this mesh - core::array MeshBuffers; + std::vector MeshBuffers; + //! Mapping from meshbuffer number to bindable texture slot + std::vector TextureSlots; //! The bounding box of this mesh core::aabbox3d BoundingBox; diff --git a/irr/include/SOverrideMaterial.h b/irr/include/SOverrideMaterial.h index 6de6e6ebb..1ae324211 100644 --- a/irr/include/SOverrideMaterial.h +++ b/irr/include/SOverrideMaterial.h @@ -4,6 +4,7 @@ #pragma once +#include #include "SMaterial.h" namespace irr @@ -57,7 +58,7 @@ struct SOverrideMaterial }; //! To overwrite SMaterial::MaterialType - core::array MaterialTypes; + std::vector MaterialTypes; //! Default constructor SOverrideMaterial() : @@ -83,9 +84,8 @@ struct SOverrideMaterial void apply(SMaterial &material) { if (Enabled) { - for (u32 i = 0; i < MaterialTypes.size(); ++i) { - const SMaterialTypeReplacement &mtr = MaterialTypes[i]; - if (mtr.Original < 0 || (s32)mtr.Original == material.MaterialType) + for (const auto &mtr : MaterialTypes) { + if (mtr.Original < 0 || mtr.Original == (s32)material.MaterialType) material.MaterialType = (E_MATERIAL_TYPE)mtr.Replacement; } for (u32 f = 0; f < 32; ++f) { @@ -98,12 +98,6 @@ struct SOverrideMaterial case EMP_POINTCLOUD: material.PointCloud = Material.PointCloud; break; - case EMP_GOURAUD_SHADING: - material.GouraudShading = Material.GouraudShading; - break; - case EMP_LIGHTING: - material.Lighting = Material.Lighting; - break; case EMP_ZBUFFER: material.ZBuffer = Material.ZBuffer; break; @@ -140,9 +134,6 @@ struct SOverrideMaterial case EMP_FOG_ENABLE: material.FogEnable = Material.FogEnable; break; - case EMP_NORMALIZE_NORMALS: - material.NormalizeNormals = Material.NormalizeNormals; - break; case EMP_TEXTURE_WRAP: for (u32 i = 0; i < MATERIAL_MAX_TEXTURES; ++i) { if (EnableLayerProps[i]) { @@ -158,9 +149,6 @@ struct SOverrideMaterial case EMP_COLOR_MASK: material.ColorMask = Material.ColorMask; break; - case EMP_COLOR_MATERIAL: - material.ColorMaterial = Material.ColorMaterial; - break; case EMP_USE_MIP_MAPS: material.UseMipMaps = Material.UseMipMaps; break; diff --git a/irr/include/SSkinMeshBuffer.h b/irr/include/SSkinMeshBuffer.h index 5ced6057d..303207d93 100644 --- a/irr/include/SSkinMeshBuffer.h +++ b/irr/include/SSkinMeshBuffer.h @@ -5,7 +5,10 @@ #pragma once #include "IMeshBuffer.h" +#include "CVertexBuffer.h" +#include "CIndexBuffer.h" #include "S3DVertex.h" +#include "irrArray.h" namespace irr { @@ -13,19 +16,36 @@ namespace scene { //! A mesh buffer able to choose between S3DVertex2TCoords, S3DVertex and S3DVertexTangents at runtime -struct SSkinMeshBuffer : public IMeshBuffer +struct SSkinMeshBuffer final : public IMeshBuffer { //! Default constructor SSkinMeshBuffer(video::E_VERTEX_TYPE vt = video::EVT_STANDARD) : - ChangedID_Vertex(1), ChangedID_Index(1), VertexType(vt), - PrimitiveType(EPT_TRIANGLES), - MappingHint_Vertex(EHM_NEVER), MappingHint_Index(EHM_NEVER), - HWBuffer(NULL), + VertexType(vt), PrimitiveType(EPT_TRIANGLES), BoundingBoxNeedsRecalculated(true) { #ifdef _DEBUG setDebugName("SSkinMeshBuffer"); #endif + Vertices_Tangents = new SVertexBufferTangents(); + Vertices_2TCoords = new SVertexBufferLightMap(); + Vertices_Standard = new SVertexBuffer(); + Indices = new SIndexBuffer(); + } + + //! Constructor for standard vertices + SSkinMeshBuffer(std::vector &&vertices, std::vector &&indices) : + SSkinMeshBuffer() + { + Vertices_Standard->Data = std::move(vertices); + Indices->Data = std::move(indices); + } + + ~SSkinMeshBuffer() + { + Vertices_Tangents->drop(); + Vertices_2TCoords->drop(); + Vertices_Standard->drop(); + Indices->drop(); } //! Get Material of this buffer. @@ -40,83 +60,53 @@ struct SSkinMeshBuffer : public IMeshBuffer return Material; } + const scene::IVertexBuffer *getVertexBuffer() const override + { + switch (VertexType) { + case video::EVT_2TCOORDS: + return Vertices_2TCoords; + case video::EVT_TANGENTS: + return Vertices_Tangents; + default: + return Vertices_Standard; + } + } + + scene::IVertexBuffer *getVertexBuffer() override + { + switch (VertexType) { + case video::EVT_2TCOORDS: + return Vertices_2TCoords; + case video::EVT_TANGENTS: + return Vertices_Tangents; + default: + return Vertices_Standard; + } + } + + const scene::IIndexBuffer *getIndexBuffer() const override + { + return Indices; + } + + scene::IIndexBuffer *getIndexBuffer() override + { + return Indices; + } + //! Get standard vertex at given index virtual video::S3DVertex *getVertex(u32 index) { switch (VertexType) { case video::EVT_2TCOORDS: - return (video::S3DVertex *)&Vertices_2TCoords[index]; + return &Vertices_2TCoords->Data[index]; case video::EVT_TANGENTS: - return (video::S3DVertex *)&Vertices_Tangents[index]; + return &Vertices_Tangents->Data[index]; default: - return &Vertices_Standard[index]; + return &Vertices_Standard->Data[index]; } } - //! Get pointer to vertex array - const void *getVertices() const override - { - switch (VertexType) { - case video::EVT_2TCOORDS: - return Vertices_2TCoords.const_pointer(); - case video::EVT_TANGENTS: - return Vertices_Tangents.const_pointer(); - default: - return Vertices_Standard.const_pointer(); - } - } - - //! Get pointer to vertex array - void *getVertices() override - { - switch (VertexType) { - case video::EVT_2TCOORDS: - return Vertices_2TCoords.pointer(); - case video::EVT_TANGENTS: - return Vertices_Tangents.pointer(); - default: - return Vertices_Standard.pointer(); - } - } - - //! Get vertex count - u32 getVertexCount() const override - { - switch (VertexType) { - case video::EVT_2TCOORDS: - return Vertices_2TCoords.size(); - case video::EVT_TANGENTS: - return Vertices_Tangents.size(); - default: - return Vertices_Standard.size(); - } - } - - //! Get type of index data which is stored in this meshbuffer. - /** \return Index type of this buffer. */ - video::E_INDEX_TYPE getIndexType() const override - { - return video::EIT_16BIT; - } - - //! Get pointer to index array - const u16 *getIndices() const override - { - return Indices.const_pointer(); - } - - //! Get pointer to index array - u16 *getIndices() override - { - return Indices.pointer(); - } - - //! Get index count - u32 getIndexCount() const override - { - return Indices.size(); - } - //! Get bounding box const core::aabbox3d &getBoundingBox() const override { @@ -129,6 +119,28 @@ struct SSkinMeshBuffer : public IMeshBuffer BoundingBox = box; } +private: + template void recalculateBoundingBox(const CVertexBuffer *buf) + { + if (!buf->getCount()) { + BoundingBox.reset(0, 0, 0); + } else { + auto &vertices = buf->Data; + BoundingBox.reset(vertices[0].Pos); + for (size_t i = 1; i < vertices.size(); ++i) + BoundingBox.addInternalPoint(vertices[i].Pos); + } + } + + template static void copyVertex(const T1 &src, T2 &dst) + { + dst.Pos = src.Pos; + dst.Normal = src.Normal; + dst.Color = src.Color; + dst.TCoords = src.TCoords; + } +public: + //! Recalculate bounding box void recalculateBoundingBox() override { @@ -139,57 +151,30 @@ struct SSkinMeshBuffer : public IMeshBuffer switch (VertexType) { case video::EVT_STANDARD: { - if (Vertices_Standard.empty()) - BoundingBox.reset(0, 0, 0); - else { - BoundingBox.reset(Vertices_Standard[0].Pos); - for (u32 i = 1; i < Vertices_Standard.size(); ++i) - BoundingBox.addInternalPoint(Vertices_Standard[i].Pos); - } + recalculateBoundingBox(Vertices_Standard); break; } case video::EVT_2TCOORDS: { - if (Vertices_2TCoords.empty()) - BoundingBox.reset(0, 0, 0); - else { - BoundingBox.reset(Vertices_2TCoords[0].Pos); - for (u32 i = 1; i < Vertices_2TCoords.size(); ++i) - BoundingBox.addInternalPoint(Vertices_2TCoords[i].Pos); - } + recalculateBoundingBox(Vertices_2TCoords); break; } case video::EVT_TANGENTS: { - if (Vertices_Tangents.empty()) - BoundingBox.reset(0, 0, 0); - else { - BoundingBox.reset(Vertices_Tangents[0].Pos); - for (u32 i = 1; i < Vertices_Tangents.size(); ++i) - BoundingBox.addInternalPoint(Vertices_Tangents[i].Pos); - } + recalculateBoundingBox(Vertices_Tangents); break; } } } - //! Get vertex type - video::E_VERTEX_TYPE getVertexType() const override - { - return VertexType; - } - //! Convert to 2tcoords vertex type void convertTo2TCoords() { if (VertexType == video::EVT_STANDARD) { - for (u32 n = 0; n < Vertices_Standard.size(); ++n) { - video::S3DVertex2TCoords Vertex; - Vertex.Color = Vertices_Standard[n].Color; - Vertex.Pos = Vertices_Standard[n].Pos; - Vertex.Normal = Vertices_Standard[n].Normal; - Vertex.TCoords = Vertices_Standard[n].TCoords; - Vertices_2TCoords.push_back(Vertex); + video::S3DVertex2TCoords Vertex; + for (const auto &Vertex_Standard : Vertices_Standard->Data) { + copyVertex(Vertex_Standard, Vertex); + Vertices_2TCoords->Data.push_back(Vertex); } - Vertices_Standard.clear(); + Vertices_Standard->Data.clear(); VertexType = video::EVT_2TCOORDS; } } @@ -198,134 +183,28 @@ struct SSkinMeshBuffer : public IMeshBuffer void convertToTangents() { if (VertexType == video::EVT_STANDARD) { - for (u32 n = 0; n < Vertices_Standard.size(); ++n) { - video::S3DVertexTangents Vertex; - Vertex.Color = Vertices_Standard[n].Color; - Vertex.Pos = Vertices_Standard[n].Pos; - Vertex.Normal = Vertices_Standard[n].Normal; - Vertex.TCoords = Vertices_Standard[n].TCoords; - Vertices_Tangents.push_back(Vertex); + video::S3DVertexTangents Vertex; + for (const auto &Vertex_Standard : Vertices_Standard->Data) { + copyVertex(Vertex_Standard, Vertex); + Vertices_Tangents->Data.push_back(Vertex); } - Vertices_Standard.clear(); + Vertices_Standard->Data.clear(); VertexType = video::EVT_TANGENTS; } else if (VertexType == video::EVT_2TCOORDS) { - for (u32 n = 0; n < Vertices_2TCoords.size(); ++n) { - video::S3DVertexTangents Vertex; - Vertex.Color = Vertices_2TCoords[n].Color; - Vertex.Pos = Vertices_2TCoords[n].Pos; - Vertex.Normal = Vertices_2TCoords[n].Normal; - Vertex.TCoords = Vertices_2TCoords[n].TCoords; - Vertices_Tangents.push_back(Vertex); + video::S3DVertexTangents Vertex; + for (const auto &Vertex_2TCoords : Vertices_2TCoords->Data) { + copyVertex(Vertex_2TCoords, Vertex); + Vertices_Tangents->Data.push_back(Vertex); } - Vertices_2TCoords.clear(); + Vertices_2TCoords->Data.clear(); VertexType = video::EVT_TANGENTS; } } - //! returns position of vertex i - const core::vector3df &getPosition(u32 i) const override - { - switch (VertexType) { - case video::EVT_2TCOORDS: - return Vertices_2TCoords[i].Pos; - case video::EVT_TANGENTS: - return Vertices_Tangents[i].Pos; - default: - return Vertices_Standard[i].Pos; - } - } - - //! returns position of vertex i - core::vector3df &getPosition(u32 i) override - { - switch (VertexType) { - case video::EVT_2TCOORDS: - return Vertices_2TCoords[i].Pos; - case video::EVT_TANGENTS: - return Vertices_Tangents[i].Pos; - default: - return Vertices_Standard[i].Pos; - } - } - - //! returns normal of vertex i - const core::vector3df &getNormal(u32 i) const override - { - switch (VertexType) { - case video::EVT_2TCOORDS: - return Vertices_2TCoords[i].Normal; - case video::EVT_TANGENTS: - return Vertices_Tangents[i].Normal; - default: - return Vertices_Standard[i].Normal; - } - } - - //! returns normal of vertex i - core::vector3df &getNormal(u32 i) override - { - switch (VertexType) { - case video::EVT_2TCOORDS: - return Vertices_2TCoords[i].Normal; - case video::EVT_TANGENTS: - return Vertices_Tangents[i].Normal; - default: - return Vertices_Standard[i].Normal; - } - } - - //! returns texture coords of vertex i - const core::vector2df &getTCoords(u32 i) const override - { - switch (VertexType) { - case video::EVT_2TCOORDS: - return Vertices_2TCoords[i].TCoords; - case video::EVT_TANGENTS: - return Vertices_Tangents[i].TCoords; - default: - return Vertices_Standard[i].TCoords; - } - } - - //! returns texture coords of vertex i - core::vector2df &getTCoords(u32 i) override - { - switch (VertexType) { - case video::EVT_2TCOORDS: - return Vertices_2TCoords[i].TCoords; - case video::EVT_TANGENTS: - return Vertices_Tangents[i].TCoords; - default: - return Vertices_Standard[i].TCoords; - } - } - //! append the vertices and indices to the current buffer - void append(const void *const vertices, u32 numVertices, const u16 *const indices, u32 numIndices) override {} - - //! get the current hardware mapping hint for vertex buffers - E_HARDWARE_MAPPING getHardwareMappingHint_Vertex() const override + void append(const void *const vertices, u32 numVertices, const u16 *const indices, u32 numIndices) override { - return MappingHint_Vertex; - } - - //! get the current hardware mapping hint for index buffers - E_HARDWARE_MAPPING getHardwareMappingHint_Index() const override - { - return MappingHint_Index; - } - - //! set the hardware mapping hint, for driver - void setHardwareMappingHint(E_HARDWARE_MAPPING NewMappingHint, E_BUFFER_TYPE Buffer = EBT_VERTEX_AND_INDEX) override - { - if (Buffer == EBT_VERTEX) - MappingHint_Vertex = NewMappingHint; - else if (Buffer == EBT_INDEX) - MappingHint_Index = NewMappingHint; - else if (Buffer == EBT_VERTEX_AND_INDEX) { - MappingHint_Vertex = NewMappingHint; - MappingHint_Index = NewMappingHint; - } + _IRR_DEBUG_BREAK_IF(true); } //! Describe what kind of primitive geometry is used by the meshbuffer @@ -340,41 +219,14 @@ struct SSkinMeshBuffer : public IMeshBuffer return PrimitiveType; } - //! flags the mesh as changed, reloads hardware buffers - void setDirty(E_BUFFER_TYPE Buffer = EBT_VERTEX_AND_INDEX) override - { - if (Buffer == EBT_VERTEX_AND_INDEX || Buffer == EBT_VERTEX) - ++ChangedID_Vertex; - if (Buffer == EBT_VERTEX_AND_INDEX || Buffer == EBT_INDEX) - ++ChangedID_Index; - } - - u32 getChangedID_Vertex() const override { return ChangedID_Vertex; } - - u32 getChangedID_Index() const override { return ChangedID_Index; } - - void setHWBuffer(void *ptr) const override - { - HWBuffer = ptr; - } - - void *getHWBuffer() const override - { - return HWBuffer; - } - //! Call this after changing the positions of any vertex. void boundingBoxNeedsRecalculated(void) { BoundingBoxNeedsRecalculated = true; } - core::array Vertices_Tangents; - core::array Vertices_2TCoords; - core::array Vertices_Standard; - core::array Indices; + SVertexBufferTangents *Vertices_Tangents; + SVertexBufferLightMap *Vertices_2TCoords; + SVertexBuffer *Vertices_Standard; + SIndexBuffer *Indices; - u32 ChangedID_Vertex; - u32 ChangedID_Index; - - // ISkinnedMesh::SJoint *AttachedJoint; core::matrix4 Transformation; video::SMaterial Material; @@ -385,13 +237,7 @@ struct SSkinMeshBuffer : public IMeshBuffer //! Primitive type used for rendering (triangles, lines, ...) E_PRIMITIVE_TYPE PrimitiveType; - // hardware mapping hint - E_HARDWARE_MAPPING MappingHint_Vertex : 3; - E_HARDWARE_MAPPING MappingHint_Index : 3; - - mutable void *HWBuffer; - - bool BoundingBoxNeedsRecalculated : 1; + bool BoundingBoxNeedsRecalculated; }; } // end namespace scene diff --git a/irr/include/SViewFrustum.h b/irr/include/SViewFrustum.h index 06983cc5e..cd898e032 100644 --- a/irr/include/SViewFrustum.h +++ b/irr/include/SViewFrustum.h @@ -9,7 +9,7 @@ #include "line3d.h" #include "aabbox3d.h" #include "matrix4.h" -#include "IVideoDriver.h" +#include "EVideoTypes.h" namespace irr { diff --git a/irr/include/irrArray.h b/irr/include/irrArray.h index b6f573a79..9f390e79b 100644 --- a/irr/include/irrArray.h +++ b/irr/include/irrArray.h @@ -45,6 +45,10 @@ public: { } + //! Move constructor + array(std::vector &&data) : + m_data(std::move(data)), is_sorted(false) {} + //! Reallocates the array, make it bigger or smaller. /** \param new_size New size of array. \param canShrink Specifies whether the array is reallocated even if @@ -167,13 +171,6 @@ public: return *this; } - array &operator=(std::vector &&other) - { - m_data = std::move(other); - is_sorted = false; - return *this; - } - //! Equality operator bool operator==(const array &other) const { @@ -400,16 +397,6 @@ public: std::swap(is_sorted, other.is_sorted); } - //! Pull the contents of this array as a vector. - // The array is left empty. - std::vector steal() - { - std::vector ret = std::move(m_data); - m_data.clear(); - is_sorted = true; - return ret; - } - typedef T value_type; typedef u32 size_type; diff --git a/irr/include/irrString.h b/irr/include/irrString.h index a583c9e4b..9d9b288d8 100644 --- a/irr/include/irrString.h +++ b/irr/include/irrString.h @@ -11,7 +11,6 @@ #include #include #include -#include /* HACK: import these string methods from MT's util/string.h */ extern std::wstring utf8_to_wide(std::string_view input); @@ -65,6 +64,7 @@ static inline u32 locale_upper(u32 x) template class string { + using stl_type = std::basic_string; public: typedef T char_type; @@ -79,6 +79,10 @@ public: *this = other; } + string(const stl_type &str) : str(str) {} + + string(stl_type &&str) : str(std::move(str)) {} + //! Constructor from other string types template string(const string &other) @@ -814,13 +818,6 @@ public: friend size_t wStringToUTF8(stringc &destination, const wchar_t *source); private: - typedef std::basic_string stl_type; - - //! Private constructor - string(stl_type &&str) : - str(str) - { - } //! strlen wrapper template diff --git a/src/irr_ptr.h b/irr/include/irr_ptr.h similarity index 87% rename from src/irr_ptr.h rename to irr/include/irr_ptr.h index fc4a0f558..48717976b 100644 --- a/src/irr_ptr.h +++ b/irr/include/irr_ptr.h @@ -20,8 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #pragma once #include #include -#include "irrlichttypes.h" -#include "IReferenceCounted.h" +namespace irr { class IReferenceCounted; } /** Shared pointer for IrrLicht objects. * @@ -37,15 +36,13 @@ with this program; if not, write to the Free Software Foundation, Inc., * from such object is a bug and may lead to a crash. Indirect construction * is possible though; see the @c grab free function for details and use cases. */ -template ::value>::type> +template class irr_ptr { ReferenceCounted *value = nullptr; public: - irr_ptr() {} + irr_ptr() noexcept = default; irr_ptr(std::nullptr_t) noexcept {} @@ -53,15 +50,15 @@ public: irr_ptr(irr_ptr &&b) noexcept { reset(b.release()); } - template ::value>::type> + template , bool> = true> irr_ptr(const irr_ptr &b) noexcept { grab(b.get()); } - template ::value>::type> + template , bool> = true> irr_ptr(irr_ptr &&b) noexcept { reset(b.release()); @@ -88,16 +85,16 @@ public: return *this; } - template ::value>::type> + template , bool> = true> irr_ptr &operator=(const irr_ptr &b) noexcept { grab(b.get()); return *this; } - template ::value>::type> + template , bool> = true> irr_ptr &operator=(irr_ptr &&b) noexcept { reset(b.release()); @@ -128,6 +125,8 @@ public: */ void reset(ReferenceCounted *object = nullptr) noexcept { + static_assert(std::is_base_of_v, + "Class is not an IReferenceCounted"); if (value) value->drop(); value = object; @@ -138,6 +137,8 @@ public: */ void grab(ReferenceCounted *object) noexcept { + static_assert(std::is_base_of_v, + "Class is not an IReferenceCounted"); if (object) object->grab(); reset(object); @@ -152,6 +153,7 @@ public: * in this function and decreased when the returned pointer is destroyed. */ template +[[nodiscard]] irr_ptr grab(ReferenceCounted *object) noexcept { irr_ptr ptr; diff --git a/irr/media/coolguy_opt.x b/irr/media/coolguy_opt.x deleted file mode 100755 index e806d8315..000000000 --- a/irr/media/coolguy_opt.x +++ /dev/null @@ -1,2 +0,0 @@ -xof 0303txt 0032 -AnimationSet{Animation{{Armature}AnimationKey{0;2;0;4;1,0,0,0;;,29;4;1,0,0,0;;;}AnimationKey{2;2;0;3;0,0,0;;,29;3;0,0,0;;;}}Animation{{Armature_knee_r}AnimationKey{0;16;0;4;0.864183,0.503177,0,0;;,1;4;0.829812,0.558043,0,0;;,3;4;0.708698,0.705512,0,0;;,5;4;0.589108,0.808054,0,0;;,7;4;0.593659,0.804717,0,0;;,9;4;0.748627,0.662991,0,0;;,11;4;0.910305,0.413938,0,0;;,13;4;0.975925,0.218107,0,0;;,15;4;0.981302,0.192476,0,0;;,17;4;0.975476,0.220108,0,0;;,19;4;0.963662,0.267124,0,0;;,21;4;0.945893,0.324478,0,0;;,23;4;0.923816,0.382838,0,0;;,25;4;0.901205,0.433394,0,0;;,27;4;0.883429,0.468566,0,0;;,29;4;0.876305,0.481757,0,0;;;}AnimationKey{2;2;0;3;0,0,1.10139;;,29;3;0,0,1.10139;;;}}Animation{{Armature_elbow_r}AnimationKey{0;16;0;4;0.756295,0.004619,-0.619265,0.210967;;,1;4;0.771977,0.005599,-0.60257,0.202311;;,3;4;0.825501,0.009164,-0.538259,0.169533;;,5;4;0.891859,0.014253,-0.436142,0.119019;;,7;4;0.949154,0.019821,-0.308768,0.058108;;,9;4;0.983251,0.024703,-0.18057,-0.001258;;,11;4;0.995416,0.028143,-0.07812,-0.047458;;,13;4;0.996672,0.02991,-0.020368,-0.073041;;,15;4;0.996672,0.02991,-0.020368,-0.073041;;,17;4;0.995416,0.028143,-0.07812,-0.047458;;,19;4;0.983251,0.024703,-0.18057,-0.001258;;,21;4;0.949154,0.019821,-0.308768,0.058108;;,23;4;0.891859,0.014253,-0.436142,0.119019;;,25;4;0.825501,0.009164,-0.538259,0.169533;;,27;4;0.771977,0.005599,-0.60257,0.202311;;,29;4;0.750682,0.004275,-0.625038,0.213976;;;}AnimationKey{2;2;0;3;0,0,0.754892;;,29;3;0,0,0.754892;;;}}Animation{{Armature_arm_r}AnimationKey{0;16;0;4;0.28219,0.629905,0.723388,-0.017285;;,1;4;0.277641,0.632543,0.722699,-0.022614;;,3;4;0.261375,0.641615,0.719924,-0.041507;;,5;4;0.238321,0.653533,0.715186,-0.067874;;,7;4;0.212026,0.665838,0.708676,-0.097381;;,9;4;0.186345,0.676585,0.701229,-0.125643;;,11;4;0.165298,0.684491,0.694351,-0.14841;;,13;4;0.152894,0.688778,0.68998,-0.161665;;,15;4;0.152894,0.688779,0.68998,-0.161665;;,17;4;0.165298,0.684491,0.694351,-0.14841;;,19;4;0.186345,0.676585,0.701229,-0.125643;;,21;4;0.212026,0.665838,0.708676,-0.097381;;,23;4;0.238321,0.653533,0.715186,-0.067874;;,25;4;0.261375,0.641615,0.719924,-0.041507;;,27;4;0.277641,0.632543,0.722699,-0.022614;;,29;4;0.283802,0.628959,0.723623,-0.015394;;;}AnimationKey{2;2;0;3;-0.545315,0,1;;,29;3;-0.545315,0,1;;;}}Animation{{Armature_knee_l}AnimationKey{0;16;0;4;0.981896,0.189423,0,0;;,1;4;0.9814,0.191974,0,0;;,3;4;0.979127,0.203251,0,0;;,5;4;0.974526,0.224276,0,0;;,7;4;0.96645,0.256853,0,0;;,9;4;0.953088,0.302692,0,0;;,11;4;0.931731,0.36315,0,0;;,13;4;0.898645,0.438676,0,0;;,15;4;0.848226,0.529634,0,0;;,17;4;0.773692,0.633562,0,0;;,19;4;0.689831,0.72397,0,0;;,21;4;0.629304,0.777159,0,0;;,23;4;0.648685,0.761057,0,0;;,25;4;0.812268,0.583284,0,0;;,27;4;0.948066,0.318074,0,0;;,29;4;0.982049,0.188624,0,0;;;}AnimationKey{2;2;0;3;0,0,1.10139;;,29;3;0,0,1.10139;;;}}Animation{{Armature_Bone_007}AnimationKey{0;16;0;4;0.993671,-0.112331,0,0;;,1;4;0.994784,-0.102002,0,0;;,3;4;0.997507,-0.070564,0,0;;,5;4;0.999237,-0.039056,0,0;;,7;4;0.999694,-0.024737,0,0;;,9;4;0.999079,-0.042907,0,0;;,11;4;0.99677,-0.080308,0,0;;,13;4;0.993798,-0.111199,0,0;;,15;4;0.993599,-0.112965,0,0;;,17;4;0.995813,-0.091409,0,0;;,19;4;0.998181,-0.060285,0,0;;,21;4;0.999479,-0.032286,0,0;;,23;4;0.999797,-0.020142,0,0;;,25;4;0.998983,-0.045097,0,0;;,27;4;0.995813,-0.091409,0,0;;,29;4;0.993221,-0.116243,0,0;;;}AnimationKey{2;2;0;3;0,0,1.221802;;,29;3;0,0,1.221802;;;}}Animation{{Armature_elbow_l}AnimationKey{0;16;0;4;0.995195,-0.034868,-0.015799,-0.090119;;,1;4;0.993465,-0.046368,-0.030155,-0.099838;;,3;4;0.983557,-0.0879,-0.082099,-0.134715;;,5;4;0.959324,-0.146904,-0.156177,-0.183648;;,7;4;0.917546,-0.212233,-0.238611,-0.236921;;,9;4;0.864109,-0.271657,-0.314022,-0.284443;;,11;4;0.813172,-0.315829,-0.370387,-0.319087;;,13;4;0.781004,-0.339668,-0.400938,-0.337501;;,15;4;0.781004,-0.339668,-0.400938,-0.337501;;,17;4;0.813172,-0.315829,-0.370387,-0.319087;;,19;4;0.864109,-0.271657,-0.314022,-0.284443;;,21;4;0.917546,-0.212233,-0.238611,-0.236921;;,23;4;0.959324,-0.146904,-0.156177,-0.183648;;,25;4;0.983557,-0.0879,-0.082099,-0.134715;;,27;4;0.993465,-0.046368,-0.030155,-0.099838;;,29;4;0.995701,-0.030812,-0.010739,-0.086685;;;}AnimationKey{2;2;0;3;0,0,0.754892;;,29;3;0,0,0.754892;;;}}Animation{{Armature_body}AnimationKey{0;16;0;4;-0,0,0.601298,0.799025;;,1;4;-0,0,0.608144,0.793827;;,3;4;-0,0,0.627465,0.778645;;,5;4;-0,0,0.643183,0.765712;;,7;4;-0,0,0.643755,0.765231;;,9;4;-0,0,0.631076,0.775721;;,11;4;-0,0,0.613775,0.789481;;,13;4;-0,0,0.6007,0.799474;;,15;4;-0,0,0.601488,0.798882;;,17;4;-0,0,0.619499,0.784997;;,19;4;-0,0,0.643196,0.765702;;,21;4;-0,0,0.660441,0.750878;;,23;4;-0,0,0.659666,0.751559;;,25;4;-0,0,0.638264,0.769817;;,27;4;-0,0,0.611752,0.791049;;,29;4;-0,0,0.598631,0.801025;;;}AnimationKey{2;2;0;3;0,2.580534,0;;,29;3;0,2.571201,0;;;}}Animation{{Armature_leg_l}AnimationKey{0;16;0;4;0.390287,0.920693,0,0;;,1;4;0.362565,0.931959,0,0;;,3;4;0.266163,0.963928,0,0;;,5;4;0.138294,0.990391,0,0;;,7;4;0.012725,0.999919,0,0;;,9;4;-0.090194,0.995924,0,0;;,11;4;-0.162502,0.986708,0,0;;,13;4;-0.201466,0.979496,0,0;;,15;4;-0.185641,0.982618,0,0;;,17;4;-0.013697,0.999906,0,0;;,19;4;0.24238,0.970181,0,0;;,21;4;0.417271,0.908782,0,0;;,23;4;0.439308,0.898336,0,0;;,25;4;0.424255,0.905543,0,0;;,27;4;0.407664,0.913132,0,0;;,29;4;0.400263,0.9164,0,0;;;}AnimationKey{2;2;0;3;0.246294,0,-0.171352;;,29;3;0.246294,0,-0.171351;;;}}Animation{{Armature_leg_r}AnimationKey{0;16;0;4;0.174933,-0.98458,0,0;;,1;4;0.082829,-0.996564,0,0;;,3;4;-0.21147,-0.977384,0,0;;,5;4;-0.442802,-0.89662,0,0;;,7;4;-0.47604,-0.879424,0,0;;,9;4;-0.47279,-0.881175,0,0;;,11;4;-0.459567,-0.888143,0,0;;,13;4;-0.427425,-0.904051,0,0;;,15;4;-0.361724,-0.932285,0,0;;,17;4;-0.251362,-0.967893,0,0;;,19;4;-0.114531,-0.99342,0,0;;,21;4;0.021053,-0.999778,0,0;;,23;4;0.12473,-0.992191,0,0;;,25;4;0.181473,-0.983396,0,0;;,27;4;0.204037,-0.978963,0,0;;,29;4;0.208187,-0.978089,0,0;;;}AnimationKey{2;2;0;3;-0.246294,0,-0.171352;;,29;3;-0.246294,0,-0.171351;;;}}Animation{{Armature_arm_l}AnimationKey{0;16;0;4;0.200754,-0.659656,-0.716264,-0.107316;;,1;4;0.192268,-0.660735,-0.716526,-0.114246;;,3;4;0.161871,-0.663925,-0.716753,-0.138802;;,5;4;0.118745,-0.666682,-0.715211,-0.17294;;,7;4;0.069733,-0.667364,-0.710872,-0.210767;;,9;4;0.022313,-0.665594,-0.704111,-0.246404;;,11;4;-0.016046,-0.662426,-0.696821,-0.274543;;,13;4;-0.038374,-0.659874,-0.691824,-0.290643;;,15;4;-0.038373,-0.659874,-0.691824,-0.290643;;,17;4;-0.016044,-0.662427,-0.696822,-0.274543;;,19;4;0.022312,-0.665594,-0.70411,-0.246404;;,21;4;0.069733,-0.667365,-0.710872,-0.210767;;,23;4;0.118745,-0.666682,-0.715211,-0.17294;;,25;4;0.161871,-0.663925,-0.716753,-0.138802;;,27;4;0.192268,-0.660735,-0.716526,-0.114246;;,29;4;0.203757,-0.659255,-0.716151,-0.104856;;;}AnimationKey{2;2;0;3;0.545315,0,1;;,29;3;0.545315,0,1;;;}}}Frame Root{FrameTransformMatrix{1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1;;}Frame Armature{FrameTransformMatrix{1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1;;}Frame Armature_body{FrameTransformMatrix{-1,0,0,0,0,0,1,0,0,1,0,0,0,2.571201,0,1;;}Frame Armature_arm_r{FrameTransformMatrix{-0.047733,0.997488,-0.05233,0,0.901521,0.020464,-0.432251,0,-0.430095,-0.067809,-0.900233,0,-0.545315,0,1,1;;}Frame Armature_elbow_r{FrameTransformMatrix{0.987983,0.151721,-0.029519,0,-0.153228,0.986478,-0.058162,0,0.020295,0.061987,0.997871,0,0,0,0.754892,1;;}}}Frame Armature_arm_l{FrameTransformMatrix{-0.047732,0.994072,-0.097683,0,0.901521,0.084983,0.424309,0,0.430095,-0.067809,-0.900233,0,0.545315,0,1,1;;}Frame Armature_elbow_l{FrameTransformMatrix{0.984741,0.173286,-0.016044,0,-0.171963,0.983073,0.063221,0,0.026727,-0.059497,0.99787,0,0,0,0.754892,1;;}}}Frame Armature_leg_l{FrameTransformMatrix{1,0,0,0,0,-0.998426,-0.056453,0,0,0.056453,-0.998405,0,0.246294,0,-0.171351,1;;}Frame Armature_knee_l{FrameTransformMatrix{1,0,0,0,0,0.993861,-0.110639,0,0,0.110639,0.993861,0,0,0,1.10139,1;;}}}Frame Armature_leg_r{FrameTransformMatrix{1,0,0,0,0,-0.998426,-0.056453,0,0,0.056453,-0.998405,0,-0.246294,0,-0.171351,1;;}Frame Armature_knee_r{FrameTransformMatrix{1,0,0,0,0,0.993861,-0.110639,0,0,0.110639,0.993861,0,0,0,1.10139,1;;}}}Frame Armature_Bone_007{FrameTransformMatrix{1,0,0,0,0,1,0,0,0,0,1,0,0,0,1.221802,1;;}}}Frame cool_dude{FrameTransformMatrix{-1,0,0,0,0,1,0,0,0,0,-1,0,0,0,0,1;;}Mesh{272;0;2.440814;0.219926;,0;3.688199;0.219926;,0.466212;3.688199;0.219926;,0.466212;2.440814;0.219926;,0.466212;2.440814;0.219926;,0.466212;3.688199;0.219926;,0.466212;3.688199;-0.219926;,0.466212;2.440814;-0.219926;,0;2.440814;0.219926;,0.466212;2.440814;0.219926;,0.466212;2.440814;-0.219926;,0;2.440814;-0.219926;,0.055633;1.27575;-0.190081;,0.055633;2.35741;-0.190081;,0.055633;2.35741;0.190081;,0.055633;1.27575;0.190081;,0.055633;1.27575;0.190081;,0.055633;2.35741;0.190081;,0.43017;2.35741;0.190081;,0.43017;1.27575;0.190081;,0.43017;1.27575;0.190081;,0.43017;2.35741;0.190081;,0.43017;2.35741;-0.190081;,0.43017;1.27575;-0.190081;,0.43017;1.27575;-0.190081;,0.43017;2.35741;-0.190081;,0.055633;2.35741;-0.190081;,0.055633;1.27575;-0.190081;,0.055633;1.27575;0.190081;,0.43017;1.27575;0.190081;,0.43017;1.27575;-0.190081;,0.055633;1.27575;-0.190081;,0.43017;2.35741;0.190081;,0.055633;2.35741;0.190081;,0.055633;2.35741;-0.190081;,0.43017;2.35741;-0.190081;,0.466212;3.688199;0.219926;,0;3.688199;0.219926;,0;3.688199;-0.219926;,0.466212;3.688199;-0.219926;,0.466212;2.440814;-0.219926;,0.466212;3.688199;-0.219926;,0;3.688199;-0.219926;,0;2.440814;-0.219926;,0.769341;2.834949;-0.041122;,0.440953;3.555781;-0.041122;,0.440953;3.555781;0.207294;,0.769341;2.834949;0.207294;,0.769341;2.834949;0.207294;,0.440953;3.555781;0.207294;,0.616273;3.635651;0.207294;,0.944661;2.914819;0.207294;,0.944661;2.914819;0.207294;,0.616273;3.635651;0.207294;,0.616273;3.635651;-0.041122;,0.944661;2.914819;-0.041122;,0.944661;2.914819;-0.041122;,0.616273;3.635651;-0.041122;,0.440953;3.555781;-0.041122;,0.769341;2.834949;-0.041122;,0.769341;2.834949;0.207294;,0.944661;2.914819;0.207294;,0.944661;2.914819;-0.041122;,0.769341;2.834949;-0.041122;,0.616273;3.635651;0.207294;,0.440953;3.555781;0.207294;,0.440953;3.555781;-0.041122;,0.616273;3.635651;-0.041122;,1.104504;2.080977;-0.086788;,0.776116;2.801809;-0.086788;,0.776116;2.801809;0.161627;,1.104504;2.080977;0.161627;,1.104504;2.080977;0.161627;,0.776116;2.801809;0.161627;,0.951436;2.881679;0.161627;,1.279824;2.160847;0.161627;,1.279824;2.160847;0.161627;,0.951436;2.881679;0.161627;,0.951436;2.881679;-0.086788;,1.279824;2.160847;-0.086788;,1.279824;2.160847;-0.086788;,0.951436;2.881679;-0.086788;,0.776116;2.801809;-0.086788;,1.104504;2.080977;-0.086788;,1.104504;2.080977;0.161627;,1.279824;2.160847;0.161627;,1.279824;2.160847;-0.086788;,1.104504;2.080977;-0.086788;,0.951436;2.881679;0.161627;,0.776116;2.801809;0.161627;,0.776116;2.801809;-0.086788;,0.951436;2.881679;-0.086788;,0.055633;0.093601;-0.190081;,0.055633;1.205294;-0.190081;,0.055633;1.205294;0.190081;,0.055633;0.093601;0.190081;,0.055633;0.093601;0.190081;,0.055633;1.205294;0.190081;,0.43017;1.205294;0.190081;,0.43017;0.093601;0.190081;,0.43017;0.093601;0.190081;,0.43017;1.205294;0.190081;,0.43017;1.205294;-0.190081;,0.43017;0.093601;-0.190081;,0.43017;0.093601;-0.190081;,0.43017;1.205294;-0.190081;,0.055633;1.205294;-0.190081;,0.055633;0.093601;-0.190081;,0.055633;0.093601;0.190081;,0.43017;0.093601;0.190081;,0.43017;0.093601;-0.190081;,0.055633;0.093601;-0.190081;,0.43017;1.205294;0.190081;,0.055633;1.205294;0.190081;,0.055633;1.205294;-0.190081;,0.43017;1.205294;-0.190081;,0;3.790919;0.428464;,0;4.579204;0.428464;,0.43344;4.560537;0.409797;,0.43344;3.809586;0.409797;,0.43344;3.809586;0.409797;,0.43344;4.560537;0.409797;,0.43344;4.560537;-0.284975;,0.43344;3.809586;-0.284975;,0;3.790919;0.428464;,0.43344;3.809586;0.409797;,0.43344;3.809586;-0.284975;,0;3.790919;-0.303642;,0.43344;4.560537;0.409797;,0;4.579204;0.428464;,0;4.579204;-0.303642;,0.43344;4.560537;-0.284975;,0.43344;3.809586;-0.284975;,0.43344;4.560537;-0.284975;,0;4.579204;-0.303642;,0;3.790919;-0.303642;,0;2.440814;0.219926;,-0.466212;2.440814;0.219926;,-0.466212;3.688199;0.219926;,0;3.688199;0.219926;,-0.466212;2.440814;0.219926;,-0.466212;2.440814;-0.219926;,-0.466212;3.688199;-0.219926;,-0.466212;3.688199;0.219926;,0;2.440814;0.219926;,0;2.440814;-0.219926;,-0.466212;2.440814;-0.219926;,-0.466212;2.440814;0.219926;,-0.055633;1.27575;-0.190081;,-0.055633;1.27575;0.190081;,-0.055633;2.35741;0.190081;,-0.055633;2.35741;-0.190081;,-0.055633;1.27575;0.190081;,-0.43017;1.27575;0.190081;,-0.43017;2.35741;0.190081;,-0.055633;2.35741;0.190081;,-0.43017;1.27575;0.190081;,-0.43017;1.27575;-0.190081;,-0.43017;2.35741;-0.190081;,-0.43017;2.35741;0.190081;,-0.43017;1.27575;-0.190081;,-0.055633;1.27575;-0.190081;,-0.055633;2.35741;-0.190081;,-0.43017;2.35741;-0.190081;,-0.055633;1.27575;0.190081;,-0.055633;1.27575;-0.190081;,-0.43017;1.27575;-0.190081;,-0.43017;1.27575;0.190081;,-0.43017;2.35741;0.190081;,-0.43017;2.35741;-0.190081;,-0.055633;2.35741;-0.190081;,-0.055633;2.35741;0.190081;,-0.466212;3.688199;0.219926;,-0.466212;3.688199;-0.219926;,0;3.688199;-0.219926;,0;3.688199;0.219926;,-0.466212;2.440814;-0.219926;,0;2.440814;-0.219926;,0;3.688199;-0.219926;,-0.466212;3.688199;-0.219926;,-0.769341;2.834949;-0.041122;,-0.769341;2.834949;0.207294;,-0.440953;3.555781;0.207294;,-0.440953;3.555781;-0.041122;,-0.769341;2.834949;0.207294;,-0.944661;2.914819;0.207294;,-0.616273;3.635651;0.207294;,-0.440953;3.555781;0.207294;,-0.944661;2.914819;0.207294;,-0.944661;2.914819;-0.041122;,-0.616273;3.635651;-0.041122;,-0.616273;3.635651;0.207294;,-0.944661;2.914819;-0.041122;,-0.769341;2.834949;-0.041122;,-0.440953;3.555781;-0.041122;,-0.616273;3.635651;-0.041122;,-0.769341;2.834949;0.207294;,-0.769341;2.834949;-0.041122;,-0.944661;2.914819;-0.041122;,-0.944661;2.914819;0.207294;,-0.616273;3.635651;0.207294;,-0.616273;3.635651;-0.041122;,-0.440953;3.555781;-0.041122;,-0.440953;3.555781;0.207294;,-1.104504;2.080977;-0.086788;,-1.104504;2.080977;0.161627;,-0.776116;2.801809;0.161627;,-0.776116;2.801809;-0.086788;,-1.104504;2.080977;0.161627;,-1.279824;2.160847;0.161627;,-0.951436;2.881679;0.161627;,-0.776116;2.801809;0.161627;,-1.279824;2.160847;0.161627;,-1.279824;2.160847;-0.086788;,-0.951436;2.881679;-0.086788;,-0.951436;2.881679;0.161627;,-1.279824;2.160847;-0.086788;,-1.104504;2.080977;-0.086788;,-0.776116;2.801809;-0.086788;,-0.951436;2.881679;-0.086788;,-1.104504;2.080977;0.161627;,-1.104504;2.080977;-0.086788;,-1.279824;2.160847;-0.086788;,-1.279824;2.160847;0.161627;,-0.951436;2.881679;0.161627;,-0.951436;2.881679;-0.086788;,-0.776116;2.801809;-0.086788;,-0.776116;2.801809;0.161627;,-0.055633;0.093601;-0.190081;,-0.055633;0.093601;0.190081;,-0.055633;1.205294;0.190081;,-0.055633;1.205294;-0.190081;,-0.055633;0.093601;0.190081;,-0.43017;0.093601;0.190081;,-0.43017;1.205294;0.190081;,-0.055633;1.205294;0.190081;,-0.43017;0.093601;0.190081;,-0.43017;0.093601;-0.190081;,-0.43017;1.205294;-0.190081;,-0.43017;1.205294;0.190081;,-0.43017;0.093601;-0.190081;,-0.055633;0.093601;-0.190081;,-0.055633;1.205294;-0.190081;,-0.43017;1.205294;-0.190081;,-0.055633;0.093601;0.190081;,-0.055633;0.093601;-0.190081;,-0.43017;0.093601;-0.190081;,-0.43017;0.093601;0.190081;,-0.43017;1.205294;0.190081;,-0.43017;1.205294;-0.190081;,-0.055633;1.205294;-0.190081;,-0.055633;1.205294;0.190081;,0;3.790919;0.428464;,-0.43344;3.809586;0.409797;,-0.43344;4.560537;0.409797;,0;4.579204;0.428464;,-0.43344;3.809586;0.409797;,-0.43344;3.809586;-0.284975;,-0.43344;4.560537;-0.284975;,-0.43344;4.560537;0.409797;,0;3.790919;0.428464;,0;3.790919;-0.303642;,-0.43344;3.809586;-0.284975;,-0.43344;3.809586;0.409797;,-0.43344;4.560537;0.409797;,-0.43344;4.560537;-0.284975;,0;4.579204;-0.303642;,0;4.579204;0.428464;,-0.43344;3.809586;-0.284975;,0;3.790919;-0.303642;,0;4.579204;-0.303642;,-0.43344;4.560537;-0.284975;;68;4;3,2,1,0;,4;7,6,5,4;,4;11,10,9,8;,4;15,14,13,12;,4;19,18,17,16;,4;23,22,21,20;,4;27,26,25,24;,4;31,30,29,28;,4;35,34,33,32;,4;39,38,37,36;,4;43,42,41,40;,4;47,46,45,44;,4;51,50,49,48;,4;55,54,53,52;,4;59,58,57,56;,4;63,62,61,60;,4;67,66,65,64;,4;71,70,69,68;,4;75,74,73,72;,4;79,78,77,76;,4;83,82,81,80;,4;87,86,85,84;,4;91,90,89,88;,4;95,94,93,92;,4;99,98,97,96;,4;103,102,101,100;,4;107,106,105,104;,4;111,110,109,108;,4;115,114,113,112;,4;119,118,117,116;,4;123,122,121,120;,4;127,126,125,124;,4;131,130,129,128;,4;135,134,133,132;,4;139,138,137,136;,4;143,142,141,140;,4;147,146,145,144;,4;151,150,149,148;,4;155,154,153,152;,4;159,158,157,156;,4;163,162,161,160;,4;167,166,165,164;,4;171,170,169,168;,4;175,174,173,172;,4;179,178,177,176;,4;183,182,181,180;,4;187,186,185,184;,4;191,190,189,188;,4;195,194,193,192;,4;199,198,197,196;,4;203,202,201,200;,4;207,206,205,204;,4;211,210,209,208;,4;215,214,213,212;,4;219,218,217,216;,4;223,222,221,220;,4;227,226,225,224;,4;231,230,229,228;,4;235,234,233,232;,4;239,238,237,236;,4;243,242,241,240;,4;247,246,245,244;,4;251,250,249,248;,4;255,254,253,252;,4;259,258,257,256;,4;263,262,261,260;,4;267,266,265,264;,4;271,270,269,268;;MeshNormals{272;0;-0.707083;0.707083;,0;0.707083;0.707083;,0.577349;0.577349;0.577349;,0.577349;-0.577349;0.577349;,0.577349;-0.577349;0.577349;,0.577349;0.577349;0.577349;,0.577349;0.577349;-0.577349;,0.577349;-0.577349;-0.577349;,0;-0.707083;0.707083;,0.577349;-0.577349;0.577349;,0.577349;-0.577349;-0.577349;,0;-0.707083;-0.707083;,-0.577349;-0.577349;-0.577349;,-0.577349;0.577349;-0.577349;,-0.577349;0.577349;0.577349;,-0.577349;-0.577349;0.577349;,-0.577349;-0.577349;0.577349;,-0.577349;0.577349;0.577349;,0.577349;0.577349;0.577349;,0.577349;-0.577349;0.577349;,0.577349;-0.577349;0.577349;,0.577349;0.577349;0.577349;,0.577349;0.577349;-0.577349;,0.577349;-0.577349;-0.577349;,0.577349;-0.577349;-0.577349;,0.577349;0.577349;-0.577349;,-0.577349;0.577349;-0.577349;,-0.577349;-0.577349;-0.577349;,-0.577349;-0.577349;0.577349;,0.577349;-0.577349;0.577349;,0.577349;-0.577349;-0.577349;,-0.577349;-0.577349;-0.577349;,0.577349;0.577349;0.577349;,-0.577349;0.577349;0.577349;,-0.577349;0.577349;-0.577349;,0.577349;0.577349;-0.577349;,0.577349;0.577349;0.577349;,0;0.707083;0.707083;,0;0.707083;-0.707083;,0.577349;0.577349;-0.577349;,0.577349;-0.577349;-0.577349;,0.577349;0.577349;-0.577349;,0;0.707083;-0.707083;,0;-0.707083;-0.707083;,-0.286019;-0.764733;-0.577349;,-0.764733;0.286019;-0.577349;,-0.764733;0.286019;0.577349;,-0.286019;-0.764733;0.577349;,-0.286019;-0.764733;0.577349;,-0.764733;0.286019;0.577349;,0.286019;0.764733;0.577349;,0.764733;-0.286019;0.577349;,0.764733;-0.286019;0.577349;,0.286019;0.764733;0.577349;,0.286019;0.764733;-0.577349;,0.764733;-0.286019;-0.577349;,0.764733;-0.286019;-0.577349;,0.286019;0.764733;-0.577349;,-0.764733;0.286019;-0.577349;,-0.286019;-0.764733;-0.577349;,-0.286019;-0.764733;0.577349;,0.764733;-0.286019;0.577349;,0.764733;-0.286019;-0.577349;,-0.286019;-0.764733;-0.577349;,0.286019;0.764733;0.577349;,-0.764733;0.286019;0.577349;,-0.764733;0.286019;-0.577349;,0.286019;0.764733;-0.577349;,-0.286019;-0.764733;-0.577349;,-0.764733;0.286019;-0.577349;,-0.764733;0.286019;0.577349;,-0.286019;-0.764733;0.577349;,-0.286019;-0.764733;0.577349;,-0.764733;0.286019;0.577349;,0.286019;0.764733;0.577349;,0.764733;-0.286019;0.577349;,0.764733;-0.286019;0.577349;,0.286019;0.764733;0.577349;,0.286019;0.764733;-0.577349;,0.764733;-0.286019;-0.577349;,0.764733;-0.286019;-0.577349;,0.286019;0.764733;-0.577349;,-0.764733;0.286019;-0.577349;,-0.286019;-0.764733;-0.577349;,-0.286019;-0.764733;0.577349;,0.764733;-0.286019;0.577349;,0.764733;-0.286019;-0.577349;,-0.286019;-0.764733;-0.577349;,0.286019;0.764733;0.577349;,-0.764733;0.286019;0.577349;,-0.764733;0.286019;-0.577349;,0.286019;0.764733;-0.577349;,-0.577349;-0.577349;-0.577349;,-0.577349;0.577349;-0.577349;,-0.577349;0.577349;0.577349;,-0.577349;-0.577349;0.577349;,-0.577349;-0.577349;0.577349;,-0.577349;0.577349;0.577349;,0.577349;0.577349;0.577349;,0.577349;-0.577349;0.577349;,0.577349;-0.577349;0.577349;,0.577349;0.577349;0.577349;,0.577349;0.577349;-0.577349;,0.577349;-0.577349;-0.577349;,0.577349;-0.577349;-0.577349;,0.577349;0.577349;-0.577349;,-0.577349;0.577349;-0.577349;,-0.577349;-0.577349;-0.577349;,-0.577349;-0.577349;0.577349;,0.577349;-0.577349;0.577349;,0.577349;-0.577349;-0.577349;,-0.577349;-0.577349;-0.577349;,0.577349;0.577349;0.577349;,-0.577349;0.577349;0.577349;,-0.577349;0.577349;-0.577349;,0.577349;0.577349;-0.577349;,0;-0.707083;0.707083;,0;0.707083;0.707083;,0.599902;0.565722;0.565722;,0.599902;-0.565722;0.565722;,0.599902;-0.565722;0.565722;,0.599902;0.565722;0.565722;,0.599902;0.565722;-0.565722;,0.599902;-0.565722;-0.565722;,0;-0.707083;0.707083;,0.599902;-0.565722;0.565722;,0.599902;-0.565722;-0.565722;,0;-0.707083;-0.707083;,0.599902;0.565722;0.565722;,0;0.707083;0.707083;,0;0.707083;-0.707083;,0.599902;0.565722;-0.565722;,0.599902;-0.565722;-0.565722;,0.599902;0.565722;-0.565722;,0;0.707083;-0.707083;,0;-0.707083;-0.707083;,0;-0.707083;0.707083;,-0.577349;-0.577349;0.577349;,-0.577349;0.577349;0.577349;,0;0.707083;0.707083;,-0.577349;-0.577349;0.577349;,-0.577349;-0.577349;-0.577349;,-0.577349;0.577349;-0.577349;,-0.577349;0.577349;0.577349;,0;-0.707083;0.707083;,0;-0.707083;-0.707083;,-0.577349;-0.577349;-0.577349;,-0.577349;-0.577349;0.577349;,0.577349;-0.577349;-0.577349;,0.577349;-0.577349;0.577349;,0.577349;0.577349;0.577349;,0.577349;0.577349;-0.577349;,0.577349;-0.577349;0.577349;,-0.577349;-0.577349;0.577349;,-0.577349;0.577349;0.577349;,0.577349;0.577349;0.577349;,-0.577349;-0.577349;0.577349;,-0.577349;-0.577349;-0.577349;,-0.577349;0.577349;-0.577349;,-0.577349;0.577349;0.577349;,-0.577349;-0.577349;-0.577349;,0.577349;-0.577349;-0.577349;,0.577349;0.577349;-0.577349;,-0.577349;0.577349;-0.577349;,0.577349;-0.577349;0.577349;,0.577349;-0.577349;-0.577349;,-0.577349;-0.577349;-0.577349;,-0.577349;-0.577349;0.577349;,-0.577349;0.577349;0.577349;,-0.577349;0.577349;-0.577349;,0.577349;0.577349;-0.577349;,0.577349;0.577349;0.577349;,-0.577349;0.577349;0.577349;,-0.577349;0.577349;-0.577349;,0;0.707083;-0.707083;,0;0.707083;0.707083;,-0.577349;-0.577349;-0.577349;,0;-0.707083;-0.707083;,0;0.707083;-0.707083;,-0.577349;0.577349;-0.577349;,0.286019;-0.764733;-0.577349;,0.286019;-0.764733;0.577349;,0.764733;0.286019;0.577349;,0.764733;0.286019;-0.577349;,0.286019;-0.764733;0.577349;,-0.764733;-0.286019;0.577349;,-0.286019;0.764733;0.577349;,0.764733;0.286019;0.577349;,-0.764733;-0.286019;0.577349;,-0.764733;-0.286019;-0.577349;,-0.286019;0.764733;-0.577349;,-0.286019;0.764733;0.577349;,-0.764733;-0.286019;-0.577349;,0.286019;-0.764733;-0.577349;,0.764733;0.286019;-0.577349;,-0.286019;0.764733;-0.577349;,0.286019;-0.764733;0.577349;,0.286019;-0.764733;-0.577349;,-0.764733;-0.286019;-0.577349;,-0.764733;-0.286019;0.577349;,-0.286019;0.764733;0.577349;,-0.286019;0.764733;-0.577349;,0.764733;0.286019;-0.577349;,0.764733;0.286019;0.577349;,0.286019;-0.764733;-0.577349;,0.286019;-0.764733;0.577349;,0.764733;0.286019;0.577349;,0.764733;0.286019;-0.577349;,0.286019;-0.764733;0.577349;,-0.764733;-0.286019;0.577349;,-0.286019;0.764733;0.577349;,0.764733;0.286019;0.577349;,-0.764733;-0.286019;0.577349;,-0.764733;-0.286019;-0.577349;,-0.286019;0.764733;-0.577349;,-0.286019;0.764733;0.577349;,-0.764733;-0.286019;-0.577349;,0.286019;-0.764733;-0.577349;,0.764733;0.286019;-0.577349;,-0.286019;0.764733;-0.577349;,0.286019;-0.764733;0.577349;,0.286019;-0.764733;-0.577349;,-0.764733;-0.286019;-0.577349;,-0.764733;-0.286019;0.577349;,-0.286019;0.764733;0.577349;,-0.286019;0.764733;-0.577349;,0.764733;0.286019;-0.577349;,0.764733;0.286019;0.577349;,0.577349;-0.577349;-0.577349;,0.577349;-0.577349;0.577349;,0.577349;0.577349;0.577349;,0.577349;0.577349;-0.577349;,0.577349;-0.577349;0.577349;,-0.577349;-0.577349;0.577349;,-0.577349;0.577349;0.577349;,0.577349;0.577349;0.577349;,-0.577349;-0.577349;0.577349;,-0.577349;-0.577349;-0.577349;,-0.577349;0.577349;-0.577349;,-0.577349;0.577349;0.577349;,-0.577349;-0.577349;-0.577349;,0.577349;-0.577349;-0.577349;,0.577349;0.577349;-0.577349;,-0.577349;0.577349;-0.577349;,0.577349;-0.577349;0.577349;,0.577349;-0.577349;-0.577349;,-0.577349;-0.577349;-0.577349;,-0.577349;-0.577349;0.577349;,-0.577349;0.577349;0.577349;,-0.577349;0.577349;-0.577349;,0.577349;0.577349;-0.577349;,0.577349;0.577349;0.577349;,0;-0.707083;0.707083;,-0.599902;-0.565722;0.565722;,-0.599872;0.565722;0.565722;,0;0.707083;0.707083;,-0.599902;-0.565722;0.565722;,-0.599902;-0.565722;-0.565722;,-0.599872;0.565722;-0.565722;,-0.599872;0.565722;0.565722;,0;-0.707083;0.707083;,0;-0.707083;-0.707083;,-0.599902;-0.565722;-0.565722;,-0.599902;-0.565722;0.565722;,-0.599872;0.565722;0.565722;,-0.599872;0.565722;-0.565722;,0;0.707083;-0.707083;,0;0.707083;0.707083;,-0.599902;-0.565722;-0.565722;,0;-0.707083;-0.707083;,0;0.707083;-0.707083;,-0.599872;0.565722;-0.565722;;68;4;3,2,1,0;,4;7,6,5,4;,4;11,10,9,8;,4;15,14,13,12;,4;19,18,17,16;,4;23,22,21,20;,4;27,26,25,24;,4;31,30,29,28;,4;35,34,33,32;,4;39,38,37,36;,4;43,42,41,40;,4;47,46,45,44;,4;51,50,49,48;,4;55,54,53,52;,4;59,58,57,56;,4;63,62,61,60;,4;67,66,65,64;,4;71,70,69,68;,4;75,74,73,72;,4;79,78,77,76;,4;83,82,81,80;,4;87,86,85,84;,4;91,90,89,88;,4;95,94,93,92;,4;99,98,97,96;,4;103,102,101,100;,4;107,106,105,104;,4;111,110,109,108;,4;115,114,113,112;,4;119,118,117,116;,4;123,122,121,120;,4;127,126,125,124;,4;131,130,129,128;,4;135,134,133,132;,4;139,138,137,136;,4;143,142,141,140;,4;147,146,145,144;,4;151,150,149,148;,4;155,154,153,152;,4;159,158,157,156;,4;163,162,161,160;,4;167,166,165,164;,4;171,170,169,168;,4;175,174,173,172;,4;179,178,177,176;,4;183,182,181,180;,4;187,186,185,184;,4;191,190,189,188;,4;195,194,193,192;,4;199,198,197,196;,4;203,202,201,200;,4;207,206,205,204;,4;211,210,209,208;,4;215,214,213,212;,4;219,218,217,216;,4;223,222,221,220;,4;227,226,225,224;,4;231,230,229,228;,4;235,234,233,232;,4;239,238,237,236;,4;243,242,241,240;,4;247,246,245,244;,4;251,250,249,248;,4;255,254,253,252;,4;259,258,257,256;,4;263,262,261,260;,4;267,266,265,264;,4;271,270,269,268;;}MeshTextureCoords{272;0.849264;0.899246;,0.849264;0.931916;,0.861547;0.931916;,0.861547;0.899246;,0.916988;0.931916;,0.916988;0.899246;,0.9054;0.899246;,0.9054;0.931916;,0.84857;0.844707;,0.84857;0.83254;,0.836981;0.83254;,0.836981;0.844707;,0.927004;0.903587;,0.927004;0.931916;,0.937019;0.931916;,0.937019;0.903587;,0.937019;0.903587;,0.937019;0.931916;,0.946887;0.931916;,0.946887;0.903587;,0.888533;0.856954;,0.888533;0.828625;,0.878517;0.828625;,0.878517;0.856954;,0.939292;0.870917;,0.939292;0.899246;,0.949159;0.899246;,0.949159;0.870917;,0.946887;0.91117;,0.956719;0.91117;,0.956719;0.901213;,0.946887;0.901213;,0.865118;0.813135;,0.855286;0.813135;,0.855286;0.823092;,0.865118;0.823092;,0.866874;0.847426;,0.866874;0.835259;,0.855286;0.835259;,0.855286;0.847426;,0.598002;0.973516;,0.598002;0.206739;,0.309722;0.206739;,0.309722;0.973516;,0.909393;0.822135;,0.909393;0.841014;,0.915938;0.841014;,0.915938;0.822135;,0.951962;0.931916;,0.951962;0.91117;,0.946887;0.91117;,0.946887;0.931916;,0.948762;0.841801;,0.948762;0.822921;,0.942217;0.822921;,0.942217;0.841801;,0.893608;0.838075;,0.893608;0.817329;,0.888533;0.817329;,0.888533;0.838075;,0.900724;0.909292;,0.90515;0.909292;,0.90515;0.902786;,0.900724;0.902786;,0.953585;0.871994;,0.949159;0.871994;,0.949159;0.8785;,0.953585;0.8785;,0.84857;0.837995;,0.84857;0.856874;,0.855114;0.856874;,0.855114;0.837995;,0.902881;0.83746;,0.902881;0.816714;,0.897805;0.816714;,0.897805;0.83746;,0.942217;0.841801;,0.942217;0.822921;,0.935673;0.822921;,0.935673;0.841801;,0.949159;0.8785;,0.949159;0.899246;,0.954235;0.899246;,0.954235;0.8785;,0.919226;0.822135;,0.923651;0.822135;,0.923651;0.815629;,0.919226;0.815629;,0.928077;0.815629;,0.923651;0.815629;,0.923651;0.822135;,0.928077;0.822135;,0.865301;0.847426;,0.865301;0.876542;,0.875317;0.876542;,0.875317;0.847426;,0.909393;0.841014;,0.909393;0.87013;,0.919261;0.87013;,0.919261;0.841014;,0.855286;0.847426;,0.855286;0.876542;,0.865301;0.876542;,0.865301;0.847426;,0.919261;0.841014;,0.919261;0.87013;,0.929128;0.87013;,0.929128;0.841014;,0.878517;0.828625;,0.888349;0.828625;,0.88835;0.818668;,0.878517;0.818668;,0.836981;0.83254;,0.846814;0.83254;,0.846814;0.822583;,0.836981;0.822583;,0.857749;0.887894;,0.836981;0.887894;,0.837473;0.899246;,0.857257;0.899246;,0.855286;0.876542;,0.855286;0.856874;,0.836981;0.856874;,0.836981;0.876542;,0.897805;0.887893;,0.897313;0.876622;,0.879009;0.876622;,0.878517;0.887893;,0.886604;0.909292;,0.886112;0.920645;,0.9054;0.920645;,0.904908;0.909292;,0.977665;0.442421;,0.977665;0.131438;,0.799225;0.123708;,0.799225;0.450151;,0.849264;0.899246;,0.836981;0.899246;,0.836981;0.931916;,0.849264;0.931916;,0.909393;0.866576;,0.897805;0.866576;,0.897805;0.899246;,0.909393;0.899246;,0.84857;0.844707;,0.836981;0.844707;,0.836981;0.856874;,0.84857;0.856874;,0.929276;0.899246;,0.939292;0.899246;,0.939292;0.870917;,0.929276;0.870917;,0.876741;0.819096;,0.866874;0.819096;,0.866874;0.847426;,0.876741;0.847426;,0.939144;0.841801;,0.929128;0.841801;,0.929128;0.87013;,0.939144;0.87013;,0.949011;0.841801;,0.939144;0.841801;,0.939144;0.87013;,0.949011;0.87013;,0.836981;0.812626;,0.836981;0.822583;,0.846814;0.822583;,0.846814;0.812626;,0.909393;0.812178;,0.909393;0.822135;,0.919226;0.822135;,0.919226;0.812178;,0.866874;0.823092;,0.855286;0.823092;,0.855286;0.835259;,0.866874;0.835259;,0.021442;0.973516;,0.309722;0.973516;,0.309722;0.206739;,0.021442;0.206739;,0.916039;0.841014;,0.922583;0.841014;,0.922583;0.822135;,0.916039;0.822135;,0.907956;0.816714;,0.902881;0.816714;,0.902881;0.83746;,0.907956;0.83746;,0.929128;0.822135;,0.922583;0.822135;,0.922583;0.841014;,0.929128;0.841014;,0.853645;0.817249;,0.84857;0.817249;,0.84857;0.837995;,0.853645;0.837995;,0.900724;0.909292;,0.900724;0.902786;,0.895944;0.902786;,0.895944;0.909292;,0.93896;0.816415;,0.93896;0.822921;,0.94374;0.822921;,0.94374;0.816415;,0.935673;0.822921;,0.929128;0.822921;,0.929128;0.841801;,0.935673;0.841801;,0.954087;0.849384;,0.949011;0.849384;,0.949011;0.87013;,0.954087;0.87013;,0.895077;0.838075;,0.888533;0.838075;,0.888533;0.856954;,0.895077;0.856954;,0.948762;0.841801;,0.953838;0.841801;,0.953838;0.821055;,0.948762;0.821055;,0.94374;0.816415;,0.94374;0.822921;,0.94852;0.822921;,0.94852;0.816415;,0.949011;0.842878;,0.949011;0.849384;,0.953791;0.849384;,0.953791;0.842878;,0.919409;0.87013;,0.909393;0.87013;,0.909393;0.899246;,0.919409;0.899246;,0.897805;0.866576;,0.907672;0.866576;,0.907672;0.83746;,0.897805;0.83746;,0.927004;0.9028;,0.916988;0.9028;,0.916988;0.931916;,0.927004;0.931916;,0.929276;0.87013;,0.919409;0.87013;,0.919409;0.899246;,0.929276;0.899246;,0.93896;0.822921;,0.93896;0.812965;,0.929128;0.812965;,0.929128;0.822921;,0.886112;0.899336;,0.886112;0.909292;,0.895944;0.909292;,0.895944;0.899336;,0.857749;0.887894;,0.857257;0.876542;,0.837473;0.876542;,0.836981;0.887894;,0.896821;0.856954;,0.878517;0.856954;,0.878517;0.876622;,0.896821;0.876622;,0.897805;0.887893;,0.878517;0.887893;,0.879009;0.899246;,0.897313;0.899246;,0.886604;0.931916;,0.904908;0.931916;,0.9054;0.920645;,0.886112;0.920645;,0.620785;0.44242;,0.799225;0.450151;,0.799225;0.123708;,0.620785;0.131438;;}XSkinMeshHeader{3;9;10;}SkinWeights{"Armature_arm_l";24;44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,67,66;1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1;-0.047733,0.901521,0.430095,0,-0.097683,0.424309,-0.900233,0,-0.994073,-0.084983,0.06781,0,0.374873,-2.006904,2.980378,1;;}SkinWeights{"Armature_elbow_r";24;216,219,218,213,212,215,214,209,224,208,227,211,226,210,206,221,207,220,204,223,205,222,225,217;1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1;0.102316,0.92166,-0.374266,0,-0.090709,-0.366028,-0.926173,0,-0.990608,0.128712,0.046152,0,0.402018,1.853661,2.350172,1;;}SkinWeights{"Armature_arm_r";24;186,187,184,185,182,183,180,194,195,203,202,192,193,201,200,199,190,198,191,197,188,196,189,181;1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1;-0.047733,0.901521,-0.430095,0,-0.05233,-0.432251,-0.900234,0,-0.997489,-0.020464,0.067809,0,0.160852,2.035269,2.980378,1;;}SkinWeights{"Armature_knee_l";24;105,99,114,106,98,115,107,101,93,108,100,92,109,103,95,110,102,94,111,97,112,104,113,96;1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1;1,0,0,0,0,0.054357,-0.998522,0,0,0.998501,0.054355,0,-0.246294,-0.008592,1.301673,1;;}SkinWeights{"Armature_Bone_007";40;132,133,134,135,124,125,126,252,253,254,255,121,122,264,265,123,267,268,269,270,116,256,258,259,260,261,262,263,271,266,120,119,117,128,129,127,130,118,131,257;1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1;1,0,0,0,0,0,1,0,0,-1,0,0,0,0,-3.793003,1;;}SkinWeights{"Armature_elbow_l";24;88,80,72,91,83,75,90,82,74,70,85,77,71,84,76,68,87,79,69,86,78,89,81,73;1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1;0.102316,0.92166,0.374266,0,-0.008222,0.377011,-0.926173,0,-0.994719,0.091686,0.046152,0,-0.014321,-1.896701,2.350171,1;;}SkinWeights{"Armature_knee_r";24;249,235,250,234,251,229,244,228,245,231,246,230,247,240,241,242,243,237,236,239,238,233,248,232;1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1;1,0,0,0,0,0.054357,-0.998522,0,0,0.998501,0.054355,0,0.246294,-0.008592,1.301673,1;;}SkinWeights{"Armature_leg_l";38;0,3,4,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,40,43,136,145,177,144;0.055873,0.852304,0.852304,0.82998,0.055873,0.852304,0.82998,0.054606,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.82998,0.054606,0.055873,0.054606,0.054606,0.055873;1,0,0,0,0,-0.056452,-0.998405,0,0,0.998385,-0.056452,0,-0.246294,0.135476,2.396023,1;;}SkinWeights{"Armature_leg_r";38;0,170,169,11,168,151,150,149,148,147,146,176,145,177,144,159,158,157,156,155,154,153,167,136,166,137,165,164,163,140,162,141,161,43,160,152,8,171;0.055873,1,1,0.054606,1,1,1,1,1,0.852304,0.82998,0.82998,0.054606,0.054606,0.055873,1,1,1,1,1,1,1,1,0.055873,1,0.852304,1,1,1,0.852304,1,0.82998,1,0.054606,1,1,0.055873,1;1,0,0,0,0,-0.056452,-0.998405,0,0,0.998385,-0.056452,0,0.246294,0.135476,2.396023,1;;}SkinWeights{"Armature_body";40;0,1,2,3,4,5,6,7,8,9,10,11,36,37,38,39,40,41,42,43,136,137,138,139,140,147,141,146,142,145,143,144,179,174,178,173,177,172,176,175;0.888255,1,1,0.147696,0.147696,1,1,0.17002,0.888255,0.147696,0.17002,0.890788,1,1,1,1,0.17002,1,1,0.890788,0.888255,0.147696,1,1,0.147696,0.147696,0.17002,0.17002,1,0.890788,1,0.888255,1,1,1,1,0.890788,1,0.17002,1;1,0,0,0,0,0,1,0,0,-1,0,0,0,0,-2.571201,1;;}}}}} \ No newline at end of file diff --git a/irr/media/cooltexture.png b/irr/media/cooltexture.png deleted file mode 100755 index fcc219ac7..000000000 Binary files a/irr/media/cooltexture.png and /dev/null differ diff --git a/irr/scripts/ci-build-android.sh b/irr/scripts/ci-build-android.sh deleted file mode 100755 index a865e56a4..000000000 --- a/irr/scripts/ci-build-android.sh +++ /dev/null @@ -1,123 +0,0 @@ -#!/bin/bash -e - -# NOTE: this code is mostly copied from minetest_android_deps -# - -png_ver=1.6.40 -jpeg_ver=3.0.1 - -download () { - get_tar_archive libpng "https://download.sourceforge.net/libpng/libpng-${png_ver}.tar.gz" - get_tar_archive libjpeg "https://download.sourceforge.net/libjpeg-turbo/libjpeg-turbo-${jpeg_ver}.tar.gz" -} - -build () { - # Build libjpg and libpng first because Irrlicht needs them - mkdir -p libpng - pushd libpng - $srcdir/libpng/configure --host=$CROSS_PREFIX - make && make DESTDIR=$PWD install - popd - - mkdir -p libjpeg - pushd libjpeg - cmake $srcdir/libjpeg "${CMAKE_FLAGS[@]}" -DENABLE_SHARED=OFF - make && make DESTDIR=$PWD install - popd - - local libpng=$PWD/libpng/usr/local/lib/libpng.a - local libjpeg=$(echo $PWD/libjpeg/opt/libjpeg-turbo/lib*/libjpeg.a) - cmake $srcdir/irrlicht "${CMAKE_FLAGS[@]}" \ - -DBUILD_SHARED_LIBS=OFF \ - -DPNG_LIBRARY=$libpng \ - -DPNG_PNG_INCLUDE_DIR=$(dirname "$libpng")/../include \ - -DJPEG_LIBRARY=$libjpeg \ - -DJPEG_INCLUDE_DIR=$(dirname "$libjpeg")/../include - make - - cp -p lib/Android/libIrrlichtMt.a $libpng $libjpeg $pkgdir/ - cp -a $srcdir/irrlicht/include $pkgdir/include - cp -a $srcdir/irrlicht/media/Shaders $pkgdir/Shaders -} - -get_tar_archive () { - # $1: folder to extract to, $2: URL - local filename="${2##*/}" - [ -d "$1" ] && return 0 - wget -c "$2" -O "$filename" - mkdir -p "$1" - tar -xaf "$filename" -C "$1" --strip-components=1 - rm "$filename" -} - -_setup_toolchain () { - local toolchain=$(echo "$ANDROID_NDK"/toolchains/llvm/prebuilt/*) - if [ ! -d "$toolchain" ]; then - echo "Android NDK path not specified or incorrect"; return 1 - fi - export PATH="$toolchain/bin:$ANDROID_NDK:$PATH" - - unset CFLAGS CPPFLAGS CXXFLAGS - - TARGET_ABI="$1" - API=21 - if [ "$TARGET_ABI" == armeabi-v7a ]; then - CROSS_PREFIX=armv7a-linux-androideabi - CFLAGS="-mthumb" - CXXFLAGS="-mthumb" - elif [ "$TARGET_ABI" == arm64-v8a ]; then - CROSS_PREFIX=aarch64-linux-android - elif [ "$TARGET_ABI" == x86 ]; then - CROSS_PREFIX=i686-linux-android - CFLAGS="-mssse3 -mfpmath=sse" - CXXFLAGS="-mssse3 -mfpmath=sse" - elif [ "$TARGET_ABI" == x86_64 ]; then - CROSS_PREFIX=x86_64-linux-android - else - echo "Invalid ABI given"; return 1 - fi - export CC=$CROSS_PREFIX$API-clang - export CXX=$CROSS_PREFIX$API-clang++ - export AR=llvm-ar - export RANLIB=llvm-ranlib - export CFLAGS="-fPIC ${CFLAGS}" - export CXXFLAGS="-fPIC ${CXXFLAGS}" - - CMAKE_FLAGS=( - "-DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake" - "-DANDROID_ABI=$TARGET_ABI" "-DANDROID_NATIVE_API_LEVEL=$API" - "-DCMAKE_BUILD_TYPE=Release" - ) - - # make sure pkg-config doesn't interfere - export PKG_CONFIG=/bin/false - - export MAKEFLAGS="-j$(nproc)" -} - -_run_build () { - local abi=$1 - irrdir=$PWD - - mkdir -p $RUNNER_TEMP/src - cd $RUNNER_TEMP/src - srcdir=$PWD - [ -d irrlicht ] || ln -s $irrdir irrlicht - download - - builddir=$RUNNER_TEMP/build/irrlicht-$abi - pkgdir=$RUNNER_TEMP/pkg/$abi/Irrlicht - rm -rf "$pkgdir" - mkdir -p "$builddir" "$pkgdir" - - cd "$builddir" - build -} - -if [ $# -lt 1 ]; then - echo "Usage: ci-build-android.sh " - exit 1 -fi - -_setup_toolchain $1 -_run_build $1 diff --git a/irr/scripts/ci-build-mingw.sh b/irr/scripts/ci-build-mingw.sh deleted file mode 100755 index b1fdd7b99..000000000 --- a/irr/scripts/ci-build-mingw.sh +++ /dev/null @@ -1,70 +0,0 @@ -#!/bin/bash -e -topdir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" - -[[ -z "$CC" || -z "$CXX" ]] && exit 255 -variant=win32 -[[ "$(basename "$CXX")" == "x86_64-"* ]] && variant=win64 -with_sdl=0 -[[ "$extras" == *"-sdl"* ]] && with_sdl=1 -#with_gl3=0 -#[[ "$extras" == *"-gl3"* ]] && with_gl3=1 - -libjpeg_version=3.0.1 -libpng_version=1.6.40 -sdl2_version=2.28.5 -zlib_version=1.3.1 - -download () { - local url=$1 - local filename=${url##*/} - local foldername=${filename%%[.-]*} - - [ -d "./$foldername" ] && return 0 - [ -e "$filename" ] || wget "$url" -O "$filename" - sha256sum -w -c <(grep -F "$filename" "$topdir/sha256sums.txt") - unzip -o "$filename" -d "$foldername" -} - -libs=$PWD/libs -mkdir -p libs -pushd libs -libhost="http://minetest.kitsunemimi.pw" -download "$libhost/llvm/libjpeg-$libjpeg_version-$variant.zip" -download "$libhost/llvm/libpng-$libpng_version-$variant.zip" -[ $with_sdl -eq 1 ] && download "$libhost/llvm/sdl2-$sdl2_version-$variant.zip" -download "$libhost/llvm/zlib-$zlib_version-$variant.zip" -popd - -tmp=( - -DCMAKE_SYSTEM_NAME=Windows \ - -DPNG_LIBRARY=$libs/libpng/lib/libpng.dll.a \ - -DPNG_PNG_INCLUDE_DIR=$libs/libpng/include \ - -DJPEG_LIBRARY=$libs/libjpeg/lib/libjpeg.dll.a \ - -DJPEG_INCLUDE_DIR=$libs/libjpeg/include \ - -DZLIB_LIBRARY=$libs/zlib/lib/libz.dll.a \ - -DZLIB_INCLUDE_DIR=$libs/zlib/include -) -if [ $with_sdl -eq 1 ]; then - tmp+=( - -DUSE_SDL2=ON - -DCMAKE_PREFIX_PATH=$libs/sdl2/lib/cmake - ) -else - tmp+=(-DUSE_SDL2=OFF) -fi -#[ $with_gl3 -eq 1 ] && tmp+=(-DENABLE_OPENGL=OFF -DENABLE_OPENGL3=ON) - -cmake . "${tmp[@]}" -make -j$(nproc) - -if [ "$1" = "package" ]; then - make DESTDIR=$PWD/_install install - # strip library - "${CXX%-*}-strip" --strip-unneeded _install/usr/local/lib/*.dll - # bundle the DLLs that are specific to Irrlicht (kind of a hack) - shopt -s nullglob - cp -p $libs/*/bin/{libjpeg,libpng,SDL}*.dll _install/usr/local/lib/ - # create a ZIP - (cd _install/usr/local; zip -9r "$OLDPWD/irrlicht-$variant$extras.zip" -- *) -fi -exit 0 diff --git a/irr/scripts/ci-get-mingw.sh b/irr/scripts/ci-get-mingw.sh deleted file mode 100755 index 9cf933fea..000000000 --- a/irr/scripts/ci-get-mingw.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash -set -e -topdir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" - -name=llvm-mingw-20231128-ucrt-ubuntu-20.04-x86_64.tar.xz -wget "https://github.com/mstorsjo/llvm-mingw/releases/download/20231128/$name" -O "$name" -sha256sum -w -c <(grep -F "$name" "$topdir/sha256sums.txt") -sudo tar -xaf "$name" -C /usr --strip-components=1 -rm -f "$name" diff --git a/irr/scripts/sha256sums.txt b/irr/scripts/sha256sums.txt deleted file mode 100644 index 0c080de3b..000000000 --- a/irr/scripts/sha256sums.txt +++ /dev/null @@ -1,9 +0,0 @@ -0f21ff3be90311092fe32e0e30878ef3ae9d9437b8d9ac25ef279e0d84e9bb8e llvm-mingw-20231128-ucrt-ubuntu-20.04-x86_64.tar.xz -53dfd31285f470fcf0dca88217c5cf9c557729af6d103afae5936e72ddc38d3c libjpeg-3.0.1-win32.zip -3d44e0740914e6878300e30653aad39e974821b5d7f6c2567e246b4eb04a5324 libjpeg-3.0.1-win64.zip -6baf4e819bfb3573760524b5dc9a04b5e479090d6d2046b86cf39a3107c0071f libpng-1.6.40-win32.zip -c02e029f01fce44baea7f4aecfd2564bd8a03507c0c6af8b03339ae0452c8b7d libpng-1.6.40-win64.zip -f9f890af960e92fd3f532f2e9ac00681c33bc67a722e000dfdaeb41b0064f1a0 sdl2-2.28.5-win32.zip -8dde2c6963544b7d8a2e87c128ebbdf51ad0e70c7e2df986ff4e963ce9996d9b sdl2-2.28.5-win64.zip -8af10515d57dbfee5d2106cd66cafa2adeb4270d4c6047ccbf7e8b5d2d50681c zlib-1.3.1-win32.zip -ad43f5d23052590c65633530743e5d622cc76b33c109072e6fd7b487aff56bca zlib-1.3.1-win64.zip diff --git a/irr/src/CAnimatedMeshSceneNode.cpp b/irr/src/CAnimatedMeshSceneNode.cpp index c3a71f943..295d408f3 100644 --- a/irr/src/CAnimatedMeshSceneNode.cpp +++ b/irr/src/CAnimatedMeshSceneNode.cpp @@ -258,7 +258,6 @@ void CAnimatedMeshSceneNode::render() // for debug purposes only: if (DebugDataVisible && PassCount == 1) { video::SMaterial debug_mat; - debug_mat.Lighting = false; debug_mat.AntiAliasing = 0; driver->setMaterial(debug_mat); // show normals @@ -280,7 +279,6 @@ void CAnimatedMeshSceneNode::render() } debug_mat.ZBuffer = video::ECFN_DISABLED; - debug_mat.Lighting = false; driver->setMaterial(debug_mat); if (DebugDataVisible & scene::EDS_BBOX) @@ -316,7 +314,6 @@ void CAnimatedMeshSceneNode::render() // show mesh if (DebugDataVisible & scene::EDS_MESH_WIRE_OVERLAY) { - debug_mat.Lighting = false; debug_mat.Wireframe = true; debug_mat.ZBuffer = video::ECFN_DISABLED; driver->setMaterial(debug_mat); diff --git a/irr/src/CAttributeImpl.h b/irr/src/CAttributeImpl.h index 9065a7342..e9436a407 100644 --- a/irr/src/CAttributeImpl.h +++ b/irr/src/CAttributeImpl.h @@ -3,9 +3,6 @@ // For conditions of distribution and use, see copyright notice in irrlicht.h #include "CAttributes.h" -#include "fast_atof.h" -#include "ITexture.h" -#include "IVideoDriver.h" namespace irr { diff --git a/irr/src/CAttributes.cpp b/irr/src/CAttributes.cpp index 2696d6bcf..b1509e455 100644 --- a/irr/src/CAttributes.cpp +++ b/irr/src/CAttributes.cpp @@ -12,61 +12,34 @@ namespace irr namespace io { -CAttributes::CAttributes(video::IVideoDriver *driver) : - Driver(driver) +CAttributes::CAttributes() { #ifdef _DEBUG setDebugName("CAttributes"); #endif - - if (Driver) - Driver->grab(); } CAttributes::~CAttributes() { clear(); - - if (Driver) - Driver->drop(); } //! Removes all attributes void CAttributes::clear() { - for (u32 i = 0; i < Attributes.size(); ++i) - Attributes[i]->drop(); - + for (auto it : Attributes) + delete it.second; Attributes.clear(); } -//! Returns attribute index from name, -1 if not found -s32 CAttributes::findAttribute(const c8 *attributeName) const -{ - for (u32 i = 0; i < Attributes.size(); ++i) - if (Attributes[i]->Name == attributeName) - return i; - - return -1; -} - -IAttribute *CAttributes::getAttributeP(const c8 *attributeName) const -{ - for (u32 i = 0; i < Attributes.size(); ++i) - if (Attributes[i]->Name == attributeName) - return Attributes[i]; - - return 0; -} - //! Sets a attribute as boolean value void CAttributes::setAttribute(const c8 *attributeName, bool value) { - IAttribute *att = getAttributeP(attributeName); - if (att) - att->setBool(value); - else { - Attributes.push_back(new CBoolAttribute(attributeName, value)); + auto it = Attributes.find(attributeName); + if (it != Attributes.end()) { + it->second->setBool(value); + } else { + Attributes[attributeName] = new CBoolAttribute(attributeName, value); } } @@ -76,9 +49,9 @@ void CAttributes::setAttribute(const c8 *attributeName, bool value) //! or 0 if attribute is not set. bool CAttributes::getAttributeAsBool(const c8 *attributeName, bool defaultNotFound) const { - const IAttribute *att = getAttributeP(attributeName); - if (att) - return att->getBool(); + auto it = Attributes.find(attributeName); + if (it != Attributes.end()) + return it->second->getBool(); else return defaultNotFound; } @@ -86,11 +59,11 @@ bool CAttributes::getAttributeAsBool(const c8 *attributeName, bool defaultNotFou //! Sets a attribute as integer value void CAttributes::setAttribute(const c8 *attributeName, s32 value) { - IAttribute *att = getAttributeP(attributeName); - if (att) - att->setInt(value); - else { - Attributes.push_back(new CIntAttribute(attributeName, value)); + auto it = Attributes.find(attributeName); + if (it != Attributes.end()) { + it->second->setInt(value); + } else { + Attributes[attributeName] = new CIntAttribute(attributeName, value); } } @@ -100,9 +73,9 @@ void CAttributes::setAttribute(const c8 *attributeName, s32 value) //! or 0 if attribute is not set. s32 CAttributes::getAttributeAsInt(const c8 *attributeName, irr::s32 defaultNotFound) const { - const IAttribute *att = getAttributeP(attributeName); - if (att) - return att->getInt(); + auto it = Attributes.find(attributeName); + if (it != Attributes.end()) + return it->second->getInt(); else return defaultNotFound; } @@ -110,11 +83,12 @@ s32 CAttributes::getAttributeAsInt(const c8 *attributeName, irr::s32 defaultNotF //! Sets a attribute as float value void CAttributes::setAttribute(const c8 *attributeName, f32 value) { - IAttribute *att = getAttributeP(attributeName); - if (att) - att->setFloat(value); - else - Attributes.push_back(new CFloatAttribute(attributeName, value)); + auto it = Attributes.find(attributeName); + if (it != Attributes.end()) { + it->second->setFloat(value); + } else { + Attributes[attributeName] = new CFloatAttribute(attributeName, value); + } } //! Gets a attribute as integer value @@ -123,27 +97,11 @@ void CAttributes::setAttribute(const c8 *attributeName, f32 value) //! or 0 if attribute is not set. f32 CAttributes::getAttributeAsFloat(const c8 *attributeName, irr::f32 defaultNotFound) const { - const IAttribute *att = getAttributeP(attributeName); - if (att) - return att->getFloat(); - - return defaultNotFound; -} - -//! Returns amount of string attributes set in this scene manager. -u32 CAttributes::getAttributeCount() const -{ - return Attributes.size(); -} - -//! Returns string attribute name by index. -//! \param index: Index value, must be between 0 and getStringAttributeCount()-1. -const c8 *CAttributes::getAttributeName(s32 index) const -{ - if ((u32)index >= Attributes.size()) - return 0; - - return Attributes[index]->Name.c_str(); + auto it = Attributes.find(attributeName); + if (it != Attributes.end()) + return it->second->getFloat(); + else + return defaultNotFound; } //! Returns the type of an attribute @@ -151,98 +109,17 @@ E_ATTRIBUTE_TYPE CAttributes::getAttributeType(const c8 *attributeName) const { E_ATTRIBUTE_TYPE ret = EAT_UNKNOWN; - const IAttribute *att = getAttributeP(attributeName); - if (att) - ret = att->getType(); + auto it = Attributes.find(attributeName); + if (it != Attributes.end()) + ret = it->second->getType(); return ret; } -//! Returns attribute type by index. -//! \param index: Index value, must be between 0 and getAttributeCount()-1. -E_ATTRIBUTE_TYPE CAttributes::getAttributeType(s32 index) const -{ - if ((u32)index >= Attributes.size()) - return EAT_UNKNOWN; - - return Attributes[index]->getType(); -} - -//! Gets an attribute as integer value -//! \param index: Index value, must be between 0 and getAttributeCount()-1. -s32 CAttributes::getAttributeAsInt(s32 index) const -{ - if ((u32)index < Attributes.size()) - return Attributes[index]->getInt(); - else - return 0; -} - -//! Gets an attribute as float value -//! \param index: Index value, must be between 0 and getAttributeCount()-1. -f32 CAttributes::getAttributeAsFloat(s32 index) const -{ - if ((u32)index < Attributes.size()) - return Attributes[index]->getFloat(); - else - return 0.f; -} - -//! Gets an attribute as boolean value -//! \param index: Index value, must be between 0 and getAttributeCount()-1. -bool CAttributes::getAttributeAsBool(s32 index) const -{ - bool ret = false; - - if ((u32)index < Attributes.size()) - ret = Attributes[index]->getBool(); - - return ret; -} - -//! Adds an attribute as integer -void CAttributes::addInt(const c8 *attributeName, s32 value) -{ - Attributes.push_back(new CIntAttribute(attributeName, value)); -} - -//! Adds an attribute as float -void CAttributes::addFloat(const c8 *attributeName, f32 value) -{ - Attributes.push_back(new CFloatAttribute(attributeName, value)); -} - -//! Adds an attribute as bool -void CAttributes::addBool(const c8 *attributeName, bool value) -{ - Attributes.push_back(new CBoolAttribute(attributeName, value)); -} - //! Returns if an attribute with a name exists bool CAttributes::existsAttribute(const c8 *attributeName) const { - return getAttributeP(attributeName) != 0; -} - -//! Sets an attribute as boolean value -void CAttributes::setAttribute(s32 index, bool value) -{ - if ((u32)index < Attributes.size()) - Attributes[index]->setBool(value); -} - -//! Sets an attribute as integer value -void CAttributes::setAttribute(s32 index, s32 value) -{ - if ((u32)index < Attributes.size()) - Attributes[index]->setInt(value); -} - -//! Sets a attribute as float value -void CAttributes::setAttribute(s32 index, f32 value) -{ - if ((u32)index < Attributes.size()) - Attributes[index]->setFloat(value); + return Attributes.find(attributeName) != Attributes.end(); } } // end namespace io diff --git a/irr/src/CAttributes.h b/irr/src/CAttributes.h index 0fe2739b6..8ea3ecf19 100644 --- a/irr/src/CAttributes.h +++ b/irr/src/CAttributes.h @@ -4,16 +4,14 @@ #pragma once +#include +#include #include "IAttributes.h" #include "IAttribute.h" namespace irr { -namespace video -{ -class ITexture; -class IVideoDriver; -} + namespace io { @@ -21,30 +19,16 @@ namespace io class CAttributes : public IAttributes { public: - CAttributes(video::IVideoDriver *driver = 0); + CAttributes(); ~CAttributes(); - //! Returns amount of attributes in this collection of attributes. - u32 getAttributeCount() const override; - - //! Returns attribute name by index. - //! \param index: Index value, must be between 0 and getAttributeCount()-1. - const c8 *getAttributeName(s32 index) const override; - //! Returns the type of an attribute //! \param attributeName: Name for the attribute E_ATTRIBUTE_TYPE getAttributeType(const c8 *attributeName) const override; - //! Returns attribute type by index. - //! \param index: Index value, must be between 0 and getAttributeCount()-1. - E_ATTRIBUTE_TYPE getAttributeType(s32 index) const override; - //! Returns if an attribute with a name exists bool existsAttribute(const c8 *attributeName) const override; - //! Returns attribute index from name, -1 if not found - s32 findAttribute(const c8 *attributeName) const override; - //! Removes all attributes void clear() override; @@ -55,7 +39,9 @@ public: */ //! Adds an attribute as integer - void addInt(const c8 *attributeName, s32 value) override; + void addInt(const c8 *attributeName, s32 value) override { + setAttribute(attributeName, value); + } //! Sets an attribute as integer value void setAttribute(const c8 *attributeName, s32 value) override; @@ -66,13 +52,6 @@ public: //! \return Returns value of the attribute previously set by setAttribute() s32 getAttributeAsInt(const c8 *attributeName, irr::s32 defaultNotFound = 0) const override; - //! Gets an attribute as integer value - //! \param index: Index value, must be between 0 and getAttributeCount()-1. - s32 getAttributeAsInt(s32 index) const override; - - //! Sets an attribute as integer value - void setAttribute(s32 index, s32 value) override; - /* Float Attribute @@ -80,7 +59,9 @@ public: */ //! Adds an attribute as float - void addFloat(const c8 *attributeName, f32 value) override; + void addFloat(const c8 *attributeName, f32 value) override { + setAttribute(attributeName, value); + } //! Sets a attribute as float value void setAttribute(const c8 *attributeName, f32 value) override; @@ -91,19 +72,14 @@ public: //! \return Returns value of the attribute previously set by setAttribute() f32 getAttributeAsFloat(const c8 *attributeName, irr::f32 defaultNotFound = 0.f) const override; - //! Gets an attribute as float value - //! \param index: Index value, must be between 0 and getAttributeCount()-1. - f32 getAttributeAsFloat(s32 index) const override; - - //! Sets an attribute as float value - void setAttribute(s32 index, f32 value) override; - /* Bool Attribute */ //! Adds an attribute as bool - void addBool(const c8 *attributeName, bool value) override; + void addBool(const c8 *attributeName, bool value) override { + setAttribute(attributeName, value); + } //! Sets an attribute as boolean value void setAttribute(const c8 *attributeName, bool value) override; @@ -114,19 +90,12 @@ public: //! \return Returns value of the attribute previously set by setAttribute() bool getAttributeAsBool(const c8 *attributeName, bool defaultNotFound = false) const override; - //! Gets an attribute as boolean value - //! \param index: Index value, must be between 0 and getAttributeCount()-1. - bool getAttributeAsBool(s32 index) const override; - - //! Sets an attribute as boolean value - void setAttribute(s32 index, bool value) override; - protected: - core::array Attributes; + typedef std::basic_string string; - IAttribute *getAttributeP(const c8 *attributeName) const; - - video::IVideoDriver *Driver; + // specify a comparator so we can directly look up in the map with const c8* + // (works since C++14) + std::map> Attributes; }; } // end namespace io diff --git a/irr/src/CB3DMeshFileLoader.cpp b/irr/src/CB3DMeshFileLoader.cpp index 6ee24af0e..4d78860b2 100644 --- a/irr/src/CB3DMeshFileLoader.cpp +++ b/irr/src/CB3DMeshFileLoader.cpp @@ -259,14 +259,15 @@ bool CB3DMeshFileLoader::readChunkMESH(CSkinnedMesh::SJoint *inJoint) if (!NormalsInFile) { s32 i; - for (i = 0; i < (s32)meshBuffer->Indices.size(); i += 3) { - core::plane3df p(meshBuffer->getVertex(meshBuffer->Indices[i + 0])->Pos, - meshBuffer->getVertex(meshBuffer->Indices[i + 1])->Pos, - meshBuffer->getVertex(meshBuffer->Indices[i + 2])->Pos); + auto &indices = meshBuffer->Indices->Data; + for (i = 0; i < (s32)indices.size(); i += 3) { + core::plane3df p(meshBuffer->getVertex(indices[i + 0])->Pos, + meshBuffer->getVertex(indices[i + 1])->Pos, + meshBuffer->getVertex(indices[i + 2])->Pos); - meshBuffer->getVertex(meshBuffer->Indices[i + 0])->Normal += p.Normal; - meshBuffer->getVertex(meshBuffer->Indices[i + 1])->Normal += p.Normal; - meshBuffer->getVertex(meshBuffer->Indices[i + 2])->Normal += p.Normal; + meshBuffer->getVertex(indices[i + 0])->Normal += p.Normal; + meshBuffer->getVertex(indices[i + 1])->Normal += p.Normal; + meshBuffer->getVertex(indices[i + 2])->Normal += p.Normal; } for (i = 0; i < (s32)meshBuffer->getVertexCount(); ++i) { @@ -433,7 +434,7 @@ bool CB3DMeshFileLoader::readChunkTRIS(scene::SSkinMeshBuffer *meshBuffer, u32 m } const s32 memoryNeeded = B3dStack.getLast().length / sizeof(s32); - meshBuffer->Indices.reallocate(memoryNeeded + meshBuffer->Indices.size() + 1); + meshBuffer->Indices->Data.reserve(memoryNeeded + meshBuffer->Indices->Data.size() + 1); while ((B3dStack.getLast().startposition + B3dStack.getLast().length) > B3DFile->getPos()) // this chunk repeats { @@ -471,9 +472,9 @@ bool CB3DMeshFileLoader::readChunkTRIS(scene::SSkinMeshBuffer *meshBuffer, u32 m // Add the vertex to the meshbuffer: if (meshBuffer->VertexType == video::EVT_STANDARD) - meshBuffer->Vertices_Standard.push_back(BaseVertices[vertex_id[i]]); + meshBuffer->Vertices_Standard->Data.push_back(BaseVertices[vertex_id[i]]); else - meshBuffer->Vertices_2TCoords.push_back(BaseVertices[vertex_id[i]]); + meshBuffer->Vertices_2TCoords->Data.push_back(BaseVertices[vertex_id[i]]); // create vertex id to meshbuffer index link: AnimatedVertices_VertexID[vertex_id[i]] = meshBuffer->getVertexCount() - 1; @@ -484,7 +485,8 @@ bool CB3DMeshFileLoader::readChunkTRIS(scene::SSkinMeshBuffer *meshBuffer, u32 m video::S3DVertex *Vertex = meshBuffer->getVertex(meshBuffer->getVertexCount() - 1); if (!HasVertexColors) - Vertex->Color = B3dMaterial->Material.DiffuseColor; + Vertex->Color = video::SColorf(B3dMaterial->red, B3dMaterial->green, + B3dMaterial->blue, B3dMaterial->alpha).toSColor(); else if (Vertex->Color.getAlpha() == 255) Vertex->Color.setAlpha((s32)(B3dMaterial->alpha * 255.0f)); @@ -504,9 +506,9 @@ bool CB3DMeshFileLoader::readChunkTRIS(scene::SSkinMeshBuffer *meshBuffer, u32 m } } - meshBuffer->Indices.push_back(AnimatedVertices_VertexID[vertex_id[0]]); - meshBuffer->Indices.push_back(AnimatedVertices_VertexID[vertex_id[1]]); - meshBuffer->Indices.push_back(AnimatedVertices_VertexID[vertex_id[2]]); + meshBuffer->Indices->Data.push_back(AnimatedVertices_VertexID[vertex_id[0]]); + meshBuffer->Indices->Data.push_back(AnimatedVertices_VertexID[vertex_id[1]]); + meshBuffer->Indices->Data.push_back(AnimatedVertices_VertexID[vertex_id[2]]); } B3dStack.erase(B3dStack.size() - 1); @@ -889,23 +891,8 @@ bool CB3DMeshFileLoader::readChunkBRUS() } } - B3dMaterial.Material.DiffuseColor = video::SColorf(B3dMaterial.red, B3dMaterial.green, B3dMaterial.blue, B3dMaterial.alpha).toSColor(); - B3dMaterial.Material.ColorMaterial = video::ECM_NONE; - //------ Material fx ------ - if (B3dMaterial.fx & 1) { // full-bright - B3dMaterial.Material.AmbientColor = video::SColor(255, 255, 255, 255); - B3dMaterial.Material.Lighting = false; - } else - B3dMaterial.Material.AmbientColor = B3dMaterial.Material.DiffuseColor; - - if (B3dMaterial.fx & 2) // use vertex colors instead of brush color - B3dMaterial.Material.ColorMaterial = video::ECM_DIFFUSE_AND_AMBIENT; - - if (B3dMaterial.fx & 4) // flatshaded - B3dMaterial.Material.GouraudShading = false; - if (B3dMaterial.fx & 16) // disable backface culling B3dMaterial.Material.BackfaceCulling = false; @@ -913,8 +900,6 @@ bool CB3DMeshFileLoader::readChunkBRUS() B3dMaterial.Material.MaterialType = video::EMT_TRANSPARENT_VERTEX_ALPHA; B3dMaterial.Material.ZWriteEnable = video::EZW_OFF; } - - B3dMaterial.Material.Shininess = B3dMaterial.shininess; } B3dStack.erase(B3dStack.size() - 1); diff --git a/irr/src/CBillboardSceneNode.cpp b/irr/src/CBillboardSceneNode.cpp index ddb9d465a..1c6d88dae 100644 --- a/irr/src/CBillboardSceneNode.cpp +++ b/irr/src/CBillboardSceneNode.cpp @@ -26,27 +26,30 @@ CBillboardSceneNode::CBillboardSceneNode(ISceneNode *parent, ISceneManager *mgr, setSize(size); - Buffer->Vertices.set_used(4); - Buffer->Indices.set_used(6); + auto &Vertices = Buffer->Vertices->Data; + auto &Indices = Buffer->Indices->Data; - Buffer->Indices[0] = 0; - Buffer->Indices[1] = 2; - Buffer->Indices[2] = 1; - Buffer->Indices[3] = 0; - Buffer->Indices[4] = 3; - Buffer->Indices[5] = 2; + Vertices.resize(4); + Indices.resize(6); - Buffer->Vertices[0].TCoords.set(1.0f, 1.0f); - Buffer->Vertices[0].Color = colorBottom; + Indices[0] = 0; + Indices[1] = 2; + Indices[2] = 1; + Indices[3] = 0; + Indices[4] = 3; + Indices[5] = 2; - Buffer->Vertices[1].TCoords.set(1.0f, 0.0f); - Buffer->Vertices[1].Color = colorTop; + Vertices[0].TCoords.set(1.0f, 1.0f); + Vertices[0].Color = colorBottom; - Buffer->Vertices[2].TCoords.set(0.0f, 0.0f); - Buffer->Vertices[2].Color = colorTop; + Vertices[1].TCoords.set(1.0f, 0.0f); + Vertices[1].Color = colorTop; - Buffer->Vertices[3].TCoords.set(0.0f, 1.0f); - Buffer->Vertices[3].Color = colorBottom; + Vertices[2].TCoords.set(0.0f, 0.0f); + Vertices[2].Color = colorTop; + + Vertices[3].TCoords.set(0.0f, 1.0f); + Vertices[3].Color = colorBottom; } CBillboardSceneNode::~CBillboardSceneNode() @@ -82,7 +85,6 @@ void CBillboardSceneNode::render() if (DebugDataVisible & scene::EDS_BBOX) { driver->setTransform(video::ETS_WORLD, AbsoluteTransformation); video::SMaterial m; - m.Lighting = false; driver->setMaterial(m); driver->draw3DBox(BBoxSafe, video::SColor(0, 208, 195, 152)); } @@ -114,7 +116,7 @@ void CBillboardSceneNode::updateMesh(const irr::scene::ICameraSceneNode *camera) view *= -1.0f; - core::array &vertices = Buffer->Vertices; + auto &vertices = Buffer->Vertices->Data; for (s32 i = 0; i < 4; ++i) vertices[i].Normal = view; @@ -211,8 +213,9 @@ void CBillboardSceneNode::getSize(f32 &height, f32 &bottomEdgeWidth, //! \param overallColor: the color to set void CBillboardSceneNode::setColor(const video::SColor &overallColor) { + auto &vertices = Buffer->Vertices->Data; for (u32 vertex = 0; vertex < 4; ++vertex) - Buffer->Vertices[vertex].Color = overallColor; + vertices[vertex].Color = overallColor; } //! Set the color of the top and bottom vertices of the billboard @@ -221,10 +224,11 @@ void CBillboardSceneNode::setColor(const video::SColor &overallColor) void CBillboardSceneNode::setColor(const video::SColor &topColor, const video::SColor &bottomColor) { - Buffer->Vertices[0].Color = bottomColor; - Buffer->Vertices[1].Color = topColor; - Buffer->Vertices[2].Color = topColor; - Buffer->Vertices[3].Color = bottomColor; + auto &vertices = Buffer->Vertices->Data; + vertices[0].Color = bottomColor; + vertices[1].Color = topColor; + vertices[2].Color = topColor; + vertices[3].Color = bottomColor; } //! Gets the color of the top and bottom vertices of the billboard @@ -233,8 +237,9 @@ void CBillboardSceneNode::setColor(const video::SColor &topColor, void CBillboardSceneNode::getColor(video::SColor &topColor, video::SColor &bottomColor) const { - bottomColor = Buffer->Vertices[0].Color; - topColor = Buffer->Vertices[1].Color; + auto &vertices = Buffer->Vertices->Data; + bottomColor = vertices[0].Color; + topColor = vertices[1].Color; } //! Creates a clone of this scene node and its children. diff --git a/irr/src/CEGLManager.cpp b/irr/src/CEGLManager.cpp index ffe7a44cf..daaa64fdf 100644 --- a/irr/src/CEGLManager.cpp +++ b/irr/src/CEGLManager.cpp @@ -152,9 +152,6 @@ EGLConfig CEGLManager::chooseConfig(EConfigStyle confStyle) // Find proper OpenGL BIT. EGLint eglOpenGLBIT = 0; switch (Params.DriverType) { - case EDT_OGLES1: - eglOpenGLBIT = EGL_OPENGL_ES_BIT; - break; case EDT_OGLES2: case EDT_WEBGL1: eglOpenGLBIT = EGL_OPENGL_ES2_BIT; @@ -459,9 +456,6 @@ bool CEGLManager::generateContext() EGLint OpenGLESVersion = 0; switch (Params.DriverType) { - case EDT_OGLES1: - OpenGLESVersion = 1; - break; case EDT_OGLES2: case EDT_WEBGL1: OpenGLESVersion = 2; diff --git a/irr/src/CFPSCounter.cpp b/irr/src/CFPSCounter.cpp index 6717df5c9..0542fc5cb 100644 --- a/irr/src/CFPSCounter.cpp +++ b/irr/src/CFPSCounter.cpp @@ -11,53 +11,22 @@ namespace video { CFPSCounter::CFPSCounter() : - FPS(60), Primitive(0), StartTime(0), FramesCounted(0), - PrimitivesCounted(0), PrimitiveAverage(0), PrimitiveTotal(0) + FPS(0), StartTime(0), FramesCounted(0) { } -//! returns current fps -s32 CFPSCounter::getFPS() const -{ - return FPS; -} - -//! returns current primitive count -u32 CFPSCounter::getPrimitive() const -{ - return Primitive; -} - -//! returns average primitive count of last period -u32 CFPSCounter::getPrimitiveAverage() const -{ - return PrimitiveAverage; -} - -//! returns accumulated primitive count since start -u32 CFPSCounter::getPrimitiveTotal() const -{ - return PrimitiveTotal; -} - //! to be called every frame -void CFPSCounter::registerFrame(u32 now, u32 primitivesDrawn) +void CFPSCounter::registerFrame(u32 now) { ++FramesCounted; - PrimitiveTotal += primitivesDrawn; - PrimitivesCounted += primitivesDrawn; - Primitive = primitivesDrawn; const u32 milliseconds = now - StartTime; - if (milliseconds >= 1500) { const f32 invMilli = core::reciprocal((f32)milliseconds); FPS = core::ceil32((1000 * FramesCounted) * invMilli); - PrimitiveAverage = core::ceil32((1000 * PrimitivesCounted) * invMilli); FramesCounted = 0; - PrimitivesCounted = 0; StartTime = now; } } diff --git a/irr/src/CFPSCounter.h b/irr/src/CFPSCounter.h index e73afb049..692aef6bd 100644 --- a/irr/src/CFPSCounter.h +++ b/irr/src/CFPSCounter.h @@ -17,29 +17,15 @@ public: CFPSCounter(); //! returns current fps - s32 getFPS() const; - - //! returns primitive count - u32 getPrimitive() const; - - //! returns average primitive count of last period - u32 getPrimitiveAverage() const; - - //! returns accumulated primitive count since start - u32 getPrimitiveTotal() const; + s32 getFPS() const { return FPS; } //! to be called every frame - void registerFrame(u32 now, u32 primitive); + void registerFrame(u32 now); private: s32 FPS; - u32 Primitive; u32 StartTime; - u32 FramesCounted; - u32 PrimitivesCounted; - u32 PrimitiveAverage; - u32 PrimitiveTotal; }; } // end namespace video diff --git a/irr/src/CFileSystem.cpp b/irr/src/CFileSystem.cpp index bffb703dd..386bb389c 100644 --- a/irr/src/CFileSystem.cpp +++ b/irr/src/CFileSystem.cpp @@ -58,14 +58,8 @@ CFileSystem::CFileSystem() //! destructor CFileSystem::~CFileSystem() { - u32 i; - - for (i = 0; i < FileArchives.size(); ++i) { - FileArchives[i]->drop(); - } - - for (i = 0; i < ArchiveLoader.size(); ++i) { - ArchiveLoader[i]->drop(); + for (auto *it : ArchiveLoader) { + it->drop(); } } @@ -75,15 +69,6 @@ IReadFile *CFileSystem::createAndOpenFile(const io::path &filename) if (filename.empty()) return 0; - IReadFile *file = 0; - u32 i; - - for (i = 0; i < FileArchives.size(); ++i) { - file = FileArchives[i]->createAndOpenFile(filename); - if (file) - return file; - } - // Create the file using an absolute path so that it matches // the scheme used by CNullDriver::getTexture(). return CReadFile::createReadFile(getAbsolutePath(filename)); @@ -150,241 +135,6 @@ IArchiveLoader *CFileSystem::getArchiveLoader(u32 index) const return 0; } -//! move the hirarchy of the filesystem. moves sourceIndex relative up or down -bool CFileSystem::moveFileArchive(u32 sourceIndex, s32 relative) -{ - bool r = false; - const s32 dest = (s32)sourceIndex + relative; - const s32 dir = relative < 0 ? -1 : 1; - const s32 sourceEnd = ((s32)FileArchives.size()) - 1; - IFileArchive *t; - - for (s32 s = (s32)sourceIndex; s != dest; s += dir) { - if (s < 0 || s > sourceEnd || s + dir < 0 || s + dir > sourceEnd) - continue; - - t = FileArchives[s + dir]; - FileArchives[s + dir] = FileArchives[s]; - FileArchives[s] = t; - r = true; - } - return r; -} - -//! Adds an archive to the file system. -bool CFileSystem::addFileArchive(const io::path &filename, bool ignoreCase, - bool ignorePaths, E_FILE_ARCHIVE_TYPE archiveType, - const core::stringc &password, - IFileArchive **retArchive) -{ - IFileArchive *archive = 0; - bool ret = false; - - // see if archive is already added - - s32 i; - - // do we know what type it should be? - if (archiveType == EFAT_UNKNOWN) { - // try to load archive based on file name - for (i = ArchiveLoader.size() - 1; i >= 0; --i) { - if (ArchiveLoader[i]->isALoadableFileFormat(filename)) { - archive = ArchiveLoader[i]->createArchive(filename, ignoreCase, ignorePaths); - if (archive) - break; - } - } - - // try to load archive based on content - if (!archive) { - io::IReadFile *file = createAndOpenFile(filename); - if (file) { - for (i = ArchiveLoader.size() - 1; i >= 0; --i) { - file->seek(0); - if (ArchiveLoader[i]->isALoadableFileFormat(file)) { - file->seek(0); - archive = ArchiveLoader[i]->createArchive(file, ignoreCase, ignorePaths); - if (archive) - break; - } - } - file->drop(); - } - } - } else { - // try to open archive based on archive loader type - - io::IReadFile *file = 0; - - for (i = ArchiveLoader.size() - 1; i >= 0; --i) { - if (ArchiveLoader[i]->isALoadableFileFormat(archiveType)) { - // attempt to open file - if (!file) - file = createAndOpenFile(filename); - - // is the file open? - if (file) { - // attempt to open archive - file->seek(0); - if (ArchiveLoader[i]->isALoadableFileFormat(file)) { - file->seek(0); - archive = ArchiveLoader[i]->createArchive(file, ignoreCase, ignorePaths); - if (archive) - break; - } - } else { - // couldn't open file - break; - } - } - } - - // if open, close the file - if (file) - file->drop(); - } - - if (archive) { - FileArchives.push_back(archive); - if (password.size()) - archive->Password = password; - if (retArchive) - *retArchive = archive; - ret = true; - } else { - os::Printer::log("Could not create archive for", filename, ELL_ERROR); - } - - return ret; -} - -bool CFileSystem::addFileArchive(IReadFile *file, bool ignoreCase, - bool ignorePaths, E_FILE_ARCHIVE_TYPE archiveType, - const core::stringc &password, IFileArchive **retArchive) -{ - if (!file) - return false; - - if (file) { - IFileArchive *archive = 0; - s32 i; - - if (archiveType == EFAT_UNKNOWN) { - // try to load archive based on file name - for (i = ArchiveLoader.size() - 1; i >= 0; --i) { - if (ArchiveLoader[i]->isALoadableFileFormat(file->getFileName())) { - archive = ArchiveLoader[i]->createArchive(file, ignoreCase, ignorePaths); - if (archive) - break; - } - } - - // try to load archive based on content - if (!archive) { - for (i = ArchiveLoader.size() - 1; i >= 0; --i) { - file->seek(0); - if (ArchiveLoader[i]->isALoadableFileFormat(file)) { - file->seek(0); - archive = ArchiveLoader[i]->createArchive(file, ignoreCase, ignorePaths); - if (archive) - break; - } - } - } - } else { - // try to open archive based on archive loader type - for (i = ArchiveLoader.size() - 1; i >= 0; --i) { - if (ArchiveLoader[i]->isALoadableFileFormat(archiveType)) { - // attempt to open archive - file->seek(0); - if (ArchiveLoader[i]->isALoadableFileFormat(file)) { - file->seek(0); - archive = ArchiveLoader[i]->createArchive(file, ignoreCase, ignorePaths); - if (archive) - break; - } - } - } - } - - if (archive) { - FileArchives.push_back(archive); - if (password.size()) - archive->Password = password; - if (retArchive) - *retArchive = archive; - return true; - } else { - os::Printer::log("Could not create archive for", file->getFileName(), ELL_ERROR); - } - } - - return false; -} - -//! Adds an archive to the file system. -bool CFileSystem::addFileArchive(IFileArchive *archive) -{ - if (archive) { - for (u32 i = 0; i < FileArchives.size(); ++i) { - if (archive == FileArchives[i]) { - return false; - } - } - FileArchives.push_back(archive); - archive->grab(); - - return true; - } - - return false; -} - -//! removes an archive from the file system. -bool CFileSystem::removeFileArchive(u32 index) -{ - bool ret = false; - if (index < FileArchives.size()) { - FileArchives[index]->drop(); - FileArchives.erase(index); - ret = true; - } - return ret; -} - -//! removes an archive from the file system. -bool CFileSystem::removeFileArchive(const io::path &filename) -{ - const path absPath = getAbsolutePath(filename); - for (u32 i = 0; i < FileArchives.size(); ++i) { - if (absPath == FileArchives[i]->getFileList()->getPath()) - return removeFileArchive(i); - } - return false; -} - -//! Removes an archive from the file system. -bool CFileSystem::removeFileArchive(const IFileArchive *archive) -{ - for (u32 i = 0; i < FileArchives.size(); ++i) { - if (archive == FileArchives[i]) { - return removeFileArchive(i); - } - } - return false; -} - -//! gets an archive -u32 CFileSystem::getFileArchiveCount() const -{ - return FileArchives.size(); -} - -IFileArchive *CFileSystem::getFileArchive(u32 index) -{ - return index < getFileArchiveCount() ? FileArchives[index] : 0; -} - //! Returns the string of the current working directory const io::path &CFileSystem::getWorkingDirectory() { @@ -711,17 +461,6 @@ IFileList *CFileSystem::createFileList() //! parent r->addItem(Path + _IRR_TEXT(".."), 0, 0, true, 0); - - //! merge archives - for (u32 i = 0; i < FileArchives.size(); ++i) { - const IFileList *merge = FileArchives[i]->getFileList(); - - for (u32 j = 0; j < merge->getFileCount(); ++j) { - if (core::isInSameDirectory(Path, merge->getFullFileName(j)) == 0) { - r->addItem(merge->getFullFileName(j), merge->getFileOffset(j), merge->getFileSize(j), merge->isDirectory(j), 0); - } - } - } } if (r) @@ -738,10 +477,6 @@ IFileList *CFileSystem::createEmptyFileList(const io::path &path, bool ignoreCas //! determines if a file exists and would be able to be opened. bool CFileSystem::existFile(const io::path &filename) const { - for (u32 i = 0; i < FileArchives.size(); ++i) - if (FileArchives[i]->getFileList()->findFile(filename) != -1) - return true; - #if defined(_MSC_VER) return (_access(filename.c_str(), 0) != -1); #elif defined(F_OK) diff --git a/irr/src/CFileSystem.h b/irr/src/CFileSystem.h index 18bc7ff3f..9400d85a3 100644 --- a/irr/src/CFileSystem.h +++ b/irr/src/CFileSystem.h @@ -4,8 +4,8 @@ #pragma once +#include #include "IFileSystem.h" -#include "irrArray.h" namespace irr { @@ -17,7 +17,7 @@ class CZipReader; /*! FileSystem which uses normal files and one zipfile */ -class CFileSystem : public IFileSystem +class CFileSystem final : public IFileSystem { public: //! constructor @@ -41,25 +41,6 @@ public: //! Opens a file for write access. IWriteFile *createAndWriteFile(const io::path &filename, bool append = false) override; - //! Adds an archive to the file system. - virtual bool addFileArchive(const io::path &filename, - bool ignoreCase = true, bool ignorePaths = true, - E_FILE_ARCHIVE_TYPE archiveType = EFAT_UNKNOWN, - const core::stringc &password = "", - IFileArchive **retArchive = 0) override; - - //! Adds an archive to the file system. - virtual bool addFileArchive(IReadFile *file, bool ignoreCase = true, - bool ignorePaths = true, - E_FILE_ARCHIVE_TYPE archiveType = EFAT_UNKNOWN, - const core::stringc &password = "", - IFileArchive **retArchive = 0) override; - - //! Adds an archive to the file system. - bool addFileArchive(IFileArchive *archive) override; - - //! move the hirarchy of the filesystem. moves sourceIndex relative up or down - bool moveFileArchive(u32 sourceIndex, s32 relative) override; //! Adds an external archive loader to the engine. void addArchiveLoader(IArchiveLoader *loader) override; @@ -70,21 +51,6 @@ public: //! Gets the archive loader by index. IArchiveLoader *getArchiveLoader(u32 index) const override; - //! gets the file archive count - u32 getFileArchiveCount() const override; - - //! gets an archive - IFileArchive *getFileArchive(u32 index) override; - - //! removes an archive from the file system. - bool removeFileArchive(u32 index) override; - - //! removes an archive from the file system. - bool removeFileArchive(const io::path &filename) override; - - //! Removes an archive from the file system. - bool removeFileArchive(const IFileArchive *archive) override; - //! Returns the string of the current working directory const io::path &getWorkingDirectory() override; @@ -129,9 +95,7 @@ private: //! WorkingDirectory for Native and Virtual filesystems io::path WorkingDirectory[2]; //! currently attached ArchiveLoaders - core::array ArchiveLoader; - //! currently attached Archives - core::array FileArchives; + std::vector ArchiveLoader; }; } // end namespace irr diff --git a/irr/src/CGLTFMeshFileLoader.cpp b/irr/src/CGLTFMeshFileLoader.cpp new file mode 100644 index 000000000..64bbc10f1 --- /dev/null +++ b/irr/src/CGLTFMeshFileLoader.cpp @@ -0,0 +1,695 @@ +// Minetest +// SPDX-License-Identifier: LGPL-2.1-or-later + +#include "CGLTFMeshFileLoader.h" + +#include "coreutil.h" +#include "CSkinnedMesh.h" +#include "ISkinnedMesh.h" +#include "irrTypes.h" +#include "IReadFile.h" +#include "matrix4.h" +#include "path.h" +#include "quaternion.h" +#include "vector3d.h" +#include "os.h" + +#include "tiniergltf.hpp" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace irr { + +/* Notes on the coordinate system. + * + * glTF uses a right-handed coordinate system where +Z is the + * front-facing axis, and Irrlicht uses a left-handed coordinate + * system where -Z is the front-facing axis. + * We convert between them by mirroring the mesh across the X axis. + * Doing this correctly requires negating the Z coordinate on + * vertex positions and normals, and reversing the winding order + * of the vertex indices. + */ + +// Right-to-left handedness conversions + +template +static inline T convertHandedness(const T &t); + +template <> +core::vector3df convertHandedness(const core::vector3df &p) +{ + return core::vector3df(p.X, p.Y, -p.Z); +} + +namespace scene { + +using SelfType = CGLTFMeshFileLoader; + +template +SelfType::Accessor +SelfType::Accessor::sparseIndices(const tiniergltf::GlTF &model, + const tiniergltf::AccessorSparseIndices &indices, + const std::size_t count) +{ + const auto &view = model.bufferViews->at(indices.bufferView); + const auto byteStride = view.byteStride.value_or(indices.elementSize()); + + const auto &buffer = model.buffers->at(view.buffer); + const auto source = buffer.data.data() + view.byteOffset + indices.byteOffset; + + return SelfType::Accessor(source, byteStride, count); +} + +template +SelfType::Accessor +SelfType::Accessor::sparseValues(const tiniergltf::GlTF &model, + const tiniergltf::AccessorSparseValues &values, + const std::size_t count, + const std::size_t defaultByteStride) +{ + const auto &view = model.bufferViews->at(values.bufferView); + const auto byteStride = view.byteStride.value_or(defaultByteStride); + + const auto &buffer = model.buffers->at(view.buffer); + const auto source = buffer.data.data() + view.byteOffset + values.byteOffset; + + return SelfType::Accessor(source, byteStride, count); +} + +template +SelfType::Accessor +SelfType::Accessor::base(const tiniergltf::GlTF &model, std::size_t accessorIdx) +{ + const auto &accessor = model.accessors->at(accessorIdx); + + if (!accessor.bufferView.has_value()) { + return Accessor(accessor.count); + } + + const auto &view = model.bufferViews->at(accessor.bufferView.value()); + const auto byteStride = view.byteStride.value_or(accessor.elementSize()); + + const auto &buffer = model.buffers->at(view.buffer); + const auto source = buffer.data.data() + view.byteOffset + accessor.byteOffset; + + return Accessor(source, byteStride, accessor.count); +} + +template +SelfType::Accessor +SelfType::Accessor::make(const tiniergltf::GlTF &model, std::size_t accessorIdx) +{ + const auto &accessor = model.accessors->at(accessorIdx); + if (accessor.componentType != getComponentType() || accessor.type != getType()) + throw std::runtime_error("invalid accessor"); + + const auto base = Accessor::base(model, accessorIdx); + + if (accessor.sparse.has_value()) { + std::vector vec(accessor.count); + for (std::size_t i = 0; i < accessor.count; ++i) { + vec[i] = base.get(i); + } + const auto overriddenCount = accessor.sparse->count; + const auto indicesAccessor = ([&]() -> AccessorVariant { + switch (accessor.sparse->indices.componentType) { + case tiniergltf::AccessorSparseIndices::ComponentType::UNSIGNED_BYTE: + return Accessor::sparseIndices(model, accessor.sparse->indices, overriddenCount); + case tiniergltf::AccessorSparseIndices::ComponentType::UNSIGNED_SHORT: + return Accessor::sparseIndices(model, accessor.sparse->indices, overriddenCount); + case tiniergltf::AccessorSparseIndices::ComponentType::UNSIGNED_INT: + return Accessor::sparseIndices(model, accessor.sparse->indices, overriddenCount); + } + throw std::logic_error("invalid enum value"); + })(); + + const auto valuesAccessor = Accessor::sparseValues(model, + accessor.sparse->values, overriddenCount, + accessor.bufferView.has_value() + ? model.bufferViews->at(*accessor.bufferView).byteStride.value_or(accessor.elementSize()) + : accessor.elementSize()); + + for (std::size_t i = 0; i < overriddenCount; ++i) { + u32 index; + std::visit([&](auto &&acc) { index = acc.get(i); }, indicesAccessor); + if (index >= accessor.count) + throw std::runtime_error("index out of bounds"); + vec[index] = valuesAccessor.get(i); + } + return Accessor(vec, accessor.count); + } + + return base; +} + +#define ACCESSOR_TYPES(T, U, V) \ + template <> \ + constexpr tiniergltf::Accessor::Type SelfType::Accessor::getType() \ + { \ + return tiniergltf::Accessor::Type::U; \ + } \ + template <> \ + constexpr tiniergltf::Accessor::ComponentType SelfType::Accessor::getComponentType() \ + { \ + return tiniergltf::Accessor::ComponentType::V; \ + } + +#define VEC_ACCESSOR_TYPES(T, U, N) \ + template <> \ + constexpr tiniergltf::Accessor::Type SelfType::Accessor>::getType() \ + { \ + return tiniergltf::Accessor::Type::VEC##N; \ + } \ + template <> \ + constexpr tiniergltf::Accessor::ComponentType SelfType::Accessor>::getComponentType() \ + { \ + return tiniergltf::Accessor::ComponentType::U; \ + } \ + template <> \ + std::array SelfType::rawget(const char *ptr) \ + { \ + std::array res; \ + for (int i = 0; i < N; ++i) \ + res[i] = rawget(ptr + sizeof(T) * i); \ + return res; \ + } + +#define ACCESSOR_PRIMITIVE(T, U) \ + ACCESSOR_TYPES(T, SCALAR, U) \ + VEC_ACCESSOR_TYPES(T, U, 2) \ + VEC_ACCESSOR_TYPES(T, U, 3) \ + VEC_ACCESSOR_TYPES(T, U, 4) + +ACCESSOR_PRIMITIVE(f32, FLOAT) +ACCESSOR_PRIMITIVE(u8, UNSIGNED_BYTE) +ACCESSOR_PRIMITIVE(u16, UNSIGNED_SHORT) +ACCESSOR_PRIMITIVE(u32, UNSIGNED_INT) + +ACCESSOR_TYPES(core::vector3df, VEC3, FLOAT) + +template +T SelfType::Accessor::get(std::size_t i) const +{ + // Buffer-based accessor: Read directly from the buffer. + if (std::holds_alternative(source)) { + const auto bufsrc = std::get(source); + return rawget(bufsrc.ptr + i * bufsrc.byteStride); + } + // Array-based accessor (used for sparse accessors): Read from array. + if (std::holds_alternative>(source)) { + return std::get>(source)[i]; + } + // Default-initialized accessor. + // We differ slightly from glTF here in that + // we default-initialize quaternions and matrices properly, + // but this does not cause any discrepancies for valid glTF models. + std::get>(source); + return T(); +} + +template +T SelfType::rawget(const char *ptr) +{ + T dest; + std::memcpy(&dest, ptr, sizeof(dest)); +#ifdef __BIG_ENDIAN__ + return os::Byteswap::byteswap(dest); +#else + return dest; +#endif +} + +// Note that these "more specialized templates" should win. + +template <> +core::matrix4 SelfType::rawget(const char *ptr) +{ + core::matrix4 mat; + for (u8 i = 0; i < 16; ++i) { + mat[i] = rawget(ptr + i * sizeof(f32)); + } + return mat; +} + +template <> +core::vector3df SelfType::rawget(const char *ptr) +{ + return core::vector3df( + rawget(ptr), + rawget(ptr + sizeof(f32)), + rawget(ptr + 2 * sizeof(f32))); +} + +template <> +core::quaternion SelfType::rawget(const char *ptr) +{ + return core::quaternion( + rawget(ptr), + rawget(ptr + sizeof(f32)), + rawget(ptr + 2 * sizeof(f32)), + rawget(ptr + 3 * sizeof(f32))); +} + +template +SelfType::NormalizedValuesAccessor +SelfType::createNormalizedValuesAccessor( + const tiniergltf::GlTF &model, + const std::size_t accessorIdx) +{ + const auto &acc = model.accessors->at(accessorIdx); + switch (acc.componentType) { + case tiniergltf::Accessor::ComponentType::UNSIGNED_BYTE: + return Accessor>::make(model, accessorIdx); + case tiniergltf::Accessor::ComponentType::UNSIGNED_SHORT: + return Accessor>::make(model, accessorIdx); + case tiniergltf::Accessor::ComponentType::FLOAT: + return Accessor>::make(model, accessorIdx); + default: + throw std::runtime_error("invalid component type"); + } +} + +template +std::array SelfType::getNormalizedValues( + const NormalizedValuesAccessor &accessor, + const std::size_t i) +{ + std::array values; + if (std::holds_alternative>>(accessor)) { + const auto u8s = std::get>>(accessor).get(i); + for (u8 i = 0; i < N; ++i) + values[i] = static_cast(u8s[i]) / std::numeric_limits::max(); + } else if (std::holds_alternative>>(accessor)) { + const auto u16s = std::get>>(accessor).get(i); + for (u8 i = 0; i < N; ++i) + values[i] = static_cast(u16s[i]) / std::numeric_limits::max(); + } else { + values = std::get>>(accessor).get(i); + for (u8 i = 0; i < N; ++i) { + if (values[i] < 0 || values[i] > 1) + throw std::runtime_error("invalid normalized value"); + } + } + return values; +} + +/** + * The most basic portion of the code base. This tells irllicht if this file has a .gltf extension. +*/ +bool SelfType::isALoadableFileExtension( + const io::path& filename) const +{ + return core::hasFileExtension(filename, "gltf"); +} + +/** + * Entry point into loading a GLTF model. +*/ +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->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); + try { + parser.loadNodes(); + } catch (std::runtime_error &e) { + os::Printer::log("glTF loader", e.what(), ELL_ERROR); + mesh->drop(); + return nullptr; + } + if (model->images.has_value()) + os::Printer::log("glTF loader", "embedded images are not supported", ELL_WARNING); + return mesh; +} + +static void transformVertices(std::vector &vertices, const core::matrix4 &transform) +{ + for (auto &vertex : vertices) { + // Apply scaling, rotation and rotation (in that order) to the position. + transform.transformVect(vertex.Pos); + // For the normal, we do not want to apply the translation. + // TODO note that this also applies scaling; the Irrlicht method is misnamed. + transform.rotateVect(vertex.Normal); + // Renormalize (length might have been affected by scaling). + vertex.Normal.normalize(); + } +} + +static void checkIndices(const std::vector &indices, const std::size_t nVerts) +{ + for (u16 index : indices) { + if (index >= nVerts) + throw std::runtime_error("index out of bounds"); + } +} + +static std::vector generateIndices(const std::size_t nVerts) +{ + std::vector indices(nVerts); + for (std::size_t i = 0; i < nVerts; i += 3) { + // Reverse winding order per triangle + indices[i] = i + 2; + indices[i + 1] = i + 1; + indices[i + 2] = i; + } + return indices; +} + +/** + * Load up the rawest form of the model. The vertex positions and indices. + * Documentation: https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#meshes + * If material is undefined, then a default material MUST be used. +*/ +void SelfType::MeshExtractor::loadMesh( + const std::size_t meshIdx, + ISkinnedMesh::SJoint *parent) const +{ + for (std::size_t pi = 0; pi < getPrimitiveCount(meshIdx); ++pi) { + const auto &primitive = m_gltf_model.meshes->at(meshIdx).primitives.at(pi); + auto vertices = getVertices(primitive); + if (!vertices.has_value()) + continue; // "When positions are not specified, client implementations SHOULD skip primitive’s rendering" + + // Excludes the max value for consistency. + if (vertices->size() >= std::numeric_limits::max()) + throw std::runtime_error("too many vertices"); + + // Apply the global transform along the parent chain. + transformVertices(*vertices, parent->GlobalMatrix); + + auto maybeIndices = getIndices(primitive); + std::vector indices; + if (maybeIndices.has_value()) { + indices = std::move(*maybeIndices); + checkIndices(indices, vertices->size()); + } else { + // Non-indexed geometry + indices = generateIndices(vertices->size()); + } + + m_irr_model->addMeshBuffer( + new SSkinMeshBuffer(std::move(*vertices), std::move(indices))); + + if (primitive.material.has_value()) { + const auto &material = m_gltf_model.materials->at(*primitive.material); + if (material.pbrMetallicRoughness.has_value()) { + const auto &texture = material.pbrMetallicRoughness->baseColorTexture; + if (texture.has_value()) { + const auto meshbufNr = m_irr_model->getMeshBufferCount() - 1; + m_irr_model->setTextureSlot(meshbufNr, static_cast(texture->index)); + } + } + } + } +} + +// Base transformation between left & right handed coordinate systems. +// This just inverts the Z axis. +static const core::matrix4 leftToRight = core::matrix4( + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, -1, 0, + 0, 0, 0, 1 +); +static const core::matrix4 rightToLeft = leftToRight; + +static core::matrix4 loadTransform(const tiniergltf::Node::Matrix &m) +{ + // Note: Under the hood, this casts these doubles to floats. + return core::matrix4( + m[0], m[1], m[2], m[3], + m[4], m[5], m[6], m[7], + m[8], m[9], m[10], m[11], + m[12], m[13], m[14], m[15]); +} + +static core::matrix4 loadTransform(const tiniergltf::Node::TRS &trs) +{ + const auto &trans = trs.translation; + const auto &rot = trs.rotation; + const auto &scale = trs.scale; + core::matrix4 transMat; + transMat.setTranslation(core::vector3df(trans[0], trans[1], trans[2])); + core::matrix4 rotMat = core::quaternion(rot[0], rot[1], rot[2], rot[3]).getMatrix(); + core::matrix4 scaleMat; + scaleMat.setScale(core::vector3df(scale[0], scale[1], scale[2])); + return transMat * rotMat * scaleMat; +} + +static core::matrix4 loadTransform(std::optional> transform) { + if (!transform.has_value()) { + return core::matrix4(); + } + core::matrix4 mat = std::visit([](const auto &t) { return loadTransform(t); }, *transform); + return rightToLeft * mat * leftToRight; +} + +void SelfType::MeshExtractor::loadNode( + const std::size_t nodeIdx, + ISkinnedMesh::SJoint *parent) const +{ + const auto &node = m_gltf_model.nodes->at(nodeIdx); + auto *joint = m_irr_model->addJoint(parent); + const core::matrix4 transform = loadTransform(node.transform); + joint->LocalMatrix = transform; + joint->GlobalMatrix = parent ? parent->GlobalMatrix * joint->LocalMatrix : joint->LocalMatrix; + if (node.name.has_value()) { + joint->Name = node.name->c_str(); + } + if (node.mesh.has_value()) { + loadMesh(*node.mesh, joint); + } + if (node.children.has_value()) { + for (const auto &child : *node.children) { + loadNode(child, joint); + } + } +} + +void SelfType::MeshExtractor::loadNodes() const +{ + std::vector isChild(m_gltf_model.nodes->size()); + for (const auto &node : *m_gltf_model.nodes) { + if (!node.children.has_value()) + continue; + for (const auto &child : *node.children) { + isChild[child] = true; + } + } + // Load all nodes that aren't children. + // Children will be loaded by their parent nodes. + for (std::size_t i = 0; i < m_gltf_model.nodes->size(); ++i) { + if (!isChild[i]) { + loadNode(i, nullptr); + } + } +} + +/** + * Extracts GLTF mesh indices. + */ +std::optional> SelfType::MeshExtractor::getIndices( + const tiniergltf::MeshPrimitive &primitive) const +{ + const auto accessorIdx = primitive.indices; + if (!accessorIdx.has_value()) + return std::nullopt; // non-indexed geometry + + const auto accessor = ([&]() -> AccessorVariant { + const auto &acc = m_gltf_model.accessors->at(*accessorIdx); + switch (acc.componentType) { + case tiniergltf::Accessor::ComponentType::UNSIGNED_BYTE: + return Accessor::make(m_gltf_model, *accessorIdx); + case tiniergltf::Accessor::ComponentType::UNSIGNED_SHORT: + return Accessor::make(m_gltf_model, *accessorIdx); + case tiniergltf::Accessor::ComponentType::UNSIGNED_INT: + return Accessor::make(m_gltf_model, *accessorIdx); + default: + throw std::runtime_error("invalid component type"); + } + })(); + const auto count = std::visit([](auto &&a) { return a.getCount(); }, accessor); + + std::vector indices; + for (std::size_t i = 0; i < count; ++i) { + // TODO (low-priority, maybe never) also reverse winding order based on determinant of global transform + // FIXME this hack also reverses triangle draw order + std::size_t elemIdx = count - i - 1; // reverse index order + u16 index; + // Note: glTF forbids the max value for each component type. + if (std::holds_alternative>(accessor)) { + index = std::get>(accessor).get(elemIdx); + if (index == std::numeric_limits::max()) + throw std::runtime_error("invalid index"); + } else if (std::holds_alternative>(accessor)) { + index = std::get>(accessor).get(elemIdx); + if (index == std::numeric_limits::max()) + throw std::runtime_error("invalid index"); + } else if (std::holds_alternative>(accessor)) { + u32 indexWide = std::get>(accessor).get(elemIdx); + // Use >= here for consistency. + if (indexWide >= std::numeric_limits::max()) + throw std::runtime_error("index too large (>= 65536)"); + index = static_cast(indexWide); + } + indices.push_back(index); + } + + return indices; +} + +/** + * Create a vector of video::S3DVertex (model data) from a mesh & primitive index. + */ +std::optional> SelfType::MeshExtractor::getVertices( + const tiniergltf::MeshPrimitive &primitive) const +{ + const auto &attributes = primitive.attributes; + const auto positionAccessorIdx = attributes.position; + if (!positionAccessorIdx.has_value()) { + // "When positions are not specified, client implementations SHOULD skip primitive's rendering" + return std::nullopt; + } + + std::vector vertices; + const auto vertexCount = m_gltf_model.accessors->at(*positionAccessorIdx).count; + vertices.resize(vertexCount); + copyPositions(*positionAccessorIdx, vertices); + + const auto normalAccessorIdx = attributes.normal; + if (normalAccessorIdx.has_value()) { + copyNormals(normalAccessorIdx.value(), vertices); + } + // TODO verify that the automatic normal recalculation done in Minetest indeed works correctly + + const auto &texcoords = attributes.texcoord; + if (texcoords.has_value()) { + const auto tCoordAccessorIdx = texcoords->at(0); + copyTCoords(tCoordAccessorIdx, vertices); + } + + return vertices; +} + +/** + * Get the amount of meshes that a model contains. +*/ +std::size_t SelfType::MeshExtractor::getMeshCount() const +{ + return m_gltf_model.meshes->size(); +} + +/** + * Get the amount of primitives that a mesh in a model contains. +*/ +std::size_t SelfType::MeshExtractor::getPrimitiveCount( + const std::size_t meshIdx) const +{ + return m_gltf_model.meshes->at(meshIdx).primitives.size(); +} + +/** + * Streams vertex positions raw data into usable buffer via reference. + * Buffer: ref Vector +*/ +void SelfType::MeshExtractor::copyPositions( + const std::size_t accessorIdx, + std::vector& vertices) const +{ + const auto accessor = Accessor::make(m_gltf_model, accessorIdx); + for (std::size_t i = 0; i < accessor.getCount(); i++) { + vertices[i].Pos = convertHandedness(accessor.get(i)); + } +} + +/** + * Streams normals raw data into usable buffer via reference. + * Buffer: ref Vector +*/ +void SelfType::MeshExtractor::copyNormals( + const std::size_t accessorIdx, + std::vector& vertices) const +{ + const auto accessor = Accessor::make(m_gltf_model, accessorIdx); + for (std::size_t i = 0; i < accessor.getCount(); ++i) { + vertices[i].Normal = convertHandedness(accessor.get(i)); + } +} + +/** + * Streams texture coordinate raw data into usable buffer via reference. + * Buffer: ref Vector +*/ +void SelfType::MeshExtractor::copyTCoords( + const std::size_t accessorIdx, + std::vector& vertices) const +{ + const auto accessor = createNormalizedValuesAccessor<2>(m_gltf_model, accessorIdx); + const auto count = std::visit([](auto &&a) { return a.getCount(); }, accessor); + for (std::size_t i = 0; i < count; ++i) { + const auto vals = getNormalizedValues(accessor, i); + vertices[i].TCoords = core::vector2df(vals[0], vals[1]); + } +} + +/** + * This is where the actual model's GLTF file is loaded and parsed by tiniergltf. +*/ +std::optional SelfType::tryParseGLTF(io::IReadFile* file) +{ + auto size = file->getSize(); + if (size < 0) // this can happen if `ftell` fails + return std::nullopt; + std::unique_ptr buf(new char[size + 1]); + if (file->read(buf.get(), size) != static_cast(size)) + return std::nullopt; + // We probably don't need this, but add it just to be sure. + buf[size] = '\0'; + Json::CharReaderBuilder builder; + const std::unique_ptr reader(builder.newCharReader()); + Json::Value json; + JSONCPP_STRING err; + if (!reader->parse(buf.get(), buf.get() + size, &json, &err)) { + return std::nullopt; + } + try { + return tiniergltf::GlTF(json); + } 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; + } +} + +} // namespace scene + +} // namespace irr + diff --git a/irr/src/CGLTFMeshFileLoader.h b/irr/src/CGLTFMeshFileLoader.h new file mode 100644 index 000000000..39c3ea6dd --- /dev/null +++ b/irr/src/CGLTFMeshFileLoader.h @@ -0,0 +1,147 @@ +// Minetest +// SPDX-License-Identifier: LGPL-2.1-or-later + +#pragma once + +#include "CSkinnedMesh.h" +#include "IMeshLoader.h" +#include "IReadFile.h" +#include "irrTypes.h" +#include "path.h" +#include "S3DVertex.h" + +#include + +#include +#include + +namespace irr +{ + +namespace scene +{ + +class CGLTFMeshFileLoader : public IMeshLoader +{ +public: + CGLTFMeshFileLoader() noexcept {}; + + bool isALoadableFileExtension(const io::path& filename) const override; + + IAnimatedMesh* createMesh(io::IReadFile* file) override; + +private: + template + static T rawget(const char *ptr); + + template + class Accessor + { + struct BufferSource + { + const char *ptr; + std::size_t byteStride; + }; + using Source = std::variant, std::tuple<>>; + + public: + static Accessor sparseIndices( + const tiniergltf::GlTF &model, + const tiniergltf::AccessorSparseIndices &indices, + const std::size_t count); + static Accessor sparseValues( + const tiniergltf::GlTF &model, + const tiniergltf::AccessorSparseValues &values, + const std::size_t count, + const std::size_t defaultByteStride); + static Accessor base( + const tiniergltf::GlTF &model, + std::size_t accessorIdx); + static Accessor make(const tiniergltf::GlTF &model, std::size_t accessorIdx); + static constexpr tiniergltf::Accessor::Type getType(); + static constexpr tiniergltf::Accessor::ComponentType getComponentType(); + std::size_t getCount() const { return count; } + T get(std::size_t i) const; + + private: + Accessor(const char *ptr, std::size_t byteStride, std::size_t count) : + source(BufferSource{ptr, byteStride}), count(count) {} + Accessor(std::vector vec, std::size_t count) : + source(vec), count(count) {} + Accessor(std::size_t count) : + source(std::make_tuple()), count(count) {} + // Directly from buffer, sparse, or default-initialized + const Source source; + const std::size_t count; + }; + + template + using AccessorVariant = std::variant...>; + + template + using ArrayAccessorVariant = std::variant>...>; + + template + using NormalizedValuesAccessor = ArrayAccessorVariant; + + template + static NormalizedValuesAccessor createNormalizedValuesAccessor( + const tiniergltf::GlTF &model, + const std::size_t accessorIdx); + + template + static std::array getNormalizedValues( + const NormalizedValuesAccessor &accessor, + const std::size_t i); + + class MeshExtractor { + public: + MeshExtractor(tiniergltf::GlTF &&model, + CSkinnedMesh *mesh) noexcept + : m_gltf_model(model), m_irr_model(mesh) {}; + + /* Gets indices for the given mesh/primitive. + * + * Values are return in Irrlicht winding order. + */ + std::optional> getIndices( + const tiniergltf::MeshPrimitive &primitive) const; + + std::optional> getVertices( + const tiniergltf::MeshPrimitive &primitive) const; + + std::size_t getMeshCount() const; + + std::size_t getPrimitiveCount(const std::size_t meshIdx) const; + + void loadNodes() const; + + private: + const tiniergltf::GlTF m_gltf_model; + CSkinnedMesh *m_irr_model; + + void copyPositions(const std::size_t accessorIdx, + std::vector& vertices) const; + + void copyNormals(const std::size_t accessorIdx, + std::vector& vertices) const; + + void copyTCoords(const std::size_t accessorIdx, + std::vector& vertices) const; + + void loadMesh( + std::size_t meshIdx, + ISkinnedMesh::SJoint *parentJoint) const; + + void loadNode( + const std::size_t nodeIdx, + ISkinnedMesh::SJoint *parentJoint) const; + }; + + std::optional tryParseGLTF(io::IReadFile* file); +}; + +} // namespace scene + +} // namespace irr + diff --git a/irr/src/CGUIButton.cpp b/irr/src/CGUIButton.cpp index f023024f9..60bab5f83 100644 --- a/irr/src/CGUIButton.cpp +++ b/irr/src/CGUIButton.cpp @@ -75,12 +75,11 @@ void CGUIButton::setSpriteBank(IGUISpriteBank *sprites) SpriteBank = sprites; } -void CGUIButton::setSprite(EGUI_BUTTON_STATE state, s32 index, video::SColor color, bool loop, bool scale) +void CGUIButton::setSprite(EGUI_BUTTON_STATE state, s32 index, video::SColor color, bool loop) { ButtonSprites[(u32)state].Index = index; ButtonSprites[(u32)state].Color = color; ButtonSprites[(u32)state].Loop = loop; - ButtonSprites[(u32)state].Scale = scale; } //! Get the sprite-index for the given state or -1 when no sprite is set @@ -101,12 +100,6 @@ bool CGUIButton::getSpriteLoop(EGUI_BUTTON_STATE state) const return ButtonSprites[(u32)state].Loop; } -//! Returns if the sprite in the given state is scaled -bool CGUIButton::getSpriteScale(EGUI_BUTTON_STATE state) const -{ - return ButtonSprites[(u32)state].Scale; -} - //! called if an event happened. bool CGUIButton::OnEvent(const SEvent &event) { @@ -294,19 +287,26 @@ void CGUIButton::draw() void CGUIButton::drawSprite(EGUI_BUTTON_STATE state, u32 startTime, const core::position2di ¢er) { u32 stateIdx = (u32)state; + s32 spriteIdx = ButtonSprites[stateIdx].Index; + if (spriteIdx == -1) + return; - if (ButtonSprites[stateIdx].Index != -1) { - if (ButtonSprites[stateIdx].Scale) { - const video::SColor colors[] = {ButtonSprites[stateIdx].Color, ButtonSprites[stateIdx].Color, ButtonSprites[stateIdx].Color, ButtonSprites[stateIdx].Color}; - SpriteBank->draw2DSprite(ButtonSprites[stateIdx].Index, AbsoluteRect, - &AbsoluteClippingRect, colors, - os::Timer::getTime() - startTime, ButtonSprites[stateIdx].Loop); - } else { - SpriteBank->draw2DSprite(ButtonSprites[stateIdx].Index, center, - &AbsoluteClippingRect, ButtonSprites[stateIdx].Color, startTime, os::Timer::getTime(), - ButtonSprites[stateIdx].Loop, true); - } - } + u32 rectIdx = SpriteBank->getSprites()[spriteIdx].Frames[0].rectNumber; + core::rect srcRect = SpriteBank->getPositions()[rectIdx]; + + IGUISkin *skin = Environment->getSkin(); + s32 scale = std::max(std::floor(skin->getScale()), 1.0f); + core::rect rect(center, srcRect.getSize() * scale); + rect -= rect.getSize() / 2; + + const video::SColor colors[] = { + ButtonSprites[stateIdx].Color, + ButtonSprites[stateIdx].Color, + ButtonSprites[stateIdx].Color, + ButtonSprites[stateIdx].Color, + }; + SpriteBank->draw2DSprite(spriteIdx, rect, &AbsoluteClippingRect, colors, + os::Timer::getTime() - startTime, ButtonSprites[stateIdx].Loop); } EGUI_BUTTON_IMAGE_STATE CGUIButton::getImageState(bool pressed) const diff --git a/irr/src/CGUIButton.h b/irr/src/CGUIButton.h index 8ff36c9a7..8a1434025 100644 --- a/irr/src/CGUIButton.h +++ b/irr/src/CGUIButton.h @@ -92,7 +92,7 @@ public: */ virtual void setSprite(EGUI_BUTTON_STATE state, s32 index, video::SColor color = video::SColor(255, 255, 255, 255), - bool loop = false, bool scale = false) override; + bool loop = false) override; //! Get the sprite-index for the given state or -1 when no sprite is set s32 getSpriteIndex(EGUI_BUTTON_STATE state) const override; @@ -103,9 +103,6 @@ public: //! Returns if the sprite in the given state does loop bool getSpriteLoop(EGUI_BUTTON_STATE state) const override; - //! Returns if the sprite in the given state is scaled - bool getSpriteScale(EGUI_BUTTON_STATE state) const override; - //! Sets if the button should behave like a push button. Which means it //! can be in two states: Normal or Pressed. With a click on the button, //! the user can change the state of the button. @@ -158,19 +155,18 @@ private: struct ButtonSprite { ButtonSprite() : - Index(-1), Loop(false), Scale(false) + Index(-1), Loop(false) { } bool operator==(const ButtonSprite &other) const { - return Index == other.Index && Color == other.Color && Loop == other.Loop && Scale == other.Scale; + return Index == other.Index && Color == other.Color && Loop == other.Loop; } s32 Index; video::SColor Color; bool Loop; - bool Scale; }; ButtonSprite ButtonSprites[EGBS_COUNT]; diff --git a/irr/src/CGUISkin.cpp b/irr/src/CGUISkin.cpp index 84ceaeabf..e9721a5fa 100644 --- a/irr/src/CGUISkin.cpp +++ b/irr/src/CGUISkin.cpp @@ -1,4 +1,6 @@ // Copyright (C) 2002-2012 Nikolaus Gebhardt +// Copyright (C) 2019 Irrlick +// // This file is part of the "Irrlicht Engine". // For conditions of distribution and use, see copyright notice in irrlicht.h @@ -15,39 +17,41 @@ namespace irr namespace gui { -CGUISkin::CGUISkin(EGUI_SKIN_TYPE type, video::IVideoDriver *driver) : - SpriteBank(0), Driver(driver), Type(type) +CGUISkin::CGUISkin(EGUI_SKIN_TYPE type, video::IVideoDriver* driver) +: SpriteBank(0), Driver(driver), Type(type) { -#ifdef _DEBUG + #ifdef _DEBUG setDebugName("CGUISkin"); -#endif + #endif + + if ((Type == EGST_WINDOWS_CLASSIC) || (Type == EGST_WINDOWS_METALLIC)) + { + Colors[EGDC_3D_DARK_SHADOW] = video::SColor(101,50,50,50); + Colors[EGDC_3D_SHADOW] = video::SColor(101,130,130,130); + Colors[EGDC_3D_FACE] = video::SColor(220,100,100,100); + Colors[EGDC_3D_HIGH_LIGHT] = video::SColor(101,255,255,255); + Colors[EGDC_3D_LIGHT] = video::SColor(101,210,210,210); + Colors[EGDC_ACTIVE_BORDER] = video::SColor(101,16,14,115); + Colors[EGDC_ACTIVE_CAPTION] = video::SColor(255,255,255,255); + Colors[EGDC_APP_WORKSPACE] = video::SColor(101,100,100,100); + Colors[EGDC_BUTTON_TEXT] = video::SColor(240,10,10,10); + Colors[EGDC_GRAY_TEXT] = video::SColor(240,130,130,130); + Colors[EGDC_HIGH_LIGHT] = video::SColor(101,8,36,107); + Colors[EGDC_HIGH_LIGHT_TEXT] = video::SColor(240,255,255,255); + Colors[EGDC_INACTIVE_BORDER] = video::SColor(101,165,165,165); + Colors[EGDC_INACTIVE_CAPTION] = video::SColor(255,30,30,30); + Colors[EGDC_TOOLTIP] = video::SColor(200,0,0,0); + Colors[EGDC_TOOLTIP_BACKGROUND] = video::SColor(200,255,255,225); + Colors[EGDC_SCROLLBAR] = video::SColor(101,230,230,230); + Colors[EGDC_WINDOW] = video::SColor(101,255,255,255); + Colors[EGDC_WINDOW_SYMBOL] = video::SColor(200,10,10,10); + Colors[EGDC_ICON] = video::SColor(200,255,255,255); + Colors[EGDC_ICON_HIGH_LIGHT] = video::SColor(200,8,36,107); + Colors[EGDC_GRAY_WINDOW_SYMBOL] = video::SColor(240,100,100,100); + Colors[EGDC_EDITABLE] = video::SColor(255,255,255,255); + Colors[EGDC_GRAY_EDITABLE] = video::SColor(255,120,120,120); + Colors[EGDC_FOCUSED_EDITABLE] = video::SColor(255,240,240,255); - if ((Type == EGST_WINDOWS_CLASSIC) || (Type == EGST_WINDOWS_METALLIC)) { - Colors[EGDC_3D_DARK_SHADOW] = video::SColor(101, 50, 50, 50); - Colors[EGDC_3D_SHADOW] = video::SColor(101, 130, 130, 130); - Colors[EGDC_3D_FACE] = video::SColor(101, 210, 210, 210); - Colors[EGDC_3D_HIGH_LIGHT] = video::SColor(101, 255, 255, 255); - Colors[EGDC_3D_LIGHT] = video::SColor(101, 210, 210, 210); - Colors[EGDC_ACTIVE_BORDER] = video::SColor(101, 16, 14, 115); - Colors[EGDC_ACTIVE_CAPTION] = video::SColor(255, 255, 255, 255); - Colors[EGDC_APP_WORKSPACE] = video::SColor(101, 100, 100, 100); - Colors[EGDC_BUTTON_TEXT] = video::SColor(240, 10, 10, 10); - Colors[EGDC_GRAY_TEXT] = video::SColor(240, 130, 130, 130); - Colors[EGDC_HIGH_LIGHT] = video::SColor(101, 8, 36, 107); - Colors[EGDC_HIGH_LIGHT_TEXT] = video::SColor(240, 255, 255, 255); - Colors[EGDC_INACTIVE_BORDER] = video::SColor(101, 165, 165, 165); - Colors[EGDC_INACTIVE_CAPTION] = video::SColor(255, 30, 30, 30); - Colors[EGDC_TOOLTIP] = video::SColor(200, 0, 0, 0); - Colors[EGDC_TOOLTIP_BACKGROUND] = video::SColor(200, 255, 255, 225); - Colors[EGDC_SCROLLBAR] = video::SColor(101, 230, 230, 230); - Colors[EGDC_WINDOW] = video::SColor(101, 255, 255, 255); - Colors[EGDC_WINDOW_SYMBOL] = video::SColor(200, 10, 10, 10); - Colors[EGDC_ICON] = video::SColor(200, 255, 255, 255); - Colors[EGDC_ICON_HIGH_LIGHT] = video::SColor(200, 8, 36, 107); - Colors[EGDC_GRAY_WINDOW_SYMBOL] = video::SColor(240, 100, 100, 100); - Colors[EGDC_EDITABLE] = video::SColor(255, 255, 255, 255); - Colors[EGDC_GRAY_EDITABLE] = video::SColor(255, 120, 120, 120); - Colors[EGDC_FOCUSED_EDITABLE] = video::SColor(255, 240, 240, 255); Sizes[EGDS_SCROLLBAR_SIZE] = 14; Sizes[EGDS_MENU_HEIGHT] = 30; @@ -63,34 +67,36 @@ CGUISkin::CGUISkin(EGUI_SKIN_TYPE type, video::IVideoDriver *driver) : Sizes[EGDS_TITLEBARTEXT_DISTANCE_X] = 2; Sizes[EGDS_TITLEBARTEXT_DISTANCE_Y] = 0; - } else { - // 0x80a6a8af - Colors[EGDC_3D_DARK_SHADOW] = 0x60767982; - // Colors[EGDC_3D_FACE] = 0xc0c9ccd4; // tab background - Colors[EGDC_3D_FACE] = 0xc0cbd2d9; // tab background - Colors[EGDC_3D_SHADOW] = 0x50e4e8f1; // tab background, and left-top highlight - Colors[EGDC_3D_HIGH_LIGHT] = 0x40c7ccdc; - Colors[EGDC_3D_LIGHT] = 0x802e313a; - Colors[EGDC_ACTIVE_BORDER] = 0x80404040; // window title - Colors[EGDC_ACTIVE_CAPTION] = 0xffd0d0d0; - Colors[EGDC_APP_WORKSPACE] = 0xc0646464; // unused - Colors[EGDC_BUTTON_TEXT] = 0xd0161616; - Colors[EGDC_GRAY_TEXT] = 0x3c141414; - Colors[EGDC_HIGH_LIGHT] = 0x6c606060; - Colors[EGDC_HIGH_LIGHT_TEXT] = 0xd0e0e0e0; - Colors[EGDC_INACTIVE_BORDER] = 0xf0a5a5a5; - Colors[EGDC_INACTIVE_CAPTION] = 0xffd2d2d2; - Colors[EGDC_TOOLTIP] = 0xf00f2033; - Colors[EGDC_TOOLTIP_BACKGROUND] = 0xc0cbd2d9; - Colors[EGDC_SCROLLBAR] = 0xf0e0e0e0; - Colors[EGDC_WINDOW] = 0xf0f0f0f0; - Colors[EGDC_WINDOW_SYMBOL] = 0xd0161616; - Colors[EGDC_ICON] = 0xd0161616; - Colors[EGDC_ICON_HIGH_LIGHT] = 0xd0606060; - Colors[EGDC_GRAY_WINDOW_SYMBOL] = 0x3c101010; - Colors[EGDC_EDITABLE] = 0xf0ffffff; - Colors[EGDC_GRAY_EDITABLE] = 0xf0cccccc; - Colors[EGDC_FOCUSED_EDITABLE] = 0xf0fffff0; + } + else + { + //0x80a6a8af + Colors[EGDC_3D_DARK_SHADOW] = 0x60767982; + //Colors[EGDC_3D_FACE] = 0xc0c9ccd4; // tab background + Colors[EGDC_3D_FACE] = 0xc0cbd2d9; // tab background + Colors[EGDC_3D_SHADOW] = 0x50e4e8f1; // tab background, and left-top highlight + Colors[EGDC_3D_HIGH_LIGHT] = 0x40c7ccdc; + Colors[EGDC_3D_LIGHT] = 0x802e313a; + Colors[EGDC_ACTIVE_BORDER] = 0x80404040; // window title + Colors[EGDC_ACTIVE_CAPTION] = 0xffd0d0d0; + Colors[EGDC_APP_WORKSPACE] = 0xc0646464; // unused + Colors[EGDC_BUTTON_TEXT] = 0xd0161616; + Colors[EGDC_GRAY_TEXT] = 0x3c141414; + Colors[EGDC_HIGH_LIGHT] = 0x6c606060; + Colors[EGDC_HIGH_LIGHT_TEXT] = 0xd0e0e0e0; + Colors[EGDC_INACTIVE_BORDER] = 0xf0a5a5a5; + Colors[EGDC_INACTIVE_CAPTION] = 0xffd2d2d2; + Colors[EGDC_TOOLTIP] = 0xf00f2033; + Colors[EGDC_TOOLTIP_BACKGROUND] = 0xc0cbd2d9; + Colors[EGDC_SCROLLBAR] = 0xf0e0e0e0; + Colors[EGDC_WINDOW] = 0xf0f0f0f0; + Colors[EGDC_WINDOW_SYMBOL] = 0xd0161616; + Colors[EGDC_ICON] = 0xd0161616; + Colors[EGDC_ICON_HIGH_LIGHT] = 0xd0606060; + Colors[EGDC_GRAY_WINDOW_SYMBOL] = 0x3c101010; + Colors[EGDC_EDITABLE] = 0xf0ffffff; + Colors[EGDC_GRAY_EDITABLE] = 0xf0cccccc; + Colors[EGDC_FOCUSED_EDITABLE] = 0xf0fffff0; Sizes[EGDS_SCROLLBAR_SIZE] = 14; Sizes[EGDS_MENU_HEIGHT] = 48; @@ -118,8 +124,6 @@ CGUISkin::CGUISkin(EGUI_SKIN_TYPE type, video::IVideoDriver *driver) : Sizes[EGDS_BUTTON_PRESSED_IMAGE_OFFSET_Y] = 1; Sizes[EGDS_BUTTON_PRESSED_TEXT_OFFSET_X] = 0; Sizes[EGDS_BUTTON_PRESSED_TEXT_OFFSET_Y] = 2; - Sizes[EGDS_BUTTON_PRESSED_SPRITE_OFFSET_X] = 0; - Sizes[EGDS_BUTTON_PRESSED_SPRITE_OFFSET_Y] = 0; Texts[EGDT_MSG_BOX_OK] = L"OK"; Texts[EGDT_MSG_BOX_CANCEL] = L"Cancel"; @@ -155,16 +159,18 @@ CGUISkin::CGUISkin(EGUI_SKIN_TYPE type, video::IVideoDriver *driver) : Icons[EGDI_FILE] = 245; Icons[EGDI_DIRECTORY] = 246; - for (u32 i = 0; i < EGDF_COUNT; ++i) + for (u32 i=0; idrop(); } @@ -173,6 +179,7 @@ CGUISkin::~CGUISkin() SpriteBank->drop(); } + //! returns default color video::SColor CGUISkin::getColor(EGUI_DEFAULT_COLOR color) const { @@ -182,6 +189,7 @@ video::SColor CGUISkin::getColor(EGUI_DEFAULT_COLOR color) const return video::SColor(); } + //! sets a default color void CGUISkin::setColor(EGUI_DEFAULT_COLOR which, video::SColor newColor) { @@ -189,6 +197,7 @@ void CGUISkin::setColor(EGUI_DEFAULT_COLOR which, video::SColor newColor) Colors[which] = newColor; } + //! returns size for the given size type s32 CGUISkin::getSize(EGUI_DEFAULT_SIZE size) const { @@ -198,6 +207,7 @@ s32 CGUISkin::getSize(EGUI_DEFAULT_SIZE size) const return 0; } + //! sets a default size void CGUISkin::setSize(EGUI_DEFAULT_SIZE which, s32 size) { @@ -205,8 +215,9 @@ void CGUISkin::setSize(EGUI_DEFAULT_SIZE which, s32 size) Sizes[which] = size; } + //! returns the default font -IGUIFont *CGUISkin::getFont(EGUI_DEFAULT_FONT which) const +IGUIFont* CGUISkin::getFont(EGUI_DEFAULT_FONT which) const { if (((u32)which < EGDF_COUNT) && Fonts[which]) return Fonts[which]; @@ -214,13 +225,15 @@ IGUIFont *CGUISkin::getFont(EGUI_DEFAULT_FONT which) const return Fonts[EGDF_DEFAULT]; } + //! sets a default font -void CGUISkin::setFont(IGUIFont *font, EGUI_DEFAULT_FONT which) +void CGUISkin::setFont(IGUIFont* font, EGUI_DEFAULT_FONT which) { if ((u32)which >= EGDF_COUNT) return; - if (font) { + if (font) + { font->grab(); if (Fonts[which]) Fonts[which]->drop(); @@ -229,14 +242,16 @@ void CGUISkin::setFont(IGUIFont *font, EGUI_DEFAULT_FONT which) } } + //! gets the sprite bank stored -IGUISpriteBank *CGUISkin::getSpriteBank() const +IGUISpriteBank* CGUISkin::getSpriteBank() const { return SpriteBank; } + //! set a new sprite bank or remove one by passing 0 -void CGUISkin::setSpriteBank(IGUISpriteBank *bank) +void CGUISkin::setSpriteBank(IGUISpriteBank* bank) { if (bank) bank->grab(); @@ -247,6 +262,7 @@ void CGUISkin::setSpriteBank(IGUISpriteBank *bank) SpriteBank = bank; } + //! Returns a default icon u32 CGUISkin::getIcon(EGUI_DEFAULT_ICON icon) const { @@ -256,6 +272,7 @@ u32 CGUISkin::getIcon(EGUI_DEFAULT_ICON icon) const return 0; } + //! Sets a default icon void CGUISkin::setIcon(EGUI_DEFAULT_ICON icon, u32 index) { @@ -263,9 +280,10 @@ void CGUISkin::setIcon(EGUI_DEFAULT_ICON icon, u32 index) Icons[icon] = index; } + //! Returns a default text. For example for Message box button captions: //! "OK", "Cancel", "Yes", "No" and so on. -const wchar_t *CGUISkin::getDefaultText(EGUI_DEFAULT_TEXT text) const +const wchar_t* CGUISkin::getDefaultText(EGUI_DEFAULT_TEXT text) const { if ((u32)text < EGDT_COUNT) return Texts[text].c_str(); @@ -273,14 +291,16 @@ const wchar_t *CGUISkin::getDefaultText(EGUI_DEFAULT_TEXT text) const return Texts[0].c_str(); } + //! Sets a default text. For example for Message box button captions: //! "OK", "Cancel", "Yes", "No" and so on. -void CGUISkin::setDefaultText(EGUI_DEFAULT_TEXT which, const wchar_t *newText) +void CGUISkin::setDefaultText(EGUI_DEFAULT_TEXT which, const wchar_t* newText) { if ((u32)which < EGDT_COUNT) Texts[which] = newText; } + //! draws a standard 3d button pane /** Used for drawing for example buttons in normal state. It uses the colors EGDC_3D_DARK_SHADOW, EGDC_3D_HIGH_LIGHT, EGDC_3D_SHADOW and @@ -290,46 +310,58 @@ EGDC_3D_FACE for this. See EGUI_DEFAULT_COLOR for details. \param element: Pointer to the element which wishes to draw this. This parameter is usually not used by ISkin, but can be used for example by more complex implementations to find out how to draw the part exactly. */ -void CGUISkin::draw3DButtonPaneStandard(IGUIElement *element, - const core::rect &r, - const core::rect *clip) +// PATCH +void CGUISkin::drawColored3DButtonPaneStandard(IGUIElement* element, + const core::rect& r, + const core::rect* clip, + const video::SColor* colors) { if (!Driver) return; + if (!colors) + colors = Colors; + core::rect rect = r; - if (Type == EGST_BURNING_SKIN) { + if ( Type == EGST_BURNING_SKIN ) + { rect.UpperLeftCorner.X -= 1; rect.UpperLeftCorner.Y -= 1; rect.LowerRightCorner.X += 1; rect.LowerRightCorner.Y += 1; draw3DSunkenPane(element, - getColor(EGDC_WINDOW).getInterpolated(0xFFFFFFFF, 0.9f), false, true, rect, clip); + colors[ EGDC_WINDOW ].getInterpolated( 0xFFFFFFFF, 0.9f ) + ,false, true, rect, clip); return; } - Driver->draw2DRectangle(getColor(EGDC_3D_DARK_SHADOW), rect, clip); + Driver->draw2DRectangle(colors[EGDC_3D_DARK_SHADOW], rect, clip); rect.LowerRightCorner.X -= 1; rect.LowerRightCorner.Y -= 1; - Driver->draw2DRectangle(getColor(EGDC_3D_HIGH_LIGHT), rect, clip); + Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], rect, clip); rect.UpperLeftCorner.X += 1; rect.UpperLeftCorner.Y += 1; - Driver->draw2DRectangle(getColor(EGDC_3D_SHADOW), rect, clip); + Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], rect, clip); rect.LowerRightCorner.X -= 1; rect.LowerRightCorner.Y -= 1; - if (!UseGradient) { - Driver->draw2DRectangle(getColor(EGDC_3D_FACE), rect, clip); - } else { - const video::SColor c1 = getColor(EGDC_3D_FACE); - const video::SColor c2 = c1.getInterpolated(getColor(EGDC_3D_DARK_SHADOW), 0.4f); + if (!UseGradient) + { + Driver->draw2DRectangle(colors[EGDC_3D_FACE], rect, clip); + } + else + { + const video::SColor c1 = colors[EGDC_3D_FACE]; + const video::SColor c2 = c1.getInterpolated(colors[EGDC_3D_DARK_SHADOW], 0.4f); Driver->draw2DRectangle(rect, c1, c1, c2, c2, clip); } } +// END PATCH + //! draws a pressed 3d button pane /** Used for drawing for example buttons in pressed state. @@ -340,35 +372,45 @@ EGDC_3D_FACE for this. See EGUI_DEFAULT_COLOR for details. \param element: Pointer to the element which wishes to draw this. This parameter is usually not used by ISkin, but can be used for example by more complex implementations to find out how to draw the part exactly. */ -void CGUISkin::draw3DButtonPanePressed(IGUIElement *element, - const core::rect &r, - const core::rect *clip) +// PATCH +void CGUISkin::drawColored3DButtonPanePressed(IGUIElement* element, + const core::rect& r, + const core::rect* clip, + const video::SColor* colors) { if (!Driver) return; + if (!colors) + colors = Colors; + core::rect rect = r; - Driver->draw2DRectangle(getColor(EGDC_3D_HIGH_LIGHT), rect, clip); + Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], rect, clip); rect.LowerRightCorner.X -= 1; rect.LowerRightCorner.Y -= 1; - Driver->draw2DRectangle(getColor(EGDC_3D_DARK_SHADOW), rect, clip); + Driver->draw2DRectangle(colors[EGDC_3D_DARK_SHADOW], rect, clip); rect.UpperLeftCorner.X += 1; rect.UpperLeftCorner.Y += 1; - Driver->draw2DRectangle(getColor(EGDC_3D_SHADOW), rect, clip); + Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], rect, clip); rect.UpperLeftCorner.X += 1; rect.UpperLeftCorner.Y += 1; - if (!UseGradient) { - Driver->draw2DRectangle(getColor(EGDC_3D_FACE), rect, clip); - } else { - const video::SColor c1 = getColor(EGDC_3D_FACE); - const video::SColor c2 = c1.getInterpolated(getColor(EGDC_3D_DARK_SHADOW), 0.4f); + if (!UseGradient) + { + Driver->draw2DRectangle(colors[EGDC_3D_FACE], rect, clip); + } + else + { + const video::SColor c1 = colors[EGDC_3D_FACE]; + const video::SColor c2 = c1.getInterpolated(colors[EGDC_3D_DARK_SHADOW], 0.4f); Driver->draw2DRectangle(rect, c1, c1, c2, c2, clip); } } +// END PATCH + //! draws a sunken 3d pane /** Used for drawing the background of edit, combo or check boxes. @@ -380,112 +422,130 @@ implementations to find out how to draw the part exactly. deep into the ground. \param rect: Defining area where to draw. \param clip: Clip area. */ -void CGUISkin::draw3DSunkenPane(IGUIElement *element, video::SColor bgcolor, - bool flat, bool fillBackGround, - const core::rect &r, - const core::rect *clip) +// PATCH +void CGUISkin::drawColored3DSunkenPane(IGUIElement* element, video::SColor bgcolor, + bool flat, bool fillBackGround, + const core::rect& r, + const core::rect* clip, + const video::SColor* colors) { if (!Driver) return; + if (!colors) + colors = Colors; + core::rect rect = r; if (fillBackGround) Driver->draw2DRectangle(bgcolor, rect, clip); - if (flat) { + if (flat) + { // draw flat sunken pane rect.LowerRightCorner.Y = rect.UpperLeftCorner.Y + 1; - Driver->draw2DRectangle(getColor(EGDC_3D_SHADOW), rect, clip); // top + Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], rect, clip); // top ++rect.UpperLeftCorner.Y; rect.LowerRightCorner.Y = r.LowerRightCorner.Y; rect.LowerRightCorner.X = rect.UpperLeftCorner.X + 1; - Driver->draw2DRectangle(getColor(EGDC_3D_SHADOW), rect, clip); // left + Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], rect, clip); // left rect = r; ++rect.UpperLeftCorner.Y; rect.UpperLeftCorner.X = rect.LowerRightCorner.X - 1; - Driver->draw2DRectangle(getColor(EGDC_3D_HIGH_LIGHT), rect, clip); // right + Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], rect, clip); // right rect = r; ++rect.UpperLeftCorner.X; rect.UpperLeftCorner.Y = r.LowerRightCorner.Y - 1; --rect.LowerRightCorner.X; - Driver->draw2DRectangle(getColor(EGDC_3D_HIGH_LIGHT), rect, clip); // bottom - } else { + Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], rect, clip); // bottom + } + else + { // draw deep sunken pane rect.LowerRightCorner.Y = rect.UpperLeftCorner.Y + 1; - Driver->draw2DRectangle(getColor(EGDC_3D_SHADOW), rect, clip); // top + Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], rect, clip); // top ++rect.UpperLeftCorner.X; ++rect.UpperLeftCorner.Y; --rect.LowerRightCorner.X; ++rect.LowerRightCorner.Y; - Driver->draw2DRectangle(getColor(EGDC_3D_DARK_SHADOW), rect, clip); + Driver->draw2DRectangle(colors[EGDC_3D_DARK_SHADOW], rect, clip); rect.UpperLeftCorner.X = r.UpperLeftCorner.X; - rect.UpperLeftCorner.Y = r.UpperLeftCorner.Y + 1; + rect.UpperLeftCorner.Y = r.UpperLeftCorner.Y+1; rect.LowerRightCorner.X = rect.UpperLeftCorner.X + 1; rect.LowerRightCorner.Y = r.LowerRightCorner.Y; - Driver->draw2DRectangle(getColor(EGDC_3D_SHADOW), rect, clip); // left + Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], rect, clip); // left ++rect.UpperLeftCorner.X; ++rect.UpperLeftCorner.Y; ++rect.LowerRightCorner.X; --rect.LowerRightCorner.Y; - Driver->draw2DRectangle(getColor(EGDC_3D_DARK_SHADOW), rect, clip); + Driver->draw2DRectangle(colors[EGDC_3D_DARK_SHADOW], rect, clip); rect = r; rect.UpperLeftCorner.X = rect.LowerRightCorner.X - 1; ++rect.UpperLeftCorner.Y; - Driver->draw2DRectangle(getColor(EGDC_3D_HIGH_LIGHT), rect, clip); // right + Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], rect, clip); // right --rect.UpperLeftCorner.X; ++rect.UpperLeftCorner.Y; --rect.LowerRightCorner.X; --rect.LowerRightCorner.Y; - Driver->draw2DRectangle(getColor(EGDC_3D_LIGHT), rect, clip); + Driver->draw2DRectangle(colors[EGDC_3D_LIGHT], rect, clip); rect = r; ++rect.UpperLeftCorner.X; rect.UpperLeftCorner.Y = r.LowerRightCorner.Y - 1; --rect.LowerRightCorner.X; - Driver->draw2DRectangle(getColor(EGDC_3D_HIGH_LIGHT), rect, clip); // bottom + Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], rect, clip); // bottom ++rect.UpperLeftCorner.X; --rect.UpperLeftCorner.Y; --rect.LowerRightCorner.X; --rect.LowerRightCorner.Y; - Driver->draw2DRectangle(getColor(EGDC_3D_LIGHT), rect, clip); + Driver->draw2DRectangle(colors[EGDC_3D_LIGHT], rect, clip); } } +// END PATCH //! draws a window background // return where to draw title bar text. -core::rect CGUISkin::draw3DWindowBackground(IGUIElement *element, - bool drawTitleBar, video::SColor titleBarColor, - const core::rect &r, - const core::rect *clip, - core::rect *checkClientArea) +// PATCH +core::rect CGUISkin::drawColored3DWindowBackground(IGUIElement* element, + bool drawTitleBar, video::SColor titleBarColor, + const core::rect& r, + const core::rect* clip, + core::rect* checkClientArea, + const video::SColor* colors) { - if (!Driver) { - if (checkClientArea) { + if (!Driver) + { + if ( checkClientArea ) + { *checkClientArea = r; } return r; } + if (!colors) + colors = Colors; + core::rect rect = r; // top border rect.LowerRightCorner.Y = rect.UpperLeftCorner.Y + 1; - if (!checkClientArea) { - Driver->draw2DRectangle(getColor(EGDC_3D_HIGH_LIGHT), rect, clip); + if ( !checkClientArea ) + { + Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], rect, clip); } // left border rect.LowerRightCorner.Y = r.LowerRightCorner.Y; rect.LowerRightCorner.X = rect.UpperLeftCorner.X + 1; - if (!checkClientArea) { - Driver->draw2DRectangle(getColor(EGDC_3D_HIGH_LIGHT), rect, clip); + if ( !checkClientArea ) + { + Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], rect, clip); } // right border dark outer line @@ -493,8 +553,9 @@ core::rect CGUISkin::draw3DWindowBackground(IGUIElement *element, rect.LowerRightCorner.X = r.LowerRightCorner.X; rect.UpperLeftCorner.Y = r.UpperLeftCorner.Y; rect.LowerRightCorner.Y = r.LowerRightCorner.Y; - if (!checkClientArea) { - Driver->draw2DRectangle(getColor(EGDC_3D_DARK_SHADOW), rect, clip); + if ( !checkClientArea ) + { + Driver->draw2DRectangle(colors[EGDC_3D_DARK_SHADOW], rect, clip); } // right border bright innner line @@ -502,8 +563,9 @@ core::rect CGUISkin::draw3DWindowBackground(IGUIElement *element, rect.LowerRightCorner.X -= 1; rect.UpperLeftCorner.Y += 1; rect.LowerRightCorner.Y -= 1; - if (!checkClientArea) { - Driver->draw2DRectangle(getColor(EGDC_3D_SHADOW), rect, clip); + if ( !checkClientArea ) + { + Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], rect, clip); } // bottom border dark outer line @@ -511,8 +573,9 @@ core::rect CGUISkin::draw3DWindowBackground(IGUIElement *element, rect.UpperLeftCorner.Y = r.LowerRightCorner.Y - 1; rect.LowerRightCorner.Y = r.LowerRightCorner.Y; rect.LowerRightCorner.X = r.LowerRightCorner.X; - if (!checkClientArea) { - Driver->draw2DRectangle(getColor(EGDC_3D_DARK_SHADOW), rect, clip); + if ( !checkClientArea ) + { + Driver->draw2DRectangle(colors[EGDC_3D_DARK_SHADOW], rect, clip); } // bottom border bright inner line @@ -520,31 +583,39 @@ core::rect CGUISkin::draw3DWindowBackground(IGUIElement *element, rect.LowerRightCorner.X -= 1; rect.UpperLeftCorner.Y -= 1; rect.LowerRightCorner.Y -= 1; - if (!checkClientArea) { - Driver->draw2DRectangle(getColor(EGDC_3D_SHADOW), rect, clip); + if ( !checkClientArea ) + { + Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], rect, clip); } // client area for background rect = r; - rect.UpperLeftCorner.X += 1; - rect.UpperLeftCorner.Y += 1; + rect.UpperLeftCorner.X +=1; + rect.UpperLeftCorner.Y +=1; rect.LowerRightCorner.X -= 2; rect.LowerRightCorner.Y -= 2; - if (checkClientArea) { + if (checkClientArea) + { *checkClientArea = rect; } - if (!checkClientArea) { - if (!UseGradient) { - Driver->draw2DRectangle(getColor(EGDC_3D_FACE), rect, clip); - } else if (Type == EGST_BURNING_SKIN) { - const video::SColor c1 = getColor(EGDC_WINDOW).getInterpolated(0xFFFFFFFF, 0.9f); - const video::SColor c2 = getColor(EGDC_WINDOW).getInterpolated(0xFFFFFFFF, 0.8f); + if ( !checkClientArea ) + { + if (!UseGradient) + { + Driver->draw2DRectangle(colors[EGDC_3D_FACE], rect, clip); + } + else if ( Type == EGST_BURNING_SKIN ) + { + const video::SColor c1 = colors[EGDC_WINDOW].getInterpolated ( 0xFFFFFFFF, 0.9f ); + const video::SColor c2 = colors[EGDC_WINDOW].getInterpolated ( 0xFFFFFFFF, 0.8f ); Driver->draw2DRectangle(rect, c1, c1, c2, c2, clip); - } else { - const video::SColor c2 = getColor(EGDC_3D_SHADOW); - const video::SColor c1 = getColor(EGDC_3D_FACE); + } + else + { + const video::SColor c2 = colors[EGDC_3D_SHADOW]; + const video::SColor c1 = colors[EGDC_3D_FACE]; Driver->draw2DRectangle(rect, c1, c1, c1, c2, clip); } } @@ -556,19 +627,26 @@ core::rect CGUISkin::draw3DWindowBackground(IGUIElement *element, rect.LowerRightCorner.X -= 2; rect.LowerRightCorner.Y = rect.UpperLeftCorner.Y + getSize(EGDS_WINDOW_BUTTON_WIDTH) + 2; - if (drawTitleBar) { - if (checkClientArea) { + if (drawTitleBar ) + { + if (checkClientArea) + { (*checkClientArea).UpperLeftCorner.Y = rect.LowerRightCorner.Y; - } else { + } + else + { // draw title bar - // if (!UseGradient) + //if (!UseGradient) // Driver->draw2DRectangle(titleBarColor, rect, clip); - // else - if (Type == EGST_BURNING_SKIN) { - const video::SColor c = titleBarColor.getInterpolated(video::SColor(titleBarColor.getAlpha(), 255, 255, 255), 0.8f); + //else + if ( Type == EGST_BURNING_SKIN ) + { + const video::SColor c = titleBarColor.getInterpolated( video::SColor(titleBarColor.getAlpha(),255,255,255), 0.8f); Driver->draw2DRectangle(rect, titleBarColor, titleBarColor, c, c, clip); - } else { - const video::SColor c = titleBarColor.getInterpolated(video::SColor(titleBarColor.getAlpha(), 0, 0, 0), 0.2f); + } + else + { + const video::SColor c = titleBarColor.getInterpolated(video::SColor(titleBarColor.getAlpha(),0,0,0), 0.2f); Driver->draw2DRectangle(rect, titleBarColor, c, titleBarColor, c, clip); } } @@ -576,6 +654,8 @@ core::rect CGUISkin::draw3DWindowBackground(IGUIElement *element, return rect; } +// END PATCH + //! draws a standard 3d menu pane /** Used for drawing for menus and context menus. @@ -586,15 +666,21 @@ is usually not used by ISkin, but can be used for example by more complex implementations to find out how to draw the part exactly. \param rect: Defining area where to draw. \param clip: Clip area. */ -void CGUISkin::draw3DMenuPane(IGUIElement *element, - const core::rect &r, const core::rect *clip) +// PATCH +void CGUISkin::drawColored3DMenuPane(IGUIElement* element, + const core::rect& r, const core::rect* clip, + const video::SColor* colors) { if (!Driver) return; + if (!colors) + colors = Colors; + core::rect rect = r; - if (Type == EGST_BURNING_SKIN) { + if ( Type == EGST_BURNING_SKIN ) + { rect.UpperLeftCorner.Y -= 3; draw3DButtonPaneStandard(element, rect, clip); return; @@ -609,50 +695,53 @@ void CGUISkin::draw3DMenuPane(IGUIElement *element, // but there aren't that much menus visible anyway. rect.LowerRightCorner.Y = rect.UpperLeftCorner.Y + 1; - Driver->draw2DRectangle(getColor(EGDC_3D_HIGH_LIGHT), rect, clip); + Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], rect, clip); rect.LowerRightCorner.Y = r.LowerRightCorner.Y; rect.LowerRightCorner.X = rect.UpperLeftCorner.X + 1; - Driver->draw2DRectangle(getColor(EGDC_3D_HIGH_LIGHT), rect, clip); + Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], rect, clip); rect.UpperLeftCorner.X = r.LowerRightCorner.X - 1; rect.LowerRightCorner.X = r.LowerRightCorner.X; rect.UpperLeftCorner.Y = r.UpperLeftCorner.Y; rect.LowerRightCorner.Y = r.LowerRightCorner.Y; - Driver->draw2DRectangle(getColor(EGDC_3D_DARK_SHADOW), rect, clip); + Driver->draw2DRectangle(colors[EGDC_3D_DARK_SHADOW], rect, clip); rect.UpperLeftCorner.X -= 1; rect.LowerRightCorner.X -= 1; rect.UpperLeftCorner.Y += 1; rect.LowerRightCorner.Y -= 1; - Driver->draw2DRectangle(getColor(EGDC_3D_SHADOW), rect, clip); + Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], rect, clip); rect.UpperLeftCorner.X = r.UpperLeftCorner.X; rect.UpperLeftCorner.Y = r.LowerRightCorner.Y - 1; rect.LowerRightCorner.Y = r.LowerRightCorner.Y; rect.LowerRightCorner.X = r.LowerRightCorner.X; - Driver->draw2DRectangle(getColor(EGDC_3D_DARK_SHADOW), rect, clip); + Driver->draw2DRectangle(colors[EGDC_3D_DARK_SHADOW], rect, clip); rect.UpperLeftCorner.X += 1; rect.LowerRightCorner.X -= 1; rect.UpperLeftCorner.Y -= 1; rect.LowerRightCorner.Y -= 1; - Driver->draw2DRectangle(getColor(EGDC_3D_SHADOW), rect, clip); + Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], rect, clip); rect = r; - rect.UpperLeftCorner.X += 1; - rect.UpperLeftCorner.Y += 1; + rect.UpperLeftCorner.X +=1; + rect.UpperLeftCorner.Y +=1; rect.LowerRightCorner.X -= 2; rect.LowerRightCorner.Y -= 2; if (!UseGradient) - Driver->draw2DRectangle(getColor(EGDC_3D_FACE), rect, clip); - else { - const video::SColor c1 = getColor(EGDC_3D_FACE); - const video::SColor c2 = getColor(EGDC_3D_SHADOW); + Driver->draw2DRectangle(colors[EGDC_3D_FACE], rect, clip); + else + { + const video::SColor c1 = colors[EGDC_3D_FACE]; + const video::SColor c2 = colors[EGDC_3D_SHADOW]; Driver->draw2DRectangle(rect, c1, c1, c2, c2, clip); } } +// END PATCH + //! draws a standard 3d tool bar /** Used for drawing for toolbars and menus. @@ -661,38 +750,50 @@ is usually not used by ISkin, but can be used for example by more complex implementations to find out how to draw the part exactly. \param rect: Defining area where to draw. \param clip: Clip area. */ -void CGUISkin::draw3DToolBar(IGUIElement *element, - const core::rect &r, - const core::rect *clip) +// PATCH +void CGUISkin::drawColored3DToolBar(IGUIElement* element, + const core::rect& r, + const core::rect* clip, + const video::SColor* colors) { if (!Driver) return; + if (!colors) + colors = Colors; + core::rect rect = r; rect.UpperLeftCorner.X = r.UpperLeftCorner.X; rect.UpperLeftCorner.Y = r.LowerRightCorner.Y - 1; rect.LowerRightCorner.Y = r.LowerRightCorner.Y; rect.LowerRightCorner.X = r.LowerRightCorner.X; - Driver->draw2DRectangle(getColor(EGDC_3D_SHADOW), rect, clip); + Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], rect, clip); rect = r; rect.LowerRightCorner.Y -= 1; - if (!UseGradient) { - Driver->draw2DRectangle(getColor(EGDC_3D_FACE), rect, clip); - } else if (Type == EGST_BURNING_SKIN) { - const video::SColor c1 = 0xF0000000 | getColor(EGDC_3D_FACE).color; - const video::SColor c2 = 0xF0000000 | getColor(EGDC_3D_SHADOW).color; + if (!UseGradient) + { + Driver->draw2DRectangle(colors[EGDC_3D_FACE], rect, clip); + } + else + if ( Type == EGST_BURNING_SKIN ) + { + const video::SColor c1 = 0xF0000000 | colors[EGDC_3D_FACE].color; + const video::SColor c2 = 0xF0000000 | colors[EGDC_3D_SHADOW].color; rect.LowerRightCorner.Y += 1; Driver->draw2DRectangle(rect, c1, c2, c1, c2, clip); - } else { - const video::SColor c1 = getColor(EGDC_3D_FACE); - const video::SColor c2 = getColor(EGDC_3D_SHADOW); + } + else + { + const video::SColor c1 = colors[EGDC_3D_FACE]; + const video::SColor c2 = colors[EGDC_3D_SHADOW]; Driver->draw2DRectangle(rect, c1, c1, c2, c2, clip); } } +// END PATCH //! draws a tab button /** Used for drawing for tab buttons on top of tabs. @@ -702,53 +803,61 @@ implementations to find out how to draw the part exactly. \param active: Specifies if the tab is currently active. \param rect: Defining area where to draw. \param clip: Clip area. */ -void CGUISkin::draw3DTabButton(IGUIElement *element, bool active, - const core::rect &frameRect, const core::rect *clip, EGUI_ALIGNMENT alignment) +// PATCH +void CGUISkin::drawColored3DTabButton(IGUIElement* element, bool active, + const core::rect& frameRect, const core::rect* clip, EGUI_ALIGNMENT alignment, + const video::SColor* colors) { if (!Driver) return; + if (!colors) + colors = Colors; + core::rect tr = frameRect; - if (alignment == EGUIA_UPPERLEFT) { + if ( alignment == EGUIA_UPPERLEFT ) + { tr.LowerRightCorner.X -= 2; tr.LowerRightCorner.Y = tr.UpperLeftCorner.Y + 1; tr.UpperLeftCorner.X += 1; - Driver->draw2DRectangle(getColor(EGDC_3D_HIGH_LIGHT), tr, clip); + Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], tr, clip); // draw left highlight tr = frameRect; tr.LowerRightCorner.X = tr.UpperLeftCorner.X + 1; tr.UpperLeftCorner.Y += 1; - Driver->draw2DRectangle(getColor(EGDC_3D_HIGH_LIGHT), tr, clip); + Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], tr, clip); // draw grey background tr = frameRect; tr.UpperLeftCorner.X += 1; tr.UpperLeftCorner.Y += 1; tr.LowerRightCorner.X -= 2; - Driver->draw2DRectangle(getColor(EGDC_3D_FACE), tr, clip); + Driver->draw2DRectangle(colors[EGDC_3D_FACE], tr, clip); // draw right middle gray shadow tr.LowerRightCorner.X += 1; tr.UpperLeftCorner.X = tr.LowerRightCorner.X - 1; - Driver->draw2DRectangle(getColor(EGDC_3D_SHADOW), tr, clip); + Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], tr, clip); tr.LowerRightCorner.X += 1; tr.UpperLeftCorner.X += 1; tr.UpperLeftCorner.Y += 1; - Driver->draw2DRectangle(getColor(EGDC_3D_DARK_SHADOW), tr, clip); - } else { + Driver->draw2DRectangle(colors[EGDC_3D_DARK_SHADOW], tr, clip); + } + else + { tr.LowerRightCorner.X -= 2; tr.UpperLeftCorner.Y = tr.LowerRightCorner.Y - 1; tr.UpperLeftCorner.X += 1; - Driver->draw2DRectangle(getColor(EGDC_3D_HIGH_LIGHT), tr, clip); + Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], tr, clip); // draw left highlight tr = frameRect; tr.LowerRightCorner.X = tr.UpperLeftCorner.X + 1; tr.LowerRightCorner.Y -= 1; - Driver->draw2DRectangle(getColor(EGDC_3D_HIGH_LIGHT), tr, clip); + Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], tr, clip); // draw grey background tr = frameRect; @@ -756,20 +865,22 @@ void CGUISkin::draw3DTabButton(IGUIElement *element, bool active, tr.UpperLeftCorner.Y -= 1; tr.LowerRightCorner.X -= 2; tr.LowerRightCorner.Y -= 1; - Driver->draw2DRectangle(getColor(EGDC_3D_FACE), tr, clip); + Driver->draw2DRectangle(colors[EGDC_3D_FACE], tr, clip); // draw right middle gray shadow tr.LowerRightCorner.X += 1; tr.UpperLeftCorner.X = tr.LowerRightCorner.X - 1; - // tr.LowerRightCorner.Y -= 1; - Driver->draw2DRectangle(getColor(EGDC_3D_SHADOW), tr, clip); + //tr.LowerRightCorner.Y -= 1; + Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], tr, clip); tr.LowerRightCorner.X += 1; tr.UpperLeftCorner.X += 1; tr.LowerRightCorner.Y -= 1; - Driver->draw2DRectangle(getColor(EGDC_3D_DARK_SHADOW), tr, clip); + Driver->draw2DRectangle(colors[EGDC_3D_DARK_SHADOW], tr, clip); } } +// END PATCH + //! draws a tab control body /** \param element: Pointer to the element which wishes to draw this. This parameter @@ -779,77 +890,93 @@ implementations to find out how to draw the part exactly. \param background: Specifies if the background should be drawn. \param rect: Defining area where to draw. \param clip: Clip area. */ -void CGUISkin::draw3DTabBody(IGUIElement *element, bool border, bool background, - const core::rect &rect, const core::rect *clip, s32 tabHeight, EGUI_ALIGNMENT alignment) +// PATCH +void CGUISkin::drawColored3DTabBody(IGUIElement* element, bool border, bool background, + const core::rect& rect, const core::rect* clip, s32 tabHeight, EGUI_ALIGNMENT alignment, + const video::SColor* colors) { if (!Driver) return; + if (!colors) + colors = Colors; + core::rect tr = rect; - if (tabHeight == -1) + if ( tabHeight == -1 ) tabHeight = getSize(gui::EGDS_BUTTON_HEIGHT); // draw border. - if (border) { - if (alignment == EGUIA_UPPERLEFT) { + if (border) + { + if ( alignment == EGUIA_UPPERLEFT ) + { // draw left hightlight tr.UpperLeftCorner.Y += tabHeight + 2; tr.LowerRightCorner.X = tr.UpperLeftCorner.X + 1; - Driver->draw2DRectangle(getColor(EGDC_3D_HIGH_LIGHT), tr, clip); + Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], tr, clip); // draw right shadow tr.UpperLeftCorner.X = rect.LowerRightCorner.X - 1; tr.LowerRightCorner.X = tr.UpperLeftCorner.X + 1; - Driver->draw2DRectangle(getColor(EGDC_3D_SHADOW), tr, clip); + Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], tr, clip); // draw lower shadow tr = rect; tr.UpperLeftCorner.Y = tr.LowerRightCorner.Y - 1; - Driver->draw2DRectangle(getColor(EGDC_3D_SHADOW), tr, clip); - } else { + Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], tr, clip); + } + else + { // draw left hightlight tr.LowerRightCorner.Y -= tabHeight + 2; tr.LowerRightCorner.X = tr.UpperLeftCorner.X + 1; - Driver->draw2DRectangle(getColor(EGDC_3D_HIGH_LIGHT), tr, clip); + Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], tr, clip); // draw right shadow tr.UpperLeftCorner.X = rect.LowerRightCorner.X - 1; tr.LowerRightCorner.X = tr.UpperLeftCorner.X + 1; - Driver->draw2DRectangle(getColor(EGDC_3D_SHADOW), tr, clip); + Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], tr, clip); // draw lower shadow tr = rect; tr.LowerRightCorner.Y = tr.UpperLeftCorner.Y + 1; - Driver->draw2DRectangle(getColor(EGDC_3D_HIGH_LIGHT), tr, clip); + Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], tr, clip); } } - if (background) { - if (alignment == EGUIA_UPPERLEFT) { + if (background) + { + if ( alignment == EGUIA_UPPERLEFT ) + { tr = rect; tr.UpperLeftCorner.Y += tabHeight + 2; tr.LowerRightCorner.X -= 1; tr.UpperLeftCorner.X += 1; tr.LowerRightCorner.Y -= 1; - } else { + } + else + { tr = rect; tr.UpperLeftCorner.X += 1; tr.UpperLeftCorner.Y -= 1; tr.LowerRightCorner.X -= 1; tr.LowerRightCorner.Y -= tabHeight + 2; - // tr.UpperLeftCorner.X += 1; + //tr.UpperLeftCorner.X += 1; } if (!UseGradient) - Driver->draw2DRectangle(getColor(EGDC_3D_FACE), tr, clip); - else { - video::SColor c1 = getColor(EGDC_3D_FACE); - video::SColor c2 = getColor(EGDC_3D_SHADOW); + Driver->draw2DRectangle(colors[EGDC_3D_FACE], tr, clip); + else + { + video::SColor c1 = colors[EGDC_3D_FACE]; + video::SColor c2 = colors[EGDC_3D_SHADOW]; Driver->draw2DRectangle(tr, c1, c1, c2, c2, clip); } } } +// END PATCH + //! draws an icon, usually from the skin's sprite bank /** \param parent: Pointer to the element which wishes to draw this icon. @@ -861,31 +988,50 @@ by more complex implementations to find out how to draw the part exactly. \param currenttime: The present time, used to calculate the frame number \param loop: Whether the animation should loop or not \param clip: Clip area. */ -void CGUISkin::drawIcon(IGUIElement *element, EGUI_DEFAULT_ICON icon, - const core::position2di position, - u32 starttime, u32 currenttime, - bool loop, const core::rect *clip) +// PATCH +void CGUISkin::drawColoredIcon(IGUIElement* element, EGUI_DEFAULT_ICON icon, + const core::position2di position, + u32 starttime, u32 currenttime, + bool loop, const core::rect* clip, + const video::SColor* colors) { if (!SpriteBank) return; + if (!colors) + colors = Colors; + bool gray = element && !element->isEnabled(); SpriteBank->draw2DSprite(Icons[icon], position, clip, - Colors[gray ? EGDC_GRAY_WINDOW_SYMBOL : EGDC_WINDOW_SYMBOL], starttime, currenttime, loop, true); + colors[gray? EGDC_GRAY_WINDOW_SYMBOL : EGDC_WINDOW_SYMBOL], starttime, currenttime, loop, true); } +// END PATCH + EGUI_SKIN_TYPE CGUISkin::getType() const { return Type; } + //! draws a 2d rectangle. -void CGUISkin::draw2DRectangle(IGUIElement *element, - const video::SColor &color, const core::rect &pos, - const core::rect *clip) +void CGUISkin::draw2DRectangle(IGUIElement* element, + const video::SColor &color, const core::rect& pos, + const core::rect* clip) { Driver->draw2DRectangle(color, pos, clip); } + +//! gets the colors +// PATCH +void CGUISkin::getColors(video::SColor* colors) +{ + u32 i; + for (i=0; i +#include "ITexture.h" namespace irr { namespace video { -class IVideoDriver; + class IVideoDriver; } namespace gui { + class CGUISkin : public IGUISkin + { + public: -class CGUISkin : public IGUISkin -{ -public: - CGUISkin(EGUI_SKIN_TYPE type, video::IVideoDriver *driver); + CGUISkin(EGUI_SKIN_TYPE type, video::IVideoDriver* driver); - //! destructor - virtual ~CGUISkin(); + //! destructor + virtual ~CGUISkin(); - //! returns default color - video::SColor getColor(EGUI_DEFAULT_COLOR color) const override; + //! returns display density scaling factor + virtual float getScale() const { return Scale; } - //! sets a default color - void setColor(EGUI_DEFAULT_COLOR which, video::SColor newColor) override; + //! sets display density scaling factor + virtual void setScale(float scale) { Scale = scale; } - //! returns size for the given size type - s32 getSize(EGUI_DEFAULT_SIZE size) const override; + //! returns default color + virtual video::SColor getColor(EGUI_DEFAULT_COLOR color) const; - //! sets a default size - void setSize(EGUI_DEFAULT_SIZE which, s32 size) override; + //! sets a default color + virtual void setColor(EGUI_DEFAULT_COLOR which, video::SColor newColor); - //! returns the default font - IGUIFont *getFont(EGUI_DEFAULT_FONT which = EGDF_DEFAULT) const override; + //! returns size for the given size type + virtual s32 getSize(EGUI_DEFAULT_SIZE size) const; - //! sets a default font - void setFont(IGUIFont *font, EGUI_DEFAULT_FONT which = EGDF_DEFAULT) override; + //! sets a default size + virtual void setSize(EGUI_DEFAULT_SIZE which, s32 size); - //! sets the sprite bank used for drawing icons - void setSpriteBank(IGUISpriteBank *bank) override; + //! returns the default font + virtual IGUIFont* getFont(EGUI_DEFAULT_FONT which=EGDF_DEFAULT) const; - //! gets the sprite bank used for drawing icons - IGUISpriteBank *getSpriteBank() const override; + //! sets a default font + virtual void setFont(IGUIFont* font, EGUI_DEFAULT_FONT which=EGDF_DEFAULT); - //! Returns a default icon - /** Returns the sprite index within the sprite bank */ - u32 getIcon(EGUI_DEFAULT_ICON icon) const override; + //! sets the sprite bank used for drawing icons + virtual void setSpriteBank(IGUISpriteBank* bank); - //! Sets a default icon - /** Sets the sprite index used for drawing icons like arrows, - close buttons and ticks in checkboxes - \param icon: Enum specifying which icon to change - \param index: The sprite index used to draw this icon */ - void setIcon(EGUI_DEFAULT_ICON icon, u32 index) override; + //! gets the sprite bank used for drawing icons + virtual IGUISpriteBank* getSpriteBank() const; - //! Returns a default text. - /** For example for Message box button captions: - "OK", "Cancel", "Yes", "No" and so on. */ - const wchar_t *getDefaultText(EGUI_DEFAULT_TEXT text) const override; + //! Returns a default icon + /** Returns the sprite index within the sprite bank */ + virtual u32 getIcon(EGUI_DEFAULT_ICON icon) const; - //! Sets a default text. - /** For example for Message box button captions: - "OK", "Cancel", "Yes", "No" and so on. */ - void setDefaultText(EGUI_DEFAULT_TEXT which, const wchar_t *newText) override; + //! Sets a default icon + /** Sets the sprite index used for drawing icons like arrows, + close buttons and ticks in checkboxes + \param icon: Enum specifying which icon to change + \param index: The sprite index used to draw this icon */ + virtual void setIcon(EGUI_DEFAULT_ICON icon, u32 index); - //! draws a standard 3d button pane - /** Used for drawing for example buttons in normal state. - It uses the colors EGDC_3D_DARK_SHADOW, EGDC_3D_HIGH_LIGHT, EGDC_3D_SHADOW and - EGDC_3D_FACE for this. See EGUI_DEFAULT_COLOR for details. - \param rect: Defining area where to draw. - \param clip: Clip area. - \param element: Pointer to the element which wishes to draw this. This parameter - is usually not used by ISkin, but can be used for example by more complex - implementations to find out how to draw the part exactly. */ - virtual void draw3DButtonPaneStandard(IGUIElement *element, - const core::rect &rect, - const core::rect *clip = 0) override; + //! Returns a default text. + /** For example for Message box button captions: + "OK", "Cancel", "Yes", "No" and so on. */ + virtual const wchar_t* getDefaultText(EGUI_DEFAULT_TEXT text) const; - //! draws a pressed 3d button pane - /** Used for drawing for example buttons in pressed state. - It uses the colors EGDC_3D_DARK_SHADOW, EGDC_3D_HIGH_LIGHT, EGDC_3D_SHADOW and - EGDC_3D_FACE for this. See EGUI_DEFAULT_COLOR for details. - \param rect: Defining area where to draw. - \param clip: Clip area. - \param element: Pointer to the element which wishes to draw this. This parameter - is usually not used by ISkin, but can be used for example by more complex - implementations to find out how to draw the part exactly. */ - virtual void draw3DButtonPanePressed(IGUIElement *element, - const core::rect &rect, - const core::rect *clip = 0) override; + //! Sets a default text. + /** For example for Message box button captions: + "OK", "Cancel", "Yes", "No" and so on. */ + virtual void setDefaultText(EGUI_DEFAULT_TEXT which, const wchar_t* newText); - //! draws a sunken 3d pane - /** Used for drawing the background of edit, combo or check boxes. - \param element: Pointer to the element which wishes to draw this. This parameter - is usually not used by ISkin, but can be used for example by more complex - implementations to find out how to draw the part exactly. - \param bgcolor: Background color. - \param flat: Specifies if the sunken pane should be flat or displayed as sunken - deep into the ground. - \param rect: Defining area where to draw. - \param clip: Clip area. */ - virtual void draw3DSunkenPane(IGUIElement *element, - video::SColor bgcolor, bool flat, - bool fillBackGround, - const core::rect &rect, - const core::rect *clip = 0) override; + //! draws a standard 3d button pane + /** Used for drawing for example buttons in normal state. + It uses the colors EGDC_3D_DARK_SHADOW, EGDC_3D_HIGH_LIGHT, EGDC_3D_SHADOW and + EGDC_3D_FACE for this. See EGUI_DEFAULT_COLOR for details. + \param rect: Defining area where to draw. + \param clip: Clip area. + \param element: Pointer to the element which wishes to draw this. This parameter + is usually not used by ISkin, but can be used for example by more complex + implementations to find out how to draw the part exactly. */ + virtual void draw3DButtonPaneStandard(IGUIElement* element, + const core::rect& rect, + const core::rect* clip=0) + { + drawColored3DButtonPaneStandard(element, rect,clip); + } - //! draws a window background - /** Used for drawing the background of dialogs and windows. - \param element: Pointer to the element which wishes to draw this. This parameter - is usually not used by ISkin, but can be used for example by more complex - implementations to find out how to draw the part exactly. - \param titleBarColor: Title color. - \param drawTitleBar: True to enable title drawing. - \param rect: Defining area where to draw. - \param clip: Clip area. - \param checkClientArea: When set to non-null the function will not draw anything, - but will instead return the clientArea which can be used for drawing by the calling window. - That is the area without borders and without titlebar. - \return Returns rect where it would be good to draw title bar text. This will - work even when checkClientArea is set to a non-null value.*/ - virtual core::rect draw3DWindowBackground(IGUIElement *element, - bool drawTitleBar, video::SColor titleBarColor, - const core::rect &rect, - const core::rect *clip, - core::rect *checkClientArea) override; + virtual void drawColored3DButtonPaneStandard(IGUIElement* element, + const core::rect& rect, + const core::rect* clip=0, + const video::SColor* colors=0); - //! draws a standard 3d menu pane - /** Used for drawing for menus and context menus. - It uses the colors EGDC_3D_DARK_SHADOW, EGDC_3D_HIGH_LIGHT, EGDC_3D_SHADOW and - EGDC_3D_FACE for this. See EGUI_DEFAULT_COLOR for details. - \param element: Pointer to the element which wishes to draw this. This parameter - is usually not used by ISkin, but can be used for example by more complex - implementations to find out how to draw the part exactly. - \param rect: Defining area where to draw. - \param clip: Clip area. */ - virtual void draw3DMenuPane(IGUIElement *element, - const core::rect &rect, - const core::rect *clip = 0) override; + //! draws a pressed 3d button pane + /** Used for drawing for example buttons in pressed state. + It uses the colors EGDC_3D_DARK_SHADOW, EGDC_3D_HIGH_LIGHT, EGDC_3D_SHADOW and + EGDC_3D_FACE for this. See EGUI_DEFAULT_COLOR for details. + \param rect: Defining area where to draw. + \param clip: Clip area. + \param element: Pointer to the element which wishes to draw this. This parameter + is usually not used by ISkin, but can be used for example by more complex + implementations to find out how to draw the part exactly. */ + virtual void draw3DButtonPanePressed(IGUIElement* element, + const core::rect& rect, + const core::rect* clip=0) + { + drawColored3DButtonPanePressed(element, rect, clip); + } - //! draws a standard 3d tool bar - /** Used for drawing for toolbars and menus. - \param element: Pointer to the element which wishes to draw this. This parameter - is usually not used by ISkin, but can be used for example by more complex - implementations to find out how to draw the part exactly. - \param rect: Defining area where to draw. - \param clip: Clip area. */ - virtual void draw3DToolBar(IGUIElement *element, - const core::rect &rect, - const core::rect *clip = 0) override; + virtual void drawColored3DButtonPanePressed(IGUIElement* element, + const core::rect& rect, + const core::rect* clip=0, + const video::SColor* colors=0); - //! draws a tab button - /** Used for drawing for tab buttons on top of tabs. - \param element: Pointer to the element which wishes to draw this. This parameter - is usually not used by ISkin, but can be used for example by more complex - implementations to find out how to draw the part exactly. - \param active: Specifies if the tab is currently active. - \param rect: Defining area where to draw. - \param clip: Clip area. */ - virtual void draw3DTabButton(IGUIElement *element, bool active, - const core::rect &rect, const core::rect *clip = 0, - EGUI_ALIGNMENT alignment = EGUIA_UPPERLEFT) override; + //! draws a sunken 3d pane + /** Used for drawing the background of edit, combo or check boxes. + \param element: Pointer to the element which wishes to draw this. This parameter + is usually not used by ISkin, but can be used for example by more complex + implementations to find out how to draw the part exactly. + \param bgcolor: Background color. + \param flat: Specifies if the sunken pane should be flat or displayed as sunken + deep into the ground. + \param rect: Defining area where to draw. + \param clip: Clip area. */ + virtual void draw3DSunkenPane(IGUIElement* element, + video::SColor bgcolor, bool flat, + bool fillBackGround, + const core::rect& rect, + const core::rect* clip=0) + { + drawColored3DSunkenPane(element, bgcolor, flat, fillBackGround, rect, clip); + } - //! draws a tab control body - /** \param element: Pointer to the element which wishes to draw this. This parameter - is usually not used by ISkin, but can be used for example by more complex - implementations to find out how to draw the part exactly. - \param border: Specifies if the border should be drawn. - \param background: Specifies if the background should be drawn. - \param rect: Defining area where to draw. - \param clip: Clip area. */ - virtual void draw3DTabBody(IGUIElement *element, bool border, bool background, - const core::rect &rect, const core::rect *clip = 0, s32 tabHeight = -1, - EGUI_ALIGNMENT alignment = EGUIA_UPPERLEFT) override; + virtual void drawColored3DSunkenPane(IGUIElement* element, + video::SColor bgcolor, bool flat, + bool fillBackGround, + const core::rect& rect, + const core::rect* clip=0, + const video::SColor* colors=0); - //! draws an icon, usually from the skin's sprite bank - /** \param element: Pointer to the element which wishes to draw this icon. - This parameter is usually not used by IGUISkin, but can be used for example - by more complex implementations to find out how to draw the part exactly. - \param icon: Specifies the icon to be drawn. - \param position: The position to draw the icon - \param starttime: The time at the start of the animation - \param currenttime: The present time, used to calculate the frame number - \param loop: Whether the animation should loop or not - \param clip: Clip area. */ - virtual void drawIcon(IGUIElement *element, EGUI_DEFAULT_ICON icon, - const core::position2di position, - u32 starttime = 0, u32 currenttime = 0, - bool loop = false, const core::rect *clip = 0) override; + //! draws a window background + /** Used for drawing the background of dialogs and windows. + \param element: Pointer to the element which wishes to draw this. This parameter + is usually not used by ISkin, but can be used for example by more complex + implementations to find out how to draw the part exactly. + \param titleBarColor: Title color. + \param drawTitleBar: True to enable title drawing. + \param rect: Defining area where to draw. + \param clip: Clip area. + \param checkClientArea: When set to non-null the function will not draw anything, + but will instead return the clientArea which can be used for drawing by the calling window. + That is the area without borders and without titlebar. + \return Returns rect where it would be good to draw title bar text. This will + work even when checkClientArea is set to a non-null value.*/ + virtual core::rect draw3DWindowBackground(IGUIElement* element, + bool drawTitleBar, video::SColor titleBarColor, + const core::rect& rect, + const core::rect* clip, + core::rect* checkClientArea) + { + return drawColored3DWindowBackground(element, drawTitleBar, titleBarColor, + rect, clip, checkClientArea); + } - //! draws a 2d rectangle. - /** \param element: Pointer to the element which wishes to draw this icon. - This parameter is usually not used by IGUISkin, but can be used for example - by more complex implementations to find out how to draw the part exactly. - \param color: Color of the rectangle to draw. The alpha component specifies how - transparent the rectangle will be. - \param pos: Position of the rectangle. - \param clip: Pointer to rectangle against which the rectangle will be clipped. - If the pointer is null, no clipping will be performed. */ - virtual void draw2DRectangle(IGUIElement *element, const video::SColor &color, - const core::rect &pos, const core::rect *clip = 0) override; + virtual core::rect drawColored3DWindowBackground(IGUIElement* element, + bool drawTitleBar, video::SColor titleBarColor, + const core::rect& rect, + const core::rect* clip, + core::rect* checkClientArea, + const video::SColor* colors=0); - //! get the type of this skin - EGUI_SKIN_TYPE getType() const override; + //! draws a standard 3d menu pane + /** Used for drawing for menus and context menus. + It uses the colors EGDC_3D_DARK_SHADOW, EGDC_3D_HIGH_LIGHT, EGDC_3D_SHADOW and + EGDC_3D_FACE for this. See EGUI_DEFAULT_COLOR for details. + \param element: Pointer to the element which wishes to draw this. This parameter + is usually not used by ISkin, but can be used for example by more complex + implementations to find out how to draw the part exactly. + \param rect: Defining area where to draw. + \param clip: Clip area. */ + virtual void draw3DMenuPane(IGUIElement* element, + const core::rect& rect, + const core::rect* clip=0) + { + drawColored3DMenuPane(element, rect, clip); + } -private: - video::SColor Colors[EGDC_COUNT]; - s32 Sizes[EGDS_COUNT]; - u32 Icons[EGDI_COUNT]; - IGUIFont *Fonts[EGDF_COUNT]; - IGUISpriteBank *SpriteBank; - core::stringw Texts[EGDT_COUNT]; - video::IVideoDriver *Driver; - bool UseGradient; + virtual void drawColored3DMenuPane(IGUIElement* element, + const core::rect& rect, + const core::rect* clip=0, + const video::SColor* colors=0); - EGUI_SKIN_TYPE Type; -}; + //! draws a standard 3d tool bar + /** Used for drawing for toolbars and menus. + \param element: Pointer to the element which wishes to draw this. This parameter + is usually not used by ISkin, but can be used for example by more complex + implementations to find out how to draw the part exactly. + \param rect: Defining area where to draw. + \param clip: Clip area. */ + virtual void draw3DToolBar(IGUIElement* element, + const core::rect& rect, + const core::rect* clip=0) + { + drawColored3DToolBar(element, rect, clip); + } + + virtual void drawColored3DToolBar(IGUIElement* element, + const core::rect& rect, + const core::rect* clip=0, + const video::SColor* colors=0); + + //! draws a tab button + /** Used for drawing for tab buttons on top of tabs. + \param element: Pointer to the element which wishes to draw this. This parameter + is usually not used by ISkin, but can be used for example by more complex + implementations to find out how to draw the part exactly. + \param active: Specifies if the tab is currently active. + \param rect: Defining area where to draw. + \param clip: Clip area. */ + virtual void draw3DTabButton(IGUIElement* element, bool active, + const core::rect& rect, const core::rect* clip=0, EGUI_ALIGNMENT alignment=EGUIA_UPPERLEFT) + { + drawColored3DTabButton(element, active, rect, clip, alignment); + } + + virtual void drawColored3DTabButton(IGUIElement* element, bool active, + const core::rect& rect, const core::rect* clip=0, EGUI_ALIGNMENT alignment=EGUIA_UPPERLEFT, + const video::SColor* colors=0); + + //! draws a tab control body + /** \param element: Pointer to the element which wishes to draw this. This parameter + is usually not used by ISkin, but can be used for example by more complex + implementations to find out how to draw the part exactly. + \param border: Specifies if the border should be drawn. + \param background: Specifies if the background should be drawn. + \param rect: Defining area where to draw. + \param clip: Clip area. */ + virtual void draw3DTabBody(IGUIElement* element, bool border, bool background, + const core::rect& rect, const core::rect* clip=0, s32 tabHeight=-1, EGUI_ALIGNMENT alignment=EGUIA_UPPERLEFT) + { + drawColored3DTabBody(element, border, background, rect, clip, tabHeight, alignment); + } + + virtual void drawColored3DTabBody(IGUIElement* element, bool border, bool background, + const core::rect& rect, const core::rect* clip=0, s32 tabHeight=-1, EGUI_ALIGNMENT alignment=EGUIA_UPPERLEFT, + const video::SColor* colors=0); + + //! draws an icon, usually from the skin's sprite bank + /** \param element: Pointer to the element which wishes to draw this icon. + This parameter is usually not used by IGUISkin, but can be used for example + by more complex implementations to find out how to draw the part exactly. + \param icon: Specifies the icon to be drawn. + \param position: The position to draw the icon + \param starttime: The time at the start of the animation + \param currenttime: The present time, used to calculate the frame number + \param loop: Whether the animation should loop or not + \param clip: Clip area. */ + virtual void drawIcon(IGUIElement* element, EGUI_DEFAULT_ICON icon, + const core::position2di position, + u32 starttime=0, u32 currenttime=0, + bool loop=false, const core::rect* clip=0) + { + drawColoredIcon(element, icon, position, starttime, currenttime, loop, clip); + } + + virtual void drawColoredIcon(IGUIElement* element, EGUI_DEFAULT_ICON icon, + const core::position2di position, + u32 starttime=0, u32 currenttime=0, + bool loop=false, const core::rect* clip=0, + const video::SColor* colors=0); + + //! draws a 2d rectangle. + /** \param element: Pointer to the element which wishes to draw this icon. + This parameter is usually not used by IGUISkin, but can be used for example + by more complex implementations to find out how to draw the part exactly. + \param color: Color of the rectangle to draw. The alpha component specifies how + transparent the rectangle will be. + \param pos: Position of the rectangle. + \param clip: Pointer to rectangle against which the rectangle will be clipped. + If the pointer is null, no clipping will be performed. */ + virtual void draw2DRectangle(IGUIElement* element, const video::SColor &color, + const core::rect& pos, const core::rect* clip = 0); + + + //! get the type of this skin + virtual EGUI_SKIN_TYPE getType() const; + + //! gets the colors + virtual void getColors(video::SColor* colors); // ::PATCH: + + private: + + float Scale = 1.0f; + video::SColor Colors[EGDC_COUNT]; + s32 Sizes[EGDS_COUNT]; + u32 Icons[EGDI_COUNT]; + IGUIFont* Fonts[EGDF_COUNT]; + IGUISpriteBank* SpriteBank; + core::stringw Texts[EGDT_COUNT]; + video::IVideoDriver* Driver; + bool UseGradient; + + EGUI_SKIN_TYPE Type; + }; } // end namespace gui } // end namespace irr + diff --git a/irr/src/CImage.h b/irr/src/CImage.h index 955f85705..33a34386e 100644 --- a/irr/src/CImage.h +++ b/irr/src/CImage.h @@ -21,7 +21,7 @@ inline bool checkImageDimensions(u32 width, u32 height) //! IImage implementation with a lot of special image operations for //! 16 bit A1R5G5B5/32 Bit A8R8G8B8 images, which are used by the SoftwareDevice. -class CImage : public IImage +class CImage final : public IImage { public: //! constructor from raw image data diff --git a/irr/src/CIrrDeviceLinux.cpp b/irr/src/CIrrDeviceLinux.cpp index 71eb0f260..6ecb499b2 100644 --- a/irr/src/CIrrDeviceLinux.cpp +++ b/irr/src/CIrrDeviceLinux.cpp @@ -26,6 +26,7 @@ #include "IGUISpriteBank.h" #include "IImageLoader.h" #include "IFileSystem.h" +#include "IVideoDriver.h" #include #include @@ -33,7 +34,7 @@ #include #endif -#if defined(_IRR_COMPILE_WITH_OGLES1_) || defined(_IRR_COMPILE_WITH_OGLES2_) +#if defined(_IRR_COMPILE_WITH_OGLES2_) #include "CEGLManager.h" #endif @@ -45,9 +46,12 @@ #include #endif +#if defined(_IRR_COMPILE_WITH_X11_) || defined(_IRR_COMPILE_WITH_JOYSTICK_EVENTS_) +#include +#endif + #if defined _IRR_COMPILE_WITH_JOYSTICK_EVENTS_ #include -#include #ifdef __FreeBSD__ #include @@ -73,10 +77,6 @@ namespace video IVideoDriver *createOpenGLDriver(const irr::SIrrlichtCreationParameters ¶ms, io::IFileSystem *io, IContextManager *contextManager); #endif -#ifdef _IRR_COMPILE_WITH_OGLES1_ -IVideoDriver *createOGLES1Driver(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 @@ -551,22 +551,6 @@ void CIrrDeviceLinux::createDriver() } #else os::Printer::log("No OpenGL support compiled in.", ELL_ERROR); -#endif - break; - case video::EDT_OGLES1: -#ifdef _IRR_COMPILE_WITH_OGLES1_ - { - video::SExposedVideoData data; - data.OpenGLLinux.X11Window = XWindow; - data.OpenGLLinux.X11Display = XDisplay; - - ContextManager = new video::CEGLManager(); - ContextManager->initialize(CreationParams, data); - - VideoDriver = video::createOGLES1Driver(CreationParams, FileSystem, ContextManager); - } -#else - os::Printer::log("No OpenGL-ES1 support compiled in.", ELL_ERROR); #endif break; case video::EDT_OGLES2: diff --git a/irr/src/CIrrDeviceOSX.mm b/irr/src/CIrrDeviceOSX.mm index 67c0ce05c..e335085e4 100644 --- a/irr/src/CIrrDeviceOSX.mm +++ b/irr/src/CIrrDeviceOSX.mm @@ -720,9 +720,8 @@ void CIrrDeviceMacOSX::createDriver() #endif break; - case video::EDT_OGLES1: case video::EDT_OGLES2: - os::Printer::log("This driver is not available in OSX. Try OpenGL or Software renderer.", ELL_ERROR); + os::Printer::log("This driver is not available on OSX.", ELL_ERROR); break; case video::EDT_NULL: diff --git a/irr/src/CIrrDeviceSDL.cpp b/irr/src/CIrrDeviceSDL.cpp index 81ff37511..14d996e47 100644 --- a/irr/src/CIrrDeviceSDL.cpp +++ b/irr/src/CIrrDeviceSDL.cpp @@ -10,6 +10,7 @@ #include "IGUIEnvironment.h" #include "IImageLoader.h" #include "IFileSystem.h" +#include "IVideoDriver.h" #include "os.h" #include "CTimer.h" #include "irrString.h" @@ -129,9 +130,9 @@ EM_BOOL CIrrDeviceSDL::MouseLeaveCallback(int eventType, const EmscriptenMouseEv } #endif -bool CIrrDeviceSDL::keyIsKnownSpecial(EKEY_CODE key) +bool CIrrDeviceSDL::keyIsKnownSpecial(EKEY_CODE irrlichtKey) { - switch (key) { + switch (irrlichtKey) { // keys which are known to have safe special character interpretation // could need changes over time (removals and additions!) case KEY_RETURN: @@ -189,24 +190,68 @@ bool CIrrDeviceSDL::keyIsKnownSpecial(EKEY_CODE key) } } -int CIrrDeviceSDL::findCharToPassToIrrlicht(int assumedChar, EKEY_CODE key) +int CIrrDeviceSDL::findCharToPassToIrrlicht(uint32_t sdlKey, EKEY_CODE irrlichtKey, bool numlock) { + switch (irrlichtKey) { // special cases that always return a char regardless of how the SDL keycode // looks - switch (key) { case KEY_RETURN: case KEY_ESCAPE: - return (int)key; + return (int)irrlichtKey; + + // This is necessary for keys on the numpad because they don't use the same + // keycodes as their non-numpad versions (whose keycodes correspond to chars), + // but have their own SDL keycodes and their own Irrlicht keycodes (which + // don't correspond to chars). + case KEY_MULTIPLY: + return '*'; + case KEY_ADD: + return '+'; + case KEY_SUBTRACT: + return '-'; + case KEY_DIVIDE: + return '/'; + default: break; } + if (numlock) { + // Number keys on the numpad are also affected, but we only want them + // to produce number chars when numlock is enabled. + switch (irrlichtKey) { + case KEY_NUMPAD0: + return '0'; + case KEY_NUMPAD1: + return '1'; + case KEY_NUMPAD2: + return '2'; + case KEY_NUMPAD3: + return '3'; + case KEY_NUMPAD4: + return '4'; + case KEY_NUMPAD5: + return '5'; + case KEY_NUMPAD6: + return '6'; + case KEY_NUMPAD7: + return '7'; + case KEY_NUMPAD8: + return '8'; + case KEY_NUMPAD9: + return '9'; + default: + break; + } + } + // SDL in-place ORs values with no character representation with 1<<30 // https://wiki.libsdl.org/SDL2/SDLKeycodeLookup - if (assumedChar & (1 << 30)) + // This also affects the numpad keys btw. + if (sdlKey & (1 << 30)) return 0; - switch (key) { + switch (irrlichtKey) { case KEY_PRIOR: case KEY_NEXT: case KEY_HOME: @@ -218,7 +263,7 @@ int CIrrDeviceSDL::findCharToPassToIrrlicht(int assumedChar, EKEY_CODE key) case KEY_NUMLOCK: return 0; default: - return assumedChar; + return sdlKey; } } @@ -285,11 +330,26 @@ CIrrDeviceSDL::CIrrDeviceSDL(const SIrrlichtCreationParameters ¶m) : SDL_SetHint(SDL_HINT_TV_REMOTE_AS_JOYSTICK, "0"); #endif +#if SDL_VERSION_ATLEAST(2, 24, 0) + // highdpi support on Windows + SDL_SetHint(SDL_HINT_WINDOWS_DPI_SCALING, "1"); +#endif + // Minetest has its own code to synthesize mouse events from touch events, // so we prevent SDL from doing it. SDL_SetHint(SDL_HINT_TOUCH_MOUSE_EVENTS, "0"); SDL_SetHint(SDL_HINT_MOUSE_TOUCH_EVENTS, "0"); +#if defined(SDL_HINT_APP_NAME) + SDL_SetHint(SDL_HINT_APP_NAME, "Minetest"); +#endif + + // Set IME hints + SDL_SetHint(SDL_HINT_IME_INTERNAL_EDITING, "1"); +#if defined(SDL_HINT_IME_SHOW_UI) + SDL_SetHint(SDL_HINT_IME_SHOW_UI, "1"); +#endif + u32 flags = SDL_INIT_TIMER | SDL_INIT_EVENTS; if (CreationParams.DriverType != video::EDT_NULL) flags |= SDL_INIT_VIDEO; @@ -475,6 +535,7 @@ bool CIrrDeviceSDL::createWindow() bool CIrrDeviceSDL::createWindowWithContext() { u32 SDL_Flags = 0; + SDL_Flags |= SDL_WINDOW_ALLOW_HIGHDPI; SDL_Flags |= getFullscreenFlag(CreationParams.Fullscreen); if (Resizable) @@ -534,18 +595,14 @@ bool CIrrDeviceSDL::createWindowWithContext() SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2); SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_COMPATIBILITY); break; - case video::EDT_OGLES1: - SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 1); - SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1); - SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES); - break; case video::EDT_OGLES2: case video::EDT_WEBGL1: SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0); SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES); break; - default:; + default: + _IRR_DEBUG_BREAK_IF(1); } if (CreationParams.DriverDebug) { @@ -589,13 +646,17 @@ bool CIrrDeviceSDL::createWindowWithContext() return false; } - // Update Width and Height to match the actual window size. - // In fullscreen mode, the window size specified in SIrrlichtCreationParameters - // is ignored, so we cannot rely on it. - int w = 0, h = 0; - SDL_GetWindowSize(Window, &w, &h); - Width = w; - Height = h; + updateSizeAndScale(); + if (ScaleX != 1.0f || ScaleY != 1.0f) { + // The given window size is in pixels, not in screen coordinates. + // We can only do the conversion now since we didn't know the scale before. + SDL_SetWindowSize(Window, + static_cast(CreationParams.WindowSize.Width / ScaleX), + static_cast(CreationParams.WindowSize.Height / ScaleY)); + // Re-center, otherwise large, non-maximized windows go offscreen. + SDL_SetWindowPosition(Window, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED); + updateSizeAndScale(); + } return true; #endif // !_IRR_EMSCRIPTEN_PLATFORM_ @@ -652,6 +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)); switch (SDL_event.type) { case SDL_MOUSEMOTION: { @@ -659,10 +721,12 @@ bool CIrrDeviceSDL::run() irrevent.EventType = irr::EET_MOUSE_INPUT_EVENT; irrevent.MouseInput.Event = irr::EMIE_MOUSE_MOVED; - MouseX = irrevent.MouseInput.X = SDL_event.motion.x; - MouseY = irrevent.MouseInput.Y = SDL_event.motion.y; - MouseXRel = SDL_event.motion.xrel; - MouseYRel = SDL_event.motion.yrel; + MouseX = irrevent.MouseInput.X = + static_cast(SDL_event.motion.x * ScaleX); + MouseY = irrevent.MouseInput.Y = + static_cast(SDL_event.motion.y * ScaleY); + MouseXRel = static_cast(SDL_event.motion.xrel * ScaleX); + MouseYRel = static_cast(SDL_event.motion.yrel * ScaleY); irrevent.MouseInput.ButtonStates = MouseButtonStates; irrevent.MouseInput.Shift = (keymod & KMOD_SHIFT) != 0; irrevent.MouseInput.Control = (keymod & KMOD_CTRL) != 0; @@ -694,8 +758,8 @@ bool CIrrDeviceSDL::run() SDL_Keymod keymod = SDL_GetModState(); irrevent.EventType = irr::EET_MOUSE_INPUT_EVENT; - irrevent.MouseInput.X = SDL_event.button.x; - irrevent.MouseInput.Y = SDL_event.button.y; + irrevent.MouseInput.X = static_cast(SDL_event.button.x * ScaleX); + irrevent.MouseInput.Y = static_cast(SDL_event.button.y * ScaleY); irrevent.MouseInput.Shift = (keymod & KMOD_SHIFT) != 0; irrevent.MouseInput.Control = (keymod & KMOD_CTRL) != 0; @@ -816,7 +880,8 @@ bool CIrrDeviceSDL::run() irrevent.KeyInput.PressedDown = (SDL_event.type == SDL_KEYDOWN); irrevent.KeyInput.Shift = (SDL_event.key.keysym.mod & KMOD_SHIFT) != 0; irrevent.KeyInput.Control = (SDL_event.key.keysym.mod & KMOD_CTRL) != 0; - irrevent.KeyInput.Char = findCharToPassToIrrlicht(mp.SDLKey, key); + irrevent.KeyInput.Char = findCharToPassToIrrlicht(mp.SDLKey, key, + (SDL_event.key.keysym.mod & KMOD_NUM) != 0); postEventFromUser(irrevent); } break; @@ -827,14 +892,25 @@ bool CIrrDeviceSDL::run() case SDL_WINDOWEVENT: switch (SDL_event.window.event) { case SDL_WINDOWEVENT_RESIZED: - if ((SDL_event.window.data1 != (int)Width) || (SDL_event.window.data2 != (int)Height)) { - Width = SDL_event.window.data1; - Height = SDL_event.window.data2; + case SDL_WINDOWEVENT_SIZE_CHANGED: +#if SDL_VERSION_ATLEAST(2, 0, 18) + case SDL_WINDOWEVENT_DISPLAY_CHANGED: +#endif + u32 old_w = Width, old_h = Height; + f32 old_scale_x = ScaleX, old_scale_y = ScaleY; + updateSizeAndScale(); + if (old_w != Width || old_h != Height) { if (VideoDriver) VideoDriver->OnResize(core::dimension2d(Width, Height)); } + if (old_scale_x != ScaleX || old_scale_y != ScaleY) { + irrevent.EventType = EET_APPLICATION_EVENT; + irrevent.ApplicationEvent.EventType = EAET_DPI_CHANGED; + postEventFromUser(irrevent); + } break; } + break; case SDL_USEREVENT: irrevent.EventType = irr::EET_USER_EVENT; @@ -848,8 +924,8 @@ bool CIrrDeviceSDL::run() irrevent.EventType = EET_TOUCH_INPUT_EVENT; irrevent.TouchInput.Event = ETIE_PRESSED_DOWN; irrevent.TouchInput.ID = SDL_event.tfinger.fingerId; - irrevent.TouchInput.X = SDL_event.tfinger.x * Width; - irrevent.TouchInput.Y = SDL_event.tfinger.y * Height; + irrevent.TouchInput.X = static_cast(SDL_event.tfinger.x * Width); + irrevent.TouchInput.Y = static_cast(SDL_event.tfinger.y * Height); CurrentTouchCount++; irrevent.TouchInput.touchedCount = CurrentTouchCount; @@ -860,8 +936,8 @@ bool CIrrDeviceSDL::run() irrevent.EventType = EET_TOUCH_INPUT_EVENT; irrevent.TouchInput.Event = ETIE_MOVED; irrevent.TouchInput.ID = SDL_event.tfinger.fingerId; - irrevent.TouchInput.X = SDL_event.tfinger.x * Width; - irrevent.TouchInput.Y = SDL_event.tfinger.y * Height; + irrevent.TouchInput.X = static_cast(SDL_event.tfinger.x * Width); + irrevent.TouchInput.Y = static_cast(SDL_event.tfinger.y * Height); irrevent.TouchInput.touchedCount = CurrentTouchCount; postEventFromUser(irrevent); @@ -871,8 +947,8 @@ bool CIrrDeviceSDL::run() irrevent.EventType = EET_TOUCH_INPUT_EVENT; irrevent.TouchInput.Event = ETIE_LEFT_UP; irrevent.TouchInput.ID = SDL_event.tfinger.fingerId; - irrevent.TouchInput.X = SDL_event.tfinger.x * Width; - irrevent.TouchInput.Y = SDL_event.tfinger.y * Height; + irrevent.TouchInput.X = static_cast(SDL_event.tfinger.x * Width); + irrevent.TouchInput.Y = static_cast(SDL_event.tfinger.y * Height); // To match Android behavior, still count the pointer that was // just released. irrevent.TouchInput.touchedCount = CurrentTouchCount; @@ -1030,25 +1106,26 @@ bool CIrrDeviceSDL::activateJoysticks(core::array &joystickInfo) return false; } +void CIrrDeviceSDL::updateSizeAndScale() +{ + int window_w, window_h; + SDL_GetWindowSize(Window, &window_w, &window_h); + + int drawable_w, drawable_h; + SDL_GL_GetDrawableSize(Window, &drawable_w, &drawable_h); + + ScaleX = (float)drawable_w / (float)window_w; + ScaleY = (float)drawable_h / (float)window_h; + + Width = drawable_w; + Height = drawable_h; +} + //! Get the display density in dots per inch. float CIrrDeviceSDL::getDisplayDensity() const { - if (!Window) - return 0.0f; - - int window_w; - int window_h; - SDL_GetWindowSize(Window, &window_w, &window_h); - - int drawable_w; - int drawable_h; - SDL_GL_GetDrawableSize(Window, &drawable_w, &drawable_h); - // assume 96 dpi - float dpi_w = (float)drawable_w / (float)window_w * 96.0f; - float dpi_h = (float)drawable_h / (float)window_h * 96.0f; - - return std::max(dpi_w, dpi_h); + return std::max(ScaleX * 96.0f, ScaleY * 96.0f); } void CIrrDeviceSDL::SwapWindow() @@ -1267,7 +1344,8 @@ void CIrrDeviceSDL::createKeyMap() // buttons missing - KeyMap.push_back(SKeyMap(SDLK_AC_BACK, KEY_CANCEL)); + // Android back button = ESC + KeyMap.push_back(SKeyMap(SDLK_AC_BACK, KEY_ESCAPE)); KeyMap.push_back(SKeyMap(SDLK_BACKSPACE, KEY_BACK)); KeyMap.push_back(SKeyMap(SDLK_TAB, KEY_TAB)); diff --git a/irr/src/CIrrDeviceSDL.h b/irr/src/CIrrDeviceSDL.h index c536a8149..f881bba5c 100644 --- a/irr/src/CIrrDeviceSDL.h +++ b/irr/src/CIrrDeviceSDL.h @@ -158,7 +158,9 @@ public: //! Sets the new position of the cursor. void setPosition(s32 x, s32 y) override { - SDL_WarpMouseInWindow(Device->Window, x, y); + SDL_WarpMouseInWindow(Device->Window, + static_cast(x / Device->ScaleX), + static_cast(y / Device->ScaleY)); if (SDL_GetRelativeMouseMode()) { // There won't be an event for this warp (details on libsdl-org/SDL/issues/6034) @@ -191,7 +193,7 @@ public: virtual void setRelativeMode(bool relative) _IRR_OVERRIDE_ { // Only change it when necessary, as it flushes mouse motion when enabled - if (relative != SDL_GetRelativeMouseMode()) { + if (relative != static_cast(SDL_GetRelativeMouseMode())) { if (relative) SDL_SetRelativeMouseMode(SDL_TRUE); else @@ -272,10 +274,10 @@ private: #endif // Check if a key is a known special character with no side effects on text boxes. - static bool keyIsKnownSpecial(EKEY_CODE key); + static bool keyIsKnownSpecial(EKEY_CODE irrlichtKey); // Return the Char that should be sent to Irrlicht for the given key (either the one passed in or 0). - static int findCharToPassToIrrlicht(int assumedChar, EKEY_CODE key); + static int findCharToPassToIrrlicht(uint32_t sdlKey, EKEY_CODE irrlichtKey, bool numlock); // Check if a text box is in focus. Enable or disable SDL_TEXTINPUT events only if in focus. void resetReceiveTextInputEvents(); @@ -300,6 +302,8 @@ private: u32 MouseButtonStates; u32 Width, Height; + f32 ScaleX = 1.0f, ScaleY = 1.0f; + void updateSizeAndScale(); bool Resizable; diff --git a/irr/src/CIrrDeviceStub.cpp b/irr/src/CIrrDeviceStub.cpp index 1ff120d10..fd8e458c8 100644 --- a/irr/src/CIrrDeviceStub.cpp +++ b/irr/src/CIrrDeviceStub.cpp @@ -8,6 +8,7 @@ #include "IFileSystem.h" #include "IGUIElement.h" #include "IGUIEnvironment.h" +#include "IVideoDriver.h" #include "os.h" #include "CTimer.h" #include "CLogger.h" diff --git a/irr/src/CIrrDeviceWin32.cpp b/irr/src/CIrrDeviceWin32.cpp index c2876fcce..366be8013 100644 --- a/irr/src/CIrrDeviceWin32.cpp +++ b/irr/src/CIrrDeviceWin32.cpp @@ -17,6 +17,7 @@ #include "COSOperator.h" #include "dimension2d.h" #include "IGUISpriteBank.h" +#include "IVideoDriver.h" #include #include "SExposedVideoData.h" @@ -29,7 +30,7 @@ #endif #endif -#if defined(_IRR_COMPILE_WITH_OGLES1_) || defined(_IRR_COMPILE_WITH_OGLES2_) +#if defined(_IRR_COMPILE_WITH_OGLES2_) #include "CEGLManager.h" #endif @@ -45,10 +46,6 @@ namespace video IVideoDriver *createOpenGLDriver(const irr::SIrrlichtCreationParameters ¶ms, io::IFileSystem *io, IContextManager *contextManager); #endif -#ifdef _IRR_COMPILE_WITH_OGLES1_ -IVideoDriver *createOGLES1Driver(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 @@ -890,21 +887,6 @@ void CIrrDeviceWin32::createDriver() os::Printer::log("Could not create OpenGL driver.", ELL_ERROR); #else os::Printer::log("OpenGL driver was not compiled in.", ELL_ERROR); -#endif - break; - case video::EDT_OGLES1: -#ifdef _IRR_COMPILE_WITH_OGLES1_ - switchToFullScreen(); - - ContextManager = new video::CEGLManager(); - ContextManager->initialize(CreationParams, video::SExposedVideoData(HWnd)); - - VideoDriver = video::createOGLES1Driver(CreationParams, FileSystem, ContextManager); - - if (!VideoDriver) - os::Printer::log("Could not create OpenGL-ES1 driver.", ELL_ERROR); -#else - os::Printer::log("OpenGL-ES1 driver was not compiled in.", ELL_ERROR); #endif break; case video::EDT_OGLES2: diff --git a/irr/src/CLimitReadFile.h b/irr/src/CLimitReadFile.h index 1594135e6..6b02cfdc0 100644 --- a/irr/src/CLimitReadFile.h +++ b/irr/src/CLimitReadFile.h @@ -20,7 +20,7 @@ namespace io This can be useful, for example for reading uncompressed files in an archive (zip, tar). !*/ -class CLimitReadFile : public IReadFile +class CLimitReadFile final : public IReadFile { public: CLimitReadFile(IReadFile *alreadyOpenedFile, long pos, long areaSize, const io::path &name); diff --git a/irr/src/CMakeLists.txt b/irr/src/CMakeLists.txt index daff63bc2..22a0d0093 100644 --- a/irr/src/CMakeLists.txt +++ b/irr/src/CMakeLists.txt @@ -1,3 +1,5 @@ +# When enabling SDL2 by default on macOS, don't forget to change +# "NSHighResolutionCapable" to true in "Info.plist". if(NOT APPLE) set(DEFAULT_SDL2 ON) endif() @@ -15,7 +17,7 @@ if(CMAKE_CXX_COMPILER_ID MATCHES "^(GNU|Clang|AppleClang)$") set(CMAKE_CXX_FLAGS_RELEASE "-O3") set(CMAKE_CXX_FLAGS_DEBUG "-g") - add_compile_options(-Wall -pipe -fno-exceptions) + add_compile_options(-Wall -pipe) # Enable SSE for floating point math on 32-bit x86 by default # reasoning see minetest issue #11810 and https://gcc.gnu.org/wiki/FloatingPointMath @@ -81,6 +83,10 @@ if(LINUX_PLATFORM) add_definitions(-D_IRR_LINUX_PLATFORM_) endif() +if(MSVC) + add_definitions(-D_CRT_SECURE_NO_WARNINGS) +endif() + if(USE_SDL2) set(DEVICE "SDL") elseif(DEVICE STREQUAL "SDL") @@ -128,12 +134,6 @@ else() option(ENABLE_OPENGL "Enable OpenGL" TRUE) endif() -if(USE_SDL2 OR EMSCRIPTEN OR APPLE) - set(ENABLE_GLES1 FALSE) -else() - option(ENABLE_GLES1 "Enable OpenGL ES" FALSE) -endif() - if(APPLE) set(ENABLE_GLES2 FALSE) set(ENABLE_WEBGL1 FALSE) @@ -170,14 +170,6 @@ if(ENABLE_OPENGL3) endif() endif() -if(ENABLE_GLES1) - add_definitions(-D_IRR_COMPILE_WITH_OGLES1_) - set(OPENGLES_DIRECT_LINK TRUE) - if(DEVICE MATCHES "^(WINDOWS|X11)$") - add_definitions(-D_IRR_COMPILE_WITH_EGL_MANAGER_) - endif() -endif() - if(ENABLE_GLES2) add_definitions(-D_IRR_COMPILE_WITH_OGLES2_) if(DEVICE MATCHES "^(WINDOWS|X11)$" OR EMSCRIPTEN) @@ -202,7 +194,6 @@ endif() message(STATUS "Device: ${DEVICE}") message(STATUS "OpenGL: ${ENABLE_OPENGL}") message(STATUS "OpenGL 3: ${ENABLE_OPENGL3}") -message(STATUS "OpenGL ES: ${ENABLE_GLES1}") if (ENABLE_GLES2) message(STATUS "OpenGL ES 2: ON (unified)") else() @@ -218,13 +209,6 @@ find_package(ZLIB REQUIRED) find_package(JPEG REQUIRED) find_package(PNG REQUIRED) -if(ENABLE_GLES1) - # only tested on Android, probably works on Linux (is this needed anywhere else?) - find_library(OPENGLES_LIBRARY NAMES GLESv1_CM REQUIRED) - find_library(EGL_LIBRARY NAMES EGL REQUIRED) - - message(STATUS "Found OpenGLES: ${OPENGLES_LIBRARY}") -endif() if(ENABLE_GLES2) find_package(OpenGLES2 REQUIRED) endif() @@ -314,6 +298,7 @@ set(link_includes set(IRRMESHLOADER CB3DMeshFileLoader.cpp + CGLTFMeshFileLoader.cpp COBJMeshFileLoader.cpp CXMeshFileLoader.cpp ) @@ -326,6 +311,8 @@ add_library(IRRMESHOBJ OBJECT ${IRRMESHLOADER} ) +target_link_libraries(IRRMESHOBJ PUBLIC tiniergltf::tiniergltf) + add_library(IRROBJ OBJECT CBillboardSceneNode.cpp CCameraSceneNode.cpp @@ -337,6 +324,10 @@ add_library(IRROBJ OBJECT 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 @@ -358,14 +349,6 @@ if(ENABLE_OPENGL) ) endif() -if(ENABLE_GLES1) - set(IRRDRVROBJ - ${IRRDRVROBJ} - COGLESDriver.cpp - COGLESExtensionHandler.cpp - ) -endif() - # the unified drivers if(ENABLE_OPENGL3 OR ENABLE_GLES2) @@ -485,6 +468,10 @@ foreach(object_lib target_include_directories(${object_lib} PRIVATE ${link_includes}) # Add objects from object library to main library target_sources(IrrlichtMt PRIVATE $) + + if(BUILD_WITH_TRACY) + target_link_libraries(${object_lib} PRIVATE Tracy::TracyClient) + endif() endforeach() # Alias target provides add_submodule compatibility @@ -501,13 +488,13 @@ target_include_directories(IrrlichtMt # this needs to be here and not in a variable (like link_includes) due to issues # with the generator expressions on at least CMake 3.22, but not 3.28 or later target_link_libraries(IrrlichtMt PRIVATE + tiniergltf::tiniergltf ${ZLIB_LIBRARY} ${JPEG_LIBRARY} ${PNG_LIBRARY} "$<$:SDL2::SDL2>" "$<$:${OPENGL_LIBRARIES}>" - "$<$:${OPENGLES_LIBRARY}>" ${EGL_LIBRARY} # incl. transitive SDL2 dependencies for static linking @@ -523,6 +510,9 @@ target_link_libraries(IrrlichtMt PRIVATE if(WIN32) target_compile_definitions(IrrlichtMt INTERFACE _IRR_WINDOWS_API_) # used in _IRR_DEBUG_BREAK_IF definition in a public header endif() +if(CMAKE_BUILD_TYPE STREQUAL "Debug") + target_compile_definitions(IrrlichtMt INTERFACE _DEBUG) # same +endif() if(APPLE OR ANDROID OR EMSCRIPTEN) target_compile_definitions(IrrlichtMt PUBLIC IRR_MOBILE_PATHS) endif() diff --git a/irr/src/CMemoryFile.h b/irr/src/CMemoryFile.h index 3ce0e8460..83d77cb77 100644 --- a/irr/src/CMemoryFile.h +++ b/irr/src/CMemoryFile.h @@ -17,7 +17,7 @@ namespace io /*! Class for reading from memory. */ -class CMemoryReadFile : public IMemoryReadFile +class CMemoryReadFile final : public IMemoryReadFile { public: //! Constructor diff --git a/irr/src/CMeshManipulator.cpp b/irr/src/CMeshManipulator.cpp index 3309fea3f..2c9d05336 100644 --- a/irr/src/CMeshManipulator.cpp +++ b/irr/src/CMeshManipulator.cpp @@ -67,7 +67,7 @@ void recalculateNormalsT(IMeshBuffer *buffer, bool smooth, bool angleWeighted) core::vector3df weight(1.f, 1.f, 1.f); if (angleWeighted) - weight = irr::scene::getAngleWeight(v1, v2, v3); // writing irr::scene:: necessary for borland + weight = getAngleWeight(v1, v2, v3); buffer->getNormal(idx[i + 0]) += weight.X * normal; buffer->getNormal(idx[i + 1]) += weight.Y * normal; @@ -115,6 +115,21 @@ void CMeshManipulator::recalculateNormals(scene::IMesh *mesh, bool smooth, bool } } +template +void copyVertices(const scene::IVertexBuffer *src, scene::CVertexBuffer *dst) +{ + _IRR_DEBUG_BREAK_IF(T::getType() != src->getType()); + auto *data = static_cast(src->getData()); + dst->Data.assign(data, data + src->getCount()); +} + +static void copyIndices(const scene::IIndexBuffer *src, scene::SIndexBuffer *dst) +{ + _IRR_DEBUG_BREAK_IF(src->getType() != video::EIT_16BIT); + auto *data = static_cast(src->getData()); + dst->Data.assign(data, data + src->getCount()); +} + //! Clones a static IMesh into a modifyable SMesh. // not yet 32bit SMesh *CMeshManipulator::createMeshCopy(scene::IMesh *mesh) const @@ -132,48 +147,24 @@ SMesh *CMeshManipulator::createMeshCopy(scene::IMesh *mesh) const case video::EVT_STANDARD: { SMeshBuffer *buffer = new SMeshBuffer(); buffer->Material = mb->getMaterial(); - const u32 vcount = mb->getVertexCount(); - buffer->Vertices.reallocate(vcount); - video::S3DVertex *vertices = (video::S3DVertex *)mb->getVertices(); - for (u32 i = 0; i < vcount; ++i) - buffer->Vertices.push_back(vertices[i]); - const u32 icount = mb->getIndexCount(); - buffer->Indices.reallocate(icount); - const u16 *indices = mb->getIndices(); - for (u32 i = 0; i < icount; ++i) - buffer->Indices.push_back(indices[i]); + copyVertices(mb->getVertexBuffer(), buffer->Vertices); + copyIndices(mb->getIndexBuffer(), buffer->Indices); clone->addMeshBuffer(buffer); buffer->drop(); } break; case video::EVT_2TCOORDS: { SMeshBufferLightMap *buffer = new SMeshBufferLightMap(); buffer->Material = mb->getMaterial(); - const u32 vcount = mb->getVertexCount(); - buffer->Vertices.reallocate(vcount); - video::S3DVertex2TCoords *vertices = (video::S3DVertex2TCoords *)mb->getVertices(); - for (u32 i = 0; i < vcount; ++i) - buffer->Vertices.push_back(vertices[i]); - const u32 icount = mb->getIndexCount(); - buffer->Indices.reallocate(icount); - const u16 *indices = mb->getIndices(); - for (u32 i = 0; i < icount; ++i) - buffer->Indices.push_back(indices[i]); + copyVertices(mb->getVertexBuffer(), buffer->Vertices); + copyIndices(mb->getIndexBuffer(), buffer->Indices); clone->addMeshBuffer(buffer); buffer->drop(); } break; case video::EVT_TANGENTS: { SMeshBufferTangents *buffer = new SMeshBufferTangents(); buffer->Material = mb->getMaterial(); - const u32 vcount = mb->getVertexCount(); - buffer->Vertices.reallocate(vcount); - video::S3DVertexTangents *vertices = (video::S3DVertexTangents *)mb->getVertices(); - for (u32 i = 0; i < vcount; ++i) - buffer->Vertices.push_back(vertices[i]); - const u32 icount = mb->getIndexCount(); - buffer->Indices.reallocate(icount); - const u16 *indices = mb->getIndices(); - for (u32 i = 0; i < icount; ++i) - buffer->Indices.push_back(indices[i]); + copyVertices(mb->getVertexBuffer(), buffer->Vertices); + copyIndices(mb->getIndexBuffer(), buffer->Indices); clone->addMeshBuffer(buffer); buffer->drop(); } break; diff --git a/irr/src/CMeshSceneNode.cpp b/irr/src/CMeshSceneNode.cpp index 7ff6cad55..030e1fd15 100644 --- a/irr/src/CMeshSceneNode.cpp +++ b/irr/src/CMeshSceneNode.cpp @@ -115,7 +115,6 @@ void CMeshSceneNode::render() // for debug purposes only: if (DebugDataVisible && PassCount == 1) { video::SMaterial m; - m.Lighting = false; m.AntiAliasing = 0; driver->setMaterial(m); diff --git a/irr/src/CNullDriver.cpp b/irr/src/CNullDriver.cpp index 92450e5d7..c7b296b57 100644 --- a/irr/src/CNullDriver.cpp +++ b/irr/src/CNullDriver.cpp @@ -53,7 +53,7 @@ public: //! constructor CNullDriver::CNullDriver(io::IFileSystem *io, const core::dimension2d &screenSize) : SharedRenderTarget(0), CurrentRenderTarget(0), CurrentRenderTargetSize(0, 0), FileSystem(io), MeshManipulator(0), - ViewPort(0, 0, 0, 0), ScreenSize(screenSize), PrimitivesDrawn(0), MinVertexCountForVBO(500), + ViewPort(0, 0, 0, 0), ScreenSize(screenSize), MinVertexCountForVBO(500), TextureCreationFlags(0), OverrideMaterial2DEnabled(false), AllowZWriteOnTransparent(false) { #ifdef _DEBUG @@ -64,7 +64,6 @@ CNullDriver::CNullDriver(io::IFileSystem *io, const core::dimension2d &scre DriverAttributes->addInt("MaxTextures", MATERIAL_MAX_TEXTURES); DriverAttributes->addInt("MaxSupportedTextures", MATERIAL_MAX_TEXTURES); DriverAttributes->addInt("MaxAnisotropy", 1); - // DriverAttributes->addInt("MaxUserClipPlanes", 0); // DriverAttributes->addInt("MaxAuxBuffers", 0); DriverAttributes->addInt("MaxMultipleRenderTargets", 1); DriverAttributes->addInt("MaxIndices", -1); @@ -105,7 +104,6 @@ CNullDriver::CNullDriver(io::IFileSystem *io, const core::dimension2d &scre FeatureEnabled[i] = true; InitMaterial2D.AntiAliasing = video::EAAM_OFF; - InitMaterial2D.Lighting = false; InitMaterial2D.ZWriteEnable = video::EZW_OFF; InitMaterial2D.ZBuffer = video::ECFN_DISABLED; InitMaterial2D.UseMipMaps = false; @@ -223,13 +221,13 @@ void CNullDriver::deleteAllTextures() bool CNullDriver::beginScene(u16 clearFlag, SColor clearColor, f32 clearDepth, u8 clearStencil, const SExposedVideoData &videoData, core::rect *sourceRect) { - PrimitivesDrawn = 0; + FrameStats = {}; return true; } bool CNullDriver::endScene() { - FPSCounter.registerFrame(os::Timer::getRealTime(), PrimitivesDrawn); + FPSCounter.registerFrame(os::Timer::getRealTime()); updateAllHardwareBuffers(); updateAllOcclusionQueries(); return true; @@ -361,7 +359,7 @@ ITexture *CNullDriver::addTextureCubemap(const io::path &name, IImage *imagePosX ITexture *t = 0; - core::array imageArray(6); + std::vector imageArray; imageArray.push_back(imagePosX); imageArray.push_back(imageNegX); imageArray.push_back(imagePosY); @@ -391,7 +389,7 @@ ITexture *CNullDriver::addTextureCubemap(const irr::u32 sideLen, const io::path return 0; } - core::array imageArray(6); + std::vector imageArray; for (int i = 0; i < 6; ++i) imageArray.push_back(new CImage(format, core::dimension2du(sideLen, sideLen))); @@ -548,7 +546,7 @@ ITexture *CNullDriver::createDeviceDependentTexture(const io::path &name, IImage return dummy; } -ITexture *CNullDriver::createDeviceDependentTextureCubemap(const io::path &name, const core::array &image) +ITexture *CNullDriver::createDeviceDependentTextureCubemap(const io::path &name, const std::vector &image) { return new SDummyTexture(name, ETT_CUBEMAP); } @@ -606,7 +604,8 @@ void CNullDriver::drawVertexPrimitiveList(const void *vertices, u32 vertexCount, { if ((iType == EIT_16BIT) && (vertexCount > 65536)) os::Printer::log("Too many vertices for 16bit index type, render artifacts may occur."); - PrimitivesDrawn += primitiveCount; + FrameStats.Drawcalls++; + FrameStats.PrimitivesDrawn += primitiveCount; } //! draws a vertex primitive list in 2d @@ -614,7 +613,8 @@ void CNullDriver::draw2DVertexPrimitiveList(const void *vertices, u32 vertexCoun { if ((iType == EIT_16BIT) && (vertexCount > 65536)) os::Printer::log("Too many vertices for 16bit index type, render artifacts may occur."); - PrimitivesDrawn += primitiveCount; + FrameStats.Drawcalls++; + FrameStats.PrimitivesDrawn += primitiveCount; } //! Draws a 3d line. @@ -744,12 +744,9 @@ s32 CNullDriver::getFPS() const return FPSCounter.getFPS(); } -//! returns amount of primitives (mostly triangles) were drawn in the last frame. -//! very useful method for statistics. -u32 CNullDriver::getPrimitiveCountDrawn(u32 param) const +SFrameStats CNullDriver::getFrameStats() const { - return (0 == param) ? FPSCounter.getPrimitive() : (1 == param) ? FPSCounter.getPrimitiveAverage() - : FPSCounter.getPrimitiveTotal(); + return FrameStats; } //! Sets the dynamic ambient light color. The default color is @@ -913,17 +910,17 @@ bool CNullDriver::checkImage(IImage *image) const return true; } -bool CNullDriver::checkImage(const core::array &image) const +bool CNullDriver::checkImage(const std::vector &image) const { - if (!image.size()) + if (image.empty()) return false; ECOLOR_FORMAT lastFormat = image[0]->getColorFormat(); - core::dimension2d lastSize = image[0]->getDimension(); + auto lastSize = image[0]->getDimension(); - for (u32 i = 0; i < image.size(); ++i) { + for (size_t i = 0; i < image.size(); ++i) { ECOLOR_FORMAT format = image[i]->getColorFormat(); - core::dimension2d size = image[i]->getDimension(); + auto size = image[i]->getDimension(); if (!checkImage(image[i])) return false; @@ -1113,48 +1110,57 @@ void CNullDriver::getFog(SColor &color, E_FOG_TYPE &fogType, f32 &start, f32 &en rangeFog = RangeFog; } -//! Draws a mesh buffer -void CNullDriver::drawMeshBuffer(const scene::IMeshBuffer *mb) +void CNullDriver::drawBuffers(const scene::IVertexBuffer *vb, + const scene::IIndexBuffer *ib, u32 primCount, + scene::E_PRIMITIVE_TYPE pType) { - if (!mb) + if (!vb || !ib) return; - // IVertexBuffer and IIndexBuffer later - SHWBufferLink *HWBuffer = getBufferLink(mb); + if (vb->getHWBuffer() || ib->getHWBuffer()) { + // subclass is supposed to override this if it supports hw buffers + _IRR_DEBUG_BREAK_IF(1); + } - if (HWBuffer) - drawHardwareBuffer(HWBuffer); - else - drawVertexPrimitiveList(mb->getVertices(), mb->getVertexCount(), mb->getIndices(), mb->getPrimitiveCount(), mb->getVertexType(), mb->getPrimitiveType(), mb->getIndexType()); + drawVertexPrimitiveList(vb->getData(), vb->getCount(), ib->getData(), + primCount, vb->getType(), pType, ib->getType()); } //! Draws the normals of a mesh buffer void CNullDriver::drawMeshBufferNormals(const scene::IMeshBuffer *mb, f32 length, SColor color) { const u32 count = mb->getVertexCount(); - const bool normalize = mb->getMaterial().NormalizeNormals; - for (u32 i = 0; i < count; ++i) { - core::vector3df normalizedNormal = mb->getNormal(i); - if (normalize) - normalizedNormal.normalize(); - + core::vector3df normal = mb->getNormal(i); const core::vector3df &pos = mb->getPosition(i); - draw3DLine(pos, pos + (normalizedNormal * length), color); + draw3DLine(pos, pos + (normal * length), color); } } -CNullDriver::SHWBufferLink *CNullDriver::getBufferLink(const scene::IMeshBuffer *mb) +CNullDriver::SHWBufferLink *CNullDriver::getBufferLink(const scene::IVertexBuffer *vb) { - if (!mb || !isHardwareBufferRecommend(mb)) + if (!vb || !isHardwareBufferRecommend(vb)) return 0; // search for hardware links - SHWBufferLink *HWBuffer = reinterpret_cast(mb->getHWBuffer()); + SHWBufferLink *HWBuffer = reinterpret_cast(vb->getHWBuffer()); if (HWBuffer) return HWBuffer; - return createHardwareBuffer(mb); // no hardware links, and mesh wants one, create it + return createHardwareBuffer(vb); // no hardware links, and mesh wants one, create it +} + +CNullDriver::SHWBufferLink *CNullDriver::getBufferLink(const scene::IIndexBuffer *ib) +{ + if (!ib || !isHardwareBufferRecommend(ib)) + return 0; + + // search for hardware links + SHWBufferLink *HWBuffer = reinterpret_cast(ib->getHWBuffer()); + if (HWBuffer) + return HWBuffer; + + return createHardwareBuffer(ib); // no hardware links, and mesh wants one, create it } //! Update all hardware buffers, remove unused ones @@ -1165,8 +1171,13 @@ void CNullDriver::updateAllHardwareBuffers() SHWBufferLink *Link = *it; ++it; - if (!Link->MeshBuffer || Link->MeshBuffer->getReferenceCount() == 1) - deleteHardwareBuffer(Link); + if (Link->IsVertex) { + if (!Link->VertexBuffer || Link->VertexBuffer->getReferenceCount() == 1) + deleteHardwareBuffer(Link); + } else { + if (!Link->IndexBuffer || Link->IndexBuffer->getReferenceCount() == 1) + deleteHardwareBuffer(Link); + } } } @@ -1178,12 +1189,20 @@ void CNullDriver::deleteHardwareBuffer(SHWBufferLink *HWBuffer) delete HWBuffer; } -//! Remove hardware buffer -void CNullDriver::removeHardwareBuffer(const scene::IMeshBuffer *mb) +void CNullDriver::removeHardwareBuffer(const scene::IVertexBuffer *vb) { - if (!mb) + if (!vb) return; - SHWBufferLink *HWBuffer = reinterpret_cast(mb->getHWBuffer()); + SHWBufferLink *HWBuffer = reinterpret_cast(vb->getHWBuffer()); + if (HWBuffer) + deleteHardwareBuffer(HWBuffer); +} + +void CNullDriver::removeHardwareBuffer(const scene::IIndexBuffer *ib) +{ + if (!ib) + return; + SHWBufferLink *HWBuffer = reinterpret_cast(ib->getHWBuffer()); if (HWBuffer) deleteHardwareBuffer(HWBuffer); } @@ -1195,12 +1214,24 @@ void CNullDriver::removeAllHardwareBuffers() deleteHardwareBuffer(HWBufferList.front()); } -bool CNullDriver::isHardwareBufferRecommend(const scene::IMeshBuffer *mb) +bool CNullDriver::isHardwareBufferRecommend(const scene::IVertexBuffer *vb) { - if (!mb || (mb->getHardwareMappingHint_Index() == scene::EHM_NEVER && mb->getHardwareMappingHint_Vertex() == scene::EHM_NEVER)) + if (!vb || vb->getHardwareMappingHint() == scene::EHM_NEVER) return false; - if (mb->getVertexCount() < MinVertexCountForVBO) + if (vb->getCount() < MinVertexCountForVBO) + return false; + + return true; +} + +bool CNullDriver::isHardwareBufferRecommend(const scene::IIndexBuffer *ib) +{ + if (!ib || ib->getHardwareMappingHint() == scene::EHM_NEVER) + return false; + + // This is a bit stupid + if (ib->getCount() < MinVertexCountForVBO * 3) return false; return true; @@ -1269,10 +1300,8 @@ void CNullDriver::runOcclusionQuery(scene::ISceneNode *node, bool visible) OcclusionQueries[index].Run = 0; if (!visible) { SMaterial mat; - mat.Lighting = false; mat.AntiAliasing = 0; mat.ColorMask = ECP_NONE; - mat.GouraudShading = false; mat.ZWriteEnable = EZW_OFF; setMaterial(mat); } @@ -1699,22 +1728,6 @@ IVideoDriver *createNullDriver(io::IFileSystem *io, const core::dimension2d return nullDriver; } -//! Set/unset a clipping plane. -//! There are at least 6 clipping planes available for the user to set at will. -//! \param index: The plane index. Must be between 0 and MaxUserClipPlanes. -//! \param plane: The plane itself. -//! \param enable: If true, enable the clipping plane else disable it. -bool CNullDriver::setClipPlane(u32 index, const core::plane3df &plane, bool enable) -{ - return false; -} - -//! Enable/disable a clipping plane. -void CNullDriver::enableClipPlane(u32 index, bool enable) -{ - // not necessary -} - void CNullDriver::setMinHardwareBufferVertexCount(u32 count) { MinVertexCountForVBO = count; diff --git a/irr/src/CNullDriver.h b/irr/src/CNullDriver.h index d47212c0f..b8d45118f 100644 --- a/irr/src/CNullDriver.h +++ b/irr/src/CNullDriver.h @@ -195,9 +195,7 @@ public: // get current frames per second value s32 getFPS() const override; - //! returns amount of primitives (mostly triangles) were drawn in the last frame. - //! very useful method for statistics. - u32 getPrimitiveCountDrawn(u32 param = 0) const override; + SFrameStats getFrameStats() const override; //! \return Returns the name of the video driver. Example: In case of the DIRECT3D8 //! driver, it would return "Direct3D8.1". @@ -271,8 +269,18 @@ public: const core::position2d &pos, const core::dimension2d &size) override; - //! Draws a mesh buffer - void drawMeshBuffer(const scene::IMeshBuffer *mb) override; + void drawMeshBuffer(const scene::IMeshBuffer *mb) override + { + if (!mb) + return; + drawBuffers(mb->getVertexBuffer(), mb->getIndexBuffer(), + mb->getPrimitiveCount(), mb->getPrimitiveType()); + } + + // Note: this should handle hw buffers + virtual void drawBuffers(const scene::IVertexBuffer *vb, + const scene::IIndexBuffer *ib, u32 primCount, + scene::E_PRIMITIVE_TYPE pType = scene::EPT_TRIANGLES) override; //! Draws the normals of a mesh buffer virtual void drawMeshBufferNormals(const scene::IMeshBuffer *mb, f32 length = 10.f, @@ -285,53 +293,70 @@ public: } protected: + /// Links a hardware buffer to either a vertex or index buffer struct SHWBufferLink { - SHWBufferLink(const scene::IMeshBuffer *_MeshBuffer) : - MeshBuffer(_MeshBuffer), - ChangedID_Vertex(0), ChangedID_Index(0), - Mapped_Vertex(scene::EHM_NEVER), Mapped_Index(scene::EHM_NEVER) + SHWBufferLink(const scene::IVertexBuffer *vb) : + VertexBuffer(vb), ChangedID(0), IsVertex(true) { - if (MeshBuffer) { - MeshBuffer->grab(); - MeshBuffer->setHWBuffer(reinterpret_cast(this)); + if (VertexBuffer) { + VertexBuffer->grab(); + VertexBuffer->setHWBuffer(this); + } + } + SHWBufferLink(const scene::IIndexBuffer *ib) : + IndexBuffer(ib), ChangedID(0), IsVertex(false) + { + if (IndexBuffer) { + IndexBuffer->grab(); + IndexBuffer->setHWBuffer(this); } } virtual ~SHWBufferLink() { - if (MeshBuffer) { - MeshBuffer->setHWBuffer(NULL); - MeshBuffer->drop(); + if (IsVertex && VertexBuffer) { + VertexBuffer->setHWBuffer(nullptr); + VertexBuffer->drop(); + } else if (!IsVertex && IndexBuffer) { + IndexBuffer->setHWBuffer(nullptr); + IndexBuffer->drop(); } } - const scene::IMeshBuffer *MeshBuffer; - u32 ChangedID_Vertex; - u32 ChangedID_Index; - scene::E_HARDWARE_MAPPING Mapped_Vertex; - scene::E_HARDWARE_MAPPING Mapped_Index; - std::list::iterator listPosition; + union { + const scene::IVertexBuffer *VertexBuffer; + const scene::IIndexBuffer *IndexBuffer; + }; + u32 ChangedID; + bool IsVertex; + std::list::iterator listPosition; }; - //! Gets hardware buffer link from a meshbuffer (may create or update buffer) - virtual SHWBufferLink *getBufferLink(const scene::IMeshBuffer *mb); + //! Gets hardware buffer link from a vertex buffer (may create or update buffer) + virtual SHWBufferLink *getBufferLink(const scene::IVertexBuffer *mb); + + //! Gets hardware buffer link from a index buffer (may create or update buffer) + virtual SHWBufferLink *getBufferLink(const scene::IIndexBuffer *mb); //! updates hardware buffer if needed (only some drivers can) virtual bool updateHardwareBuffer(SHWBufferLink *HWBuffer) { return false; } - //! Draw hardware buffer (only some drivers can) - virtual void drawHardwareBuffer(SHWBufferLink *HWBuffer) {} - //! Delete hardware buffer virtual void deleteHardwareBuffer(SHWBufferLink *HWBuffer); - //! Create hardware buffer from mesh (only some drivers can) - virtual SHWBufferLink *createHardwareBuffer(const scene::IMeshBuffer *mb) { return 0; } + //! Create hardware buffer from vertex buffer + virtual SHWBufferLink *createHardwareBuffer(const scene::IVertexBuffer *vb) { return 0; } + + //! Create hardware buffer from index buffer + virtual SHWBufferLink *createHardwareBuffer(const scene::IIndexBuffer *ib) { return 0; } public: //! Remove hardware buffer - void removeHardwareBuffer(const scene::IMeshBuffer *mb) override; + void removeHardwareBuffer(const scene::IVertexBuffer *vb) override; + + //! Remove hardware buffer + void removeHardwareBuffer(const scene::IIndexBuffer *ib) override; //! Remove all hardware buffers void removeAllHardwareBuffers() override; @@ -339,8 +364,11 @@ public: //! Update all hardware buffers, remove unused ones virtual void updateAllHardwareBuffers(); - //! is vbo recommended on this mesh? - virtual bool isHardwareBufferRecommend(const scene::IMeshBuffer *mb); + //! is vbo recommended? + virtual bool isHardwareBufferRecommend(const scene::IVertexBuffer *mb); + + //! is vbo recommended? + virtual bool isHardwareBufferRecommend(const scene::IIndexBuffer *mb); //! Create occlusion query. /** Use node for identification and mesh for occlusion test. */ @@ -494,19 +522,6 @@ public: //! looks if the image is already loaded video::ITexture *findTexture(const io::path &filename) override; - //! Set/unset a clipping plane. - //! There are at least 6 clipping planes available for the user to set at will. - //! \param index: The plane index. Must be between 0 and MaxUserClipPlanes. - //! \param plane: The plane itself. - //! \param enable: If true, enable the clipping plane else disable it. - bool setClipPlane(u32 index, const core::plane3df &plane, bool enable = false) override; - - //! Enable/disable a clipping plane. - //! There are at least 6 clipping planes available for the user to set at will. - //! \param index: The plane index. Must be between 0 and MaxUserClipPlanes. - //! \param enable: If true, enable the clipping plane else disable it. - void enableClipPlane(u32 index, bool enable) override; - //! Returns the graphics card vendor name. core::stringc getVendorInfo() override { return "Not available on this driver."; } @@ -551,8 +566,6 @@ public: virtual void convertColor(const void *sP, ECOLOR_FORMAT sF, s32 sN, void *dP, ECOLOR_FORMAT dF) const override; - bool checkDriverReset() override { return false; } - protected: //! deletes all textures void deleteAllTextures(); @@ -565,14 +578,14 @@ protected: virtual ITexture *createDeviceDependentTexture(const io::path &name, IImage *image); - virtual ITexture *createDeviceDependentTextureCubemap(const io::path &name, const core::array &image); + virtual ITexture *createDeviceDependentTextureCubemap(const io::path &name, const std::vector &image); //! checks triangle count and print warning if wrong bool checkPrimitiveCount(u32 prmcnt) const; bool checkImage(IImage *image) const; - bool checkImage(const core::array &image) const; + bool checkImage(const std::vector &image) const; // adds a material renderer and drops it afterwards. To be used for internal creation s32 addAndDropMaterialRenderer(IMaterialRenderer *m); @@ -583,6 +596,12 @@ protected: // prints renderer version void printVersion(); + inline void accountHWBufferUpload(u32 size) + { + FrameStats.HWBuffersUploaded++; + FrameStats.HWBuffersUploadedSize += size; + } + inline bool getWriteZBuffer(const SMaterial &material) const { switch (material.ZWriteEnable) { @@ -709,8 +728,8 @@ protected: core::matrix4 TransformationMatrix; CFPSCounter FPSCounter; + SFrameStats FrameStats; - u32 PrimitivesDrawn; u32 MinVertexCountForVBO; u32 TextureCreationFlags; diff --git a/irr/src/COBJMeshFileLoader.cpp b/irr/src/COBJMeshFileLoader.cpp index 4c5a5328d..97e90c322 100644 --- a/irr/src/COBJMeshFileLoader.cpp +++ b/irr/src/COBJMeshFileLoader.cpp @@ -182,7 +182,7 @@ IAnimatedMesh *COBJMeshFileLoader::createMesh(io::IReadFile *file) mtlChanged = false; } if (currMtl) - v.Color = currMtl->Meshbuffer->Material.DiffuseColor; + v.Color = video::SColorf(0.8f, 0.8f, 0.8f, 1.0f).toSColor(); // get all vertices data in this face (current line of obj file) const core::stringc wordBuffer = copyLine(bufPtr, bufEnd); @@ -192,6 +192,7 @@ IAnimatedMesh *COBJMeshFileLoader::createMesh(io::IReadFile *file) faceCorners.set_used(0); // fast clear // read in all vertices + auto &Vertices = currMtl->Meshbuffer->Vertices->Data; linePtr = goNextWord(linePtr, endPtr); while (0 != linePtr[0]) { // Array to communicate with retrieveVertexIndices() @@ -228,8 +229,8 @@ IAnimatedMesh *COBJMeshFileLoader::createMesh(io::IReadFile *file) if (n != currMtl->VertMap.end()) { vertLocation = n->second; } else { - currMtl->Meshbuffer->Vertices.push_back(v); - vertLocation = currMtl->Meshbuffer->Vertices.size() - 1; + Vertices.push_back(v); + vertLocation = Vertices.size() - 1; currMtl->VertMap.emplace(v, vertLocation); } @@ -247,15 +248,16 @@ IAnimatedMesh *COBJMeshFileLoader::createMesh(io::IReadFile *file) } // triangulate the face + auto &Indices = currMtl->Meshbuffer->Indices->Data; const int c = faceCorners[0]; for (u32 i = 1; i < faceCorners.size() - 1; ++i) { // Add a triangle const int a = faceCorners[i + 1]; const int b = faceCorners[i]; if (a != b && a != c && b != c) { // ignore degenerated faces. We can get them when we merge vertices above in the VertMap. - currMtl->Meshbuffer->Indices.push_back(a); - currMtl->Meshbuffer->Indices.push_back(b); - currMtl->Meshbuffer->Indices.push_back(c); + Indices.push_back(a); + Indices.push_back(b); + Indices.push_back(c); } else { ++degeneratedFaces; } diff --git a/irr/src/COBJMeshFileLoader.h b/irr/src/COBJMeshFileLoader.h index 63e768e4f..467392a3e 100644 --- a/irr/src/COBJMeshFileLoader.h +++ b/irr/src/COBJMeshFileLoader.h @@ -43,10 +43,6 @@ private: RecalculateNormals(false) { Meshbuffer = new SMeshBuffer(); - Meshbuffer->Material.Shininess = 0.0f; - Meshbuffer->Material.AmbientColor = video::SColorf(0.2f, 0.2f, 0.2f, 1.0f).toSColor(); - Meshbuffer->Material.DiffuseColor = video::SColorf(0.8f, 0.8f, 0.8f, 1.0f).toSColor(); - Meshbuffer->Material.SpecularColor = video::SColorf(1.0f, 1.0f, 1.0f, 1.0f).toSColor(); } SObjMtl(const SObjMtl &o) : diff --git a/irr/src/COGLESCommon.h b/irr/src/COGLESCommon.h deleted file mode 100644 index 1d439546a..000000000 --- a/irr/src/COGLESCommon.h +++ /dev/null @@ -1,122 +0,0 @@ -// Copyright (C) 2015 Patryk Nadrowski -// 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_OGLES1_ - -#if defined(_IRR_COMPILE_WITH_IOS_DEVICE_) -#include -#include -#elif defined(_IRR_OGLES1_USE_KHRONOS_API_HEADERS_) -#include -#include -typedef char GLchar; -#else // or only when defined(_IRR_COMPILE_WITH_ANDROID_DEVICE_) ? -#include -#include -#include -#endif - -#ifndef GL_BGRA -#define GL_BGRA 0x80E1; -#endif - -// Blending definitions. - -#if defined(GL_OES_blend_subtract) -#define GL_FUNC_ADD GL_FUNC_ADD_OES -#else -#define GL_FUNC_ADD 0 -#endif - -// FBO definitions. - -#ifdef GL_OES_framebuffer_object -#define GL_NONE 0 // iOS has missing definition of GL_NONE_OES -#define GL_FRAMEBUFFER GL_FRAMEBUFFER_OES -#define GL_DEPTH_COMPONENT16 GL_DEPTH_COMPONENT16_OES -#define GL_COLOR_ATTACHMENT0 GL_COLOR_ATTACHMENT0_OES -#define GL_DEPTH_ATTACHMENT GL_DEPTH_ATTACHMENT_OES -#define GL_STENCIL_ATTACHMENT GL_STENCIL_ATTACHMENT_OES -#define GL_FRAMEBUFFER_COMPLETE GL_FRAMEBUFFER_COMPLETE_OES -#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 1 -#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 2 -#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES -#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS GL_FRAMEBUFFER_INCOMPLETE_FORMATS_OES -#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_OES -#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_OES -#define GL_FRAMEBUFFER_UNSUPPORTED GL_FRAMEBUFFER_UNSUPPORTED_OES -#else -#define GL_NONE 0 -#define GL_FRAMEBUFFER 0 -#define GL_DEPTH_COMPONENT16 0 -#define GL_COLOR_ATTACHMENT0 0 -#define GL_DEPTH_ATTACHMENT 0 -#define GL_STENCIL_ATTACHMENT 0 -#define GL_FRAMEBUFFER_COMPLETE 0 -#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 1 -#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 2 -#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 3 -#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS 4 -#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS 5 -#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 6 -#define GL_FRAMEBUFFER_UNSUPPORTED 7 -#endif - -#define GL_DEPTH_COMPONENT 0x1902 - -// Texture definitions. - -#ifdef GL_OES_texture_cube_map -#define GL_TEXTURE_CUBE_MAP GL_TEXTURE_CUBE_MAP_OES -#define GL_TEXTURE_CUBE_MAP_POSITIVE_X GL_TEXTURE_CUBE_MAP_POSITIVE_X_OES -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X GL_TEXTURE_CUBE_MAP_NEGATIVE_X_OES -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y GL_TEXTURE_CUBE_MAP_POSITIVE_Y_OES -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_OES -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z GL_TEXTURE_CUBE_MAP_POSITIVE_Z_OES -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_OES -#else -#define GL_TEXTURE_CUBE_MAP 0 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0 -#endif - -// to check if this header is in the current compile unit (different GL implementation used different "GLCommon" headers in Irrlicht -#define IRR_COMPILE_GLES_COMMON - -// macro used with COGLES1Driver -#define TEST_GL_ERROR(cls) (cls)->testGLError(__LINE__) - -namespace irr -{ -namespace video -{ - -// Forward declarations. - -class COpenGLCoreFeature; - -template -class COpenGLCoreTexture; - -template -class COpenGLCoreRenderTarget; - -template -class COpenGLCoreCacheHandler; - -class COGLES1Driver; -typedef COpenGLCoreTexture COGLES1Texture; -typedef COpenGLCoreRenderTarget COGLES1RenderTarget; -typedef COpenGLCoreCacheHandler COGLES1CacheHandler; - -} -} - -#endif diff --git a/irr/src/COGLESDriver.cpp b/irr/src/COGLESDriver.cpp deleted file mode 100644 index 524aedd50..000000000 --- a/irr/src/COGLESDriver.cpp +++ /dev/null @@ -1,2397 +0,0 @@ -// Copyright (C) 2002-2008 Nikolaus Gebhardt -// This file is part of the "Irrlicht Engine". -// For conditions of distribution and use, see copyright notice in irrlicht.h - -#include "COGLESDriver.h" -#include -#include "CNullDriver.h" -#include "IContextManager.h" - -#ifdef _IRR_COMPILE_WITH_OGLES1_ - -#include "COpenGLCoreTexture.h" -#include "COpenGLCoreRenderTarget.h" -#include "COpenGLCoreCacheHandler.h" - -#include "COGLESMaterialRenderer.h" - -#include "EVertexAttributes.h" -#include "CImage.h" -#include "os.h" - -namespace irr -{ -namespace video -{ - -COGLES1Driver::COGLES1Driver(const SIrrlichtCreationParameters ¶ms, io::IFileSystem *io, IContextManager *contextManager) : - CNullDriver(io, params.WindowSize), COGLES1ExtensionHandler(), CacheHandler(0), CurrentRenderMode(ERM_NONE), - ResetRenderStates(true), Transformation3DChanged(true), AntiAlias(params.AntiAlias), - ColorFormat(ECF_R8G8B8), Params(params), ContextManager(contextManager) -{ -#ifdef _DEBUG - setDebugName("COGLESDriver"); -#endif - - core::dimension2d windowSize(0, 0); - - if (!ContextManager) - return; - - ContextManager->grab(); - ContextManager->generateSurface(); - ContextManager->generateContext(); - ExposedData = ContextManager->getContext(); - ContextManager->activateContext(ExposedData, false); - - windowSize = params.WindowSize; - - genericDriverInit(windowSize, params.Stencilbuffer); -} - -COGLES1Driver::~COGLES1Driver() -{ - deleteMaterialRenders(); - - CacheHandler->getTextureCache().clear(); - - removeAllRenderTargets(); - deleteAllTextures(); - removeAllOcclusionQueries(); - removeAllHardwareBuffers(); - - delete CacheHandler; - - if (ContextManager) { - ContextManager->destroyContext(); - ContextManager->destroySurface(); - ContextManager->terminate(); - ContextManager->drop(); - } -} - -// ----------------------------------------------------------------------- -// METHODS -// ----------------------------------------------------------------------- - -bool COGLES1Driver::genericDriverInit(const core::dimension2d &screenSize, bool stencilBuffer) -{ - Name = glGetString(GL_VERSION); - printVersion(); - - // print renderer information - VendorName = glGetString(GL_VENDOR); - os::Printer::log(VendorName.c_str(), ELL_INFORMATION); - - // load extensions - initExtensions(); - - // reset cache handler - delete CacheHandler; - CacheHandler = new COGLES1CacheHandler(this); - - StencilBuffer = stencilBuffer; - - DriverAttributes->setAttribute("MaxTextures", (s32)Feature.MaxTextureUnits); - DriverAttributes->setAttribute("MaxSupportedTextures", (s32)Feature.MaxTextureUnits); - DriverAttributes->setAttribute("MaxAnisotropy", MaxAnisotropy); - DriverAttributes->setAttribute("MaxIndices", (s32)MaxIndices); - DriverAttributes->setAttribute("MaxTextureSize", (s32)MaxTextureSize); - DriverAttributes->setAttribute("MaxTextureLODBias", MaxTextureLODBias); - DriverAttributes->setAttribute("Version", Version); - DriverAttributes->setAttribute("AntiAlias", AntiAlias); - - glPixelStorei(GL_PACK_ALIGNMENT, 1); - - UserClipPlane.reallocate(MaxUserClipPlanes); - UserClipPlaneEnabled.resize(MaxUserClipPlanes); - - for (s32 i = 0; i < MaxUserClipPlanes; ++i) { - UserClipPlane.push_back(core::plane3df()); - UserClipPlaneEnabled[i] = false; - } - - for (s32 i = 0; i < ETS_COUNT; ++i) - setTransform(static_cast(i), core::IdentityMatrix); - - setAmbientLight(SColorf(0.0f, 0.0f, 0.0f, 0.0f)); - glClearDepthf(1.0f); - - glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST); - glHint(GL_GENERATE_MIPMAP_HINT, GL_FASTEST); - glDepthFunc(GL_LEQUAL); - glFrontFace(GL_CW); - glAlphaFunc(GL_GREATER, 0.f); - - // create material renderers - createMaterialRenderers(); - - // set the renderstates - setRenderStates3DMode(); - - // set fog mode - setFog(FogColor, FogType, FogStart, FogEnd, FogDensity, PixelFog, RangeFog); - - // create matrix for flipping textures - TextureFlipMatrix.buildTextureTransform(0.0f, core::vector2df(0, 0), core::vector2df(0, 1.0f), core::vector2df(1.0f, -1.0f)); - - // We need to reset once more at the beginning of the first rendering. - // This fixes problems with intermediate changes to the material during texture load. - ResetRenderStates = true; - - testGLError(__LINE__); - - return true; -} - -void COGLES1Driver::createMaterialRenderers() -{ - addAndDropMaterialRenderer(new COGLES1MaterialRenderer_SOLID(this)); - addAndDropMaterialRenderer(new COGLES1MaterialRenderer_TRANSPARENT_ALPHA_CHANNEL(this)); - addAndDropMaterialRenderer(new COGLES1MaterialRenderer_TRANSPARENT_ALPHA_CHANNEL_REF(this)); - addAndDropMaterialRenderer(new COGLES1MaterialRenderer_TRANSPARENT_VERTEX_ALPHA(this)); - addAndDropMaterialRenderer(new COGLES1MaterialRenderer_ONETEXTURE_BLEND(this)); -} - -bool COGLES1Driver::beginScene(u16 clearFlag, SColor clearColor, f32 clearDepth, u8 clearStencil, const SExposedVideoData &videoData, core::rect *sourceRect) -{ - CNullDriver::beginScene(clearFlag, clearColor, clearDepth, clearStencil, videoData, sourceRect); - - if (ContextManager) - ContextManager->activateContext(videoData, true); - - clearBuffers(clearFlag, clearColor, clearDepth, clearStencil); - - return true; -} - -bool COGLES1Driver::endScene() -{ - CNullDriver::endScene(); - - glFlush(); - - if (ContextManager) - return ContextManager->swapBuffers(); - - return false; -} - -//! Returns the transformation set by setTransform -const core::matrix4 &COGLES1Driver::getTransform(E_TRANSFORMATION_STATE state) const -{ - return Matrices[state]; -} - -//! sets transformation -void COGLES1Driver::setTransform(E_TRANSFORMATION_STATE state, const core::matrix4 &mat) -{ - Matrices[state] = mat; - Transformation3DChanged = true; - - switch (state) { - case ETS_VIEW: - case ETS_WORLD: { - // OGLES1 only has a model matrix, view and world is not existent. so lets fake these two. - glMatrixMode(GL_MODELVIEW); - glLoadMatrixf((Matrices[ETS_VIEW] * Matrices[ETS_WORLD]).pointer()); - // we have to update the clip planes to the latest view matrix - for (u32 i = 0; i < MaxUserClipPlanes; ++i) - if (UserClipPlaneEnabled[i]) - uploadClipPlane(i); - } break; - case ETS_PROJECTION: { - GLfloat glmat[16]; - getGLMatrix(glmat, mat); - // flip z to compensate OGLES1s right-hand coordinate system - glmat[12] *= -1.0f; - glMatrixMode(GL_PROJECTION); - glLoadMatrixf(glmat); - } break; - default: - break; - } -} - -bool COGLES1Driver::updateVertexHardwareBuffer(SHWBufferLink_opengl *HWBuffer) -{ - if (!HWBuffer) - return false; - - const scene::IMeshBuffer *mb = HWBuffer->MeshBuffer; - const void *vertices = mb->getVertices(); - const u32 vertexCount = mb->getVertexCount(); - const E_VERTEX_TYPE vType = mb->getVertexType(); - const u32 vertexSize = getVertexPitchFromType(vType); - - // buffer vertex data, and convert colours... - core::array buffer(vertexSize * vertexCount); - buffer.set_used(vertexSize * vertexCount); - memcpy(buffer.pointer(), vertices, vertexSize * vertexCount); - - // in order to convert the colors into opengl format (RGBA) - switch (vType) { - case EVT_STANDARD: { - S3DVertex *pb = reinterpret_cast(buffer.pointer()); - const S3DVertex *po = static_cast(vertices); - for (u32 i = 0; i < vertexCount; i++) { - po[i].Color.toOpenGLColor((u8 *)&(pb[i].Color.color)); - } - } break; - case EVT_2TCOORDS: { - S3DVertex2TCoords *pb = reinterpret_cast(buffer.pointer()); - const S3DVertex2TCoords *po = static_cast(vertices); - for (u32 i = 0; i < vertexCount; i++) { - po[i].Color.toOpenGLColor((u8 *)&(pb[i].Color.color)); - } - } break; - case EVT_TANGENTS: { - S3DVertexTangents *pb = reinterpret_cast(buffer.pointer()); - const S3DVertexTangents *po = static_cast(vertices); - for (u32 i = 0; i < vertexCount; i++) { - po[i].Color.toOpenGLColor((u8 *)&(pb[i].Color.color)); - } - } break; - default: { - return false; - } - } - - // get or create buffer - bool newBuffer = false; - if (!HWBuffer->vbo_verticesID) { - glGenBuffers(1, &HWBuffer->vbo_verticesID); - if (!HWBuffer->vbo_verticesID) - return false; - newBuffer = true; - } else if (HWBuffer->vbo_verticesSize < vertexCount * vertexSize) { - newBuffer = true; - } - - glBindBuffer(GL_ARRAY_BUFFER, HWBuffer->vbo_verticesID); - - // copy data to graphics card - if (!newBuffer) - glBufferSubData(GL_ARRAY_BUFFER, 0, vertexCount * vertexSize, buffer.const_pointer()); - else { - HWBuffer->vbo_verticesSize = vertexCount * vertexSize; - - if (HWBuffer->Mapped_Vertex == scene::EHM_STATIC) - glBufferData(GL_ARRAY_BUFFER, vertexCount * vertexSize, buffer.const_pointer(), GL_STATIC_DRAW); - else - glBufferData(GL_ARRAY_BUFFER, vertexCount * vertexSize, buffer.const_pointer(), GL_DYNAMIC_DRAW); - } - - glBindBuffer(GL_ARRAY_BUFFER, 0); - - return (!testGLError(__LINE__)); -} - -bool COGLES1Driver::updateIndexHardwareBuffer(SHWBufferLink_opengl *HWBuffer) -{ - if (!HWBuffer) - return false; - - const scene::IMeshBuffer *mb = HWBuffer->MeshBuffer; - - const void *indices = mb->getIndices(); - u32 indexCount = mb->getIndexCount(); - - GLenum indexSize; - switch (mb->getIndexType()) { - case (EIT_16BIT): { - indexSize = sizeof(u16); - break; - } - case (EIT_32BIT): { - indexSize = sizeof(u32); - break; - } - default: { - return false; - } - } - - // get or create buffer - bool newBuffer = false; - if (!HWBuffer->vbo_indicesID) { - glGenBuffers(1, &HWBuffer->vbo_indicesID); - if (!HWBuffer->vbo_indicesID) - return false; - newBuffer = true; - } else if (HWBuffer->vbo_indicesSize < indexCount * indexSize) { - newBuffer = true; - } - - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, HWBuffer->vbo_indicesID); - - // copy data to graphics card - if (!newBuffer) - glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, 0, indexCount * indexSize, indices); - else { - HWBuffer->vbo_indicesSize = indexCount * indexSize; - - if (HWBuffer->Mapped_Index == scene::EHM_STATIC) - glBufferData(GL_ELEMENT_ARRAY_BUFFER, indexCount * indexSize, indices, GL_STATIC_DRAW); - else - glBufferData(GL_ELEMENT_ARRAY_BUFFER, indexCount * indexSize, indices, GL_DYNAMIC_DRAW); - } - - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); - - return (!testGLError(__LINE__)); -} - -//! updates hardware buffer if needed -bool COGLES1Driver::updateHardwareBuffer(SHWBufferLink *HWBuffer) -{ - if (!HWBuffer) - return false; - - if (HWBuffer->Mapped_Vertex != scene::EHM_NEVER) { - if (HWBuffer->ChangedID_Vertex != HWBuffer->MeshBuffer->getChangedID_Vertex() || !static_cast(HWBuffer)->vbo_verticesID) { - - HWBuffer->ChangedID_Vertex = HWBuffer->MeshBuffer->getChangedID_Vertex(); - - if (!updateVertexHardwareBuffer(static_cast(HWBuffer))) - return false; - } - } - - if (HWBuffer->Mapped_Index != scene::EHM_NEVER) { - if (HWBuffer->ChangedID_Index != HWBuffer->MeshBuffer->getChangedID_Index() || !((SHWBufferLink_opengl *)HWBuffer)->vbo_indicesID) { - - HWBuffer->ChangedID_Index = HWBuffer->MeshBuffer->getChangedID_Index(); - - if (!updateIndexHardwareBuffer(static_cast(HWBuffer))) - return false; - } - } - - return true; -} - -//! Create hardware buffer from meshbuffer -COGLES1Driver::SHWBufferLink *COGLES1Driver::createHardwareBuffer(const scene::IMeshBuffer *mb) -{ - if (!mb || (mb->getHardwareMappingHint_Index() == scene::EHM_NEVER && mb->getHardwareMappingHint_Vertex() == scene::EHM_NEVER)) - return 0; - - SHWBufferLink_opengl *HWBuffer = new SHWBufferLink_opengl(mb); - - // add to map - HWBuffer->listPosition = HWBufferList.insert(HWBufferList.end(), HWBuffer); - - HWBuffer->ChangedID_Vertex = HWBuffer->MeshBuffer->getChangedID_Vertex(); - HWBuffer->ChangedID_Index = HWBuffer->MeshBuffer->getChangedID_Index(); - HWBuffer->Mapped_Vertex = mb->getHardwareMappingHint_Vertex(); - HWBuffer->Mapped_Index = mb->getHardwareMappingHint_Index(); - HWBuffer->vbo_verticesID = 0; - HWBuffer->vbo_indicesID = 0; - HWBuffer->vbo_verticesSize = 0; - HWBuffer->vbo_indicesSize = 0; - - if (!updateHardwareBuffer(HWBuffer)) { - deleteHardwareBuffer(HWBuffer); - return 0; - } - - return HWBuffer; -} - -void COGLES1Driver::deleteHardwareBuffer(SHWBufferLink *_HWBuffer) -{ - if (!_HWBuffer) - return; - - SHWBufferLink_opengl *HWBuffer = static_cast(_HWBuffer); - if (HWBuffer->vbo_verticesID) { - glDeleteBuffers(1, &HWBuffer->vbo_verticesID); - HWBuffer->vbo_verticesID = 0; - } - if (HWBuffer->vbo_indicesID) { - glDeleteBuffers(1, &HWBuffer->vbo_indicesID); - HWBuffer->vbo_indicesID = 0; - } - - CNullDriver::deleteHardwareBuffer(_HWBuffer); -} - -//! Draw hardware buffer -void COGLES1Driver::drawHardwareBuffer(SHWBufferLink *_HWBuffer) -{ - if (!_HWBuffer) - return; - - SHWBufferLink_opengl *HWBuffer = static_cast(_HWBuffer); - - updateHardwareBuffer(HWBuffer); // check if update is needed - - const scene::IMeshBuffer *mb = HWBuffer->MeshBuffer; - const void *vertices = mb->getVertices(); - const void *indexList = mb->getIndices(); - - if (HWBuffer->Mapped_Vertex != scene::EHM_NEVER) { - glBindBuffer(GL_ARRAY_BUFFER, HWBuffer->vbo_verticesID); - vertices = 0; - } - - if (HWBuffer->Mapped_Index != scene::EHM_NEVER) { - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, HWBuffer->vbo_indicesID); - indexList = 0; - } - - drawVertexPrimitiveList(vertices, mb->getVertexCount(), indexList, - mb->getPrimitiveCount(), mb->getVertexType(), - mb->getPrimitiveType(), mb->getIndexType()); - - if (HWBuffer->Mapped_Vertex != scene::EHM_NEVER) - glBindBuffer(GL_ARRAY_BUFFER, 0); - - if (HWBuffer->Mapped_Index != scene::EHM_NEVER) - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); -} - -IRenderTarget *COGLES1Driver::addRenderTarget() -{ - COGLES1RenderTarget *renderTarget = new COGLES1RenderTarget(this); - RenderTargets.push_back(renderTarget); - - return renderTarget; -} - -// small helper function to create vertex buffer object adress offsets -static inline u8 *buffer_offset(const long offset) -{ - return ((u8 *)0 + offset); -} - -//! draws a vertex primitive list -void COGLES1Driver::drawVertexPrimitiveList(const void *vertices, u32 vertexCount, - const void *indexList, u32 primitiveCount, - E_VERTEX_TYPE vType, scene::E_PRIMITIVE_TYPE pType, E_INDEX_TYPE iType) -{ - if (!checkPrimitiveCount(primitiveCount)) - return; - - setRenderStates3DMode(); - - drawVertexPrimitiveList2d3d(vertices, vertexCount, (const u16 *)indexList, primitiveCount, vType, pType, iType); -} - -void COGLES1Driver::drawVertexPrimitiveList2d3d(const void *vertices, u32 vertexCount, - const void *indexList, u32 primitiveCount, - E_VERTEX_TYPE vType, scene::E_PRIMITIVE_TYPE pType, E_INDEX_TYPE iType, bool threed) -{ - if (!primitiveCount || !vertexCount) - return; - - if (!threed && !checkPrimitiveCount(primitiveCount)) - return; - - CNullDriver::drawVertexPrimitiveList(vertices, vertexCount, indexList, primitiveCount, vType, pType, iType); - - if (vertices) { - // convert colors to gl color format. - vertexCount *= 4; // reused as color component count - ColorBuffer.set_used(vertexCount); - u32 i; - - switch (vType) { - case EVT_STANDARD: { - const S3DVertex *p = static_cast(vertices); - for (i = 0; i < vertexCount; i += 4) { - p->Color.toOpenGLColor(&ColorBuffer[i]); - ++p; - } - } break; - case EVT_2TCOORDS: { - const S3DVertex2TCoords *p = static_cast(vertices); - for (i = 0; i < vertexCount; i += 4) { - p->Color.toOpenGLColor(&ColorBuffer[i]); - ++p; - } - } break; - case EVT_TANGENTS: { - const S3DVertexTangents *p = static_cast(vertices); - for (i = 0; i < vertexCount; i += 4) { - p->Color.toOpenGLColor(&ColorBuffer[i]); - ++p; - } - } break; - } - } - - // draw everything - glClientActiveTexture(GL_TEXTURE0); - glEnableClientState(GL_COLOR_ARRAY); - glEnableClientState(GL_VERTEX_ARRAY); - if ((pType != scene::EPT_POINTS) && (pType != scene::EPT_POINT_SPRITES)) - glEnableClientState(GL_TEXTURE_COORD_ARRAY); -#ifdef GL_OES_point_size_array - else if (FeatureAvailable[COGLESCoreExtensionHandler::IRR_GL_OES_point_size_array] && (Material.Thickness == 0.0f)) - glEnableClientState(GL_POINT_SIZE_ARRAY_OES); -#endif - if (threed && (pType != scene::EPT_POINTS) && (pType != scene::EPT_POINT_SPRITES)) - glEnableClientState(GL_NORMAL_ARRAY); - - if (vertices) - glColorPointer(4, GL_UNSIGNED_BYTE, 0, &ColorBuffer[0]); - - switch (vType) { - case EVT_STANDARD: - if (vertices) { - if (threed) - glNormalPointer(GL_FLOAT, sizeof(S3DVertex), &(static_cast(vertices))[0].Normal); - glTexCoordPointer(2, GL_FLOAT, sizeof(S3DVertex), &(static_cast(vertices))[0].TCoords); - glVertexPointer((threed ? 3 : 2), GL_FLOAT, sizeof(S3DVertex), &(static_cast(vertices))[0].Pos); - } else { - glNormalPointer(GL_FLOAT, sizeof(S3DVertex), buffer_offset(12)); - glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(S3DVertex), buffer_offset(24)); - glTexCoordPointer(2, GL_FLOAT, sizeof(S3DVertex), buffer_offset(28)); - glVertexPointer(3, GL_FLOAT, sizeof(S3DVertex), 0); - } - - if (Feature.MaxTextureUnits > 0 && CacheHandler->getTextureCache().get(1)) { - glClientActiveTexture(GL_TEXTURE0 + 1); - glEnableClientState(GL_TEXTURE_COORD_ARRAY); - if (vertices) - glTexCoordPointer(2, GL_FLOAT, sizeof(S3DVertex), &(static_cast(vertices))[0].TCoords); - else - glTexCoordPointer(2, GL_FLOAT, sizeof(S3DVertex), buffer_offset(28)); - } - break; - case EVT_2TCOORDS: - if (vertices) { - if (threed) - glNormalPointer(GL_FLOAT, sizeof(S3DVertex2TCoords), &(static_cast(vertices))[0].Normal); - glTexCoordPointer(2, GL_FLOAT, sizeof(S3DVertex2TCoords), &(static_cast(vertices))[0].TCoords); - glVertexPointer((threed ? 3 : 2), GL_FLOAT, sizeof(S3DVertex2TCoords), &(static_cast(vertices))[0].Pos); - } else { - glNormalPointer(GL_FLOAT, sizeof(S3DVertex2TCoords), buffer_offset(12)); - glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(S3DVertex2TCoords), buffer_offset(24)); - glTexCoordPointer(2, GL_FLOAT, sizeof(S3DVertex2TCoords), buffer_offset(28)); - glVertexPointer(3, GL_FLOAT, sizeof(S3DVertex2TCoords), buffer_offset(0)); - } - - if (Feature.MaxTextureUnits > 0) { - glClientActiveTexture(GL_TEXTURE0 + 1); - glEnableClientState(GL_TEXTURE_COORD_ARRAY); - if (vertices) - glTexCoordPointer(2, GL_FLOAT, sizeof(S3DVertex2TCoords), &(static_cast(vertices))[0].TCoords2); - else - glTexCoordPointer(2, GL_FLOAT, sizeof(S3DVertex2TCoords), buffer_offset(36)); - } - break; - case EVT_TANGENTS: - if (vertices) { - if (threed) - glNormalPointer(GL_FLOAT, sizeof(S3DVertexTangents), &(static_cast(vertices))[0].Normal); - glTexCoordPointer(2, GL_FLOAT, sizeof(S3DVertexTangents), &(static_cast(vertices))[0].TCoords); - glVertexPointer((threed ? 3 : 2), GL_FLOAT, sizeof(S3DVertexTangents), &(static_cast(vertices))[0].Pos); - } else { - glNormalPointer(GL_FLOAT, sizeof(S3DVertexTangents), buffer_offset(12)); - glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(S3DVertexTangents), buffer_offset(24)); - glTexCoordPointer(2, GL_FLOAT, sizeof(S3DVertexTangents), buffer_offset(28)); - glVertexPointer(3, GL_FLOAT, sizeof(S3DVertexTangents), buffer_offset(0)); - } - - if (Feature.MaxTextureUnits > 0) { - glClientActiveTexture(GL_TEXTURE0 + 1); - glEnableClientState(GL_TEXTURE_COORD_ARRAY); - if (vertices) - glTexCoordPointer(3, GL_FLOAT, sizeof(S3DVertexTangents), &(static_cast(vertices))[0].Tangent); - else - glTexCoordPointer(3, GL_FLOAT, sizeof(S3DVertexTangents), buffer_offset(36)); - - glClientActiveTexture(GL_TEXTURE0 + 2); - glEnableClientState(GL_TEXTURE_COORD_ARRAY); - if (vertices) - glTexCoordPointer(3, GL_FLOAT, sizeof(S3DVertexTangents), &(static_cast(vertices))[0].Binormal); - else - glTexCoordPointer(3, GL_FLOAT, sizeof(S3DVertexTangents), buffer_offset(48)); - } - break; - } - - GLenum indexSize = 0; - - switch (iType) { - case (EIT_16BIT): { - indexSize = GL_UNSIGNED_SHORT; - 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; - break; - } - } - - switch (pType) { - case scene::EPT_POINTS: - case scene::EPT_POINT_SPRITES: { -#ifdef GL_OES_point_sprite - if (pType == scene::EPT_POINT_SPRITES && FeatureAvailable[COGLESCoreExtensionHandler::IRR_GL_OES_point_sprite]) - glEnable(GL_POINT_SPRITE_OES); -#endif - // if ==0 we use the point size array - if (Material.Thickness != 0.f) { - float quadratic[] = {0.0f, 0.0f, 10.01f}; - glPointParameterfv(GL_POINT_DISTANCE_ATTENUATION, quadratic); - float maxParticleSize = 1.0f; - glGetFloatv(GL_POINT_SIZE_MAX, &maxParticleSize); - // maxParticleSize=maxParticleSize 0) { - if (vType == EVT_TANGENTS) { - glClientActiveTexture(GL_TEXTURE0 + 2); - glDisableClientState(GL_TEXTURE_COORD_ARRAY); - } - if ((vType != EVT_STANDARD) || CacheHandler->getTextureCache().get(1)) { - glClientActiveTexture(GL_TEXTURE0 + 1); - glDisableClientState(GL_TEXTURE_COORD_ARRAY); - } - glClientActiveTexture(GL_TEXTURE0); - } - -#ifdef GL_OES_point_size_array - if (FeatureAvailable[COGLESCoreExtensionHandler::IRR_GL_OES_point_size_array] && (Material.Thickness == 0.0f)) - glDisableClientState(GL_POINT_SIZE_ARRAY_OES); -#endif - - glDisableClientState(GL_COLOR_ARRAY); - glDisableClientState(GL_VERTEX_ARRAY); - glDisableClientState(GL_NORMAL_ARRAY); - glDisableClientState(GL_TEXTURE_COORD_ARRAY); -} - -//! draws a 2d image, using a color and the alpha channel of the texture -void COGLES1Driver::draw2DImage(const video::ITexture *texture, - const core::position2d &pos, - const core::rect &sourceRect, - const core::rect *clipRect, SColor color, - bool useAlphaChannelOfTexture) -{ - if (!texture) - return; - - if (!sourceRect.isValid()) - return; - - core::position2d targetPos(pos); - core::position2d sourcePos(sourceRect.UpperLeftCorner); - core::dimension2d sourceSize(sourceRect.getSize()); - if (clipRect) { - if (targetPos.X < clipRect->UpperLeftCorner.X) { - sourceSize.Width += targetPos.X - clipRect->UpperLeftCorner.X; - if (sourceSize.Width <= 0) - return; - - sourcePos.X -= targetPos.X - clipRect->UpperLeftCorner.X; - targetPos.X = clipRect->UpperLeftCorner.X; - } - - if (targetPos.X + sourceSize.Width > clipRect->LowerRightCorner.X) { - sourceSize.Width -= (targetPos.X + sourceSize.Width) - clipRect->LowerRightCorner.X; - if (sourceSize.Width <= 0) - return; - } - - if (targetPos.Y < clipRect->UpperLeftCorner.Y) { - sourceSize.Height += targetPos.Y - clipRect->UpperLeftCorner.Y; - if (sourceSize.Height <= 0) - return; - - sourcePos.Y -= targetPos.Y - clipRect->UpperLeftCorner.Y; - targetPos.Y = clipRect->UpperLeftCorner.Y; - } - - if (targetPos.Y + sourceSize.Height > clipRect->LowerRightCorner.Y) { - sourceSize.Height -= (targetPos.Y + sourceSize.Height) - clipRect->LowerRightCorner.Y; - if (sourceSize.Height <= 0) - return; - } - } - - // clip these coordinates - - if (targetPos.X < 0) { - sourceSize.Width += targetPos.X; - if (sourceSize.Width <= 0) - return; - - sourcePos.X -= targetPos.X; - targetPos.X = 0; - } - - const core::dimension2d &renderTargetSize = getCurrentRenderTargetSize(); - - if (targetPos.X + sourceSize.Width > (s32)renderTargetSize.Width) { - sourceSize.Width -= (targetPos.X + sourceSize.Width) - renderTargetSize.Width; - if (sourceSize.Width <= 0) - return; - } - - if (targetPos.Y < 0) { - sourceSize.Height += targetPos.Y; - if (sourceSize.Height <= 0) - return; - - sourcePos.Y -= targetPos.Y; - targetPos.Y = 0; - } - - if (targetPos.Y + sourceSize.Height > (s32)renderTargetSize.Height) { - sourceSize.Height -= (targetPos.Y + sourceSize.Height) - renderTargetSize.Height; - if (sourceSize.Height <= 0) - return; - } - - // ok, we've clipped everything. - // now draw it. - - // texcoords need to be flipped horizontally for RTTs - const bool isRTT = texture->isRenderTarget(); - const core::dimension2d &ss = texture->getOriginalSize(); - const f32 invW = 1.f / static_cast(ss.Width); - const f32 invH = 1.f / static_cast(ss.Height); - const core::rect tcoords( - sourcePos.X * invW, - (isRTT ? (sourcePos.Y + sourceSize.Height) : sourcePos.Y) * invH, - (sourcePos.X + sourceSize.Width) * invW, - (isRTT ? sourcePos.Y : (sourcePos.Y + sourceSize.Height)) * invH); - - const core::rect poss(targetPos, sourceSize); - - if (!CacheHandler->getTextureCache().set(0, texture)) - return; - - setRenderStates2DMode(color.getAlpha() < 255, true, useAlphaChannelOfTexture); - - u16 indices[] = {0, 1, 2, 3}; - S3DVertex vertices[4]; - vertices[0] = S3DVertex((f32)poss.UpperLeftCorner.X, (f32)poss.UpperLeftCorner.Y, 0, 0, 0, 1, color, tcoords.UpperLeftCorner.X, tcoords.UpperLeftCorner.Y); - vertices[1] = S3DVertex((f32)poss.LowerRightCorner.X, (f32)poss.UpperLeftCorner.Y, 0, 0, 0, 1, color, tcoords.LowerRightCorner.X, tcoords.UpperLeftCorner.Y); - vertices[2] = S3DVertex((f32)poss.LowerRightCorner.X, (f32)poss.LowerRightCorner.Y, 0, 0, 0, 1, color, tcoords.LowerRightCorner.X, tcoords.LowerRightCorner.Y); - vertices[3] = S3DVertex((f32)poss.UpperLeftCorner.X, (f32)poss.LowerRightCorner.Y, 0, 0, 0, 1, color, tcoords.UpperLeftCorner.X, tcoords.LowerRightCorner.Y); - drawVertexPrimitiveList2d3d(vertices, 4, indices, 2, video::EVT_STANDARD, scene::EPT_TRIANGLE_FAN, EIT_16BIT, false); -} - -//! The same, but with a four element array of colors, one for each vertex -void COGLES1Driver::draw2DImage(const video::ITexture *texture, const core::rect &destRect, - const core::rect &sourceRect, const core::rect *clipRect, - const video::SColor *const colors, bool useAlphaChannelOfTexture) -{ - if (!texture) - return; - - // texcoords need to be flipped horizontally for RTTs - const bool isRTT = texture->isRenderTarget(); - const core::dimension2du &ss = texture->getOriginalSize(); - const f32 invW = 1.f / static_cast(ss.Width); - const f32 invH = 1.f / static_cast(ss.Height); - const core::rect tcoords( - sourceRect.UpperLeftCorner.X * invW, - (isRTT ? sourceRect.LowerRightCorner.Y : sourceRect.UpperLeftCorner.Y) * invH, - sourceRect.LowerRightCorner.X * invW, - (isRTT ? sourceRect.UpperLeftCorner.Y : sourceRect.LowerRightCorner.Y) * invH); - - const video::SColor temp[4] = { - 0xFFFFFFFF, - 0xFFFFFFFF, - 0xFFFFFFFF, - 0xFFFFFFFF, - }; - - const video::SColor *const useColor = colors ? colors : temp; - - if (!CacheHandler->getTextureCache().set(0, texture)) - return; - - setRenderStates2DMode(useColor[0].getAlpha() < 255 || useColor[1].getAlpha() < 255 || - useColor[2].getAlpha() < 255 || useColor[3].getAlpha() < 255, - true, useAlphaChannelOfTexture); - - if (clipRect) { - if (!clipRect->isValid()) - return; - - glEnable(GL_SCISSOR_TEST); - const core::dimension2d &renderTargetSize = getCurrentRenderTargetSize(); - glScissor(clipRect->UpperLeftCorner.X, renderTargetSize.Height - clipRect->LowerRightCorner.Y, - clipRect->getWidth(), clipRect->getHeight()); - } - - u16 indices[] = {0, 1, 2, 3}; - S3DVertex vertices[4]; - vertices[0] = S3DVertex((f32)destRect.UpperLeftCorner.X, (f32)destRect.UpperLeftCorner.Y, 0, 0, 0, 1, useColor[0], tcoords.UpperLeftCorner.X, tcoords.UpperLeftCorner.Y); - vertices[1] = S3DVertex((f32)destRect.LowerRightCorner.X, (f32)destRect.UpperLeftCorner.Y, 0, 0, 0, 1, useColor[3], tcoords.LowerRightCorner.X, tcoords.UpperLeftCorner.Y); - vertices[2] = S3DVertex((f32)destRect.LowerRightCorner.X, (f32)destRect.LowerRightCorner.Y, 0, 0, 0, 1, useColor[2], tcoords.LowerRightCorner.X, tcoords.LowerRightCorner.Y); - vertices[3] = S3DVertex((f32)destRect.UpperLeftCorner.X, (f32)destRect.LowerRightCorner.Y, 0, 0, 0, 1, useColor[1], tcoords.UpperLeftCorner.X, tcoords.LowerRightCorner.Y); - drawVertexPrimitiveList2d3d(vertices, 4, indices, 2, video::EVT_STANDARD, scene::EPT_TRIANGLE_FAN, EIT_16BIT, false); - - if (clipRect) - glDisable(GL_SCISSOR_TEST); -} - -void COGLES1Driver::draw2DImage(const video::ITexture *texture, u32 layer, bool flip) -{ - if (!texture || !CacheHandler->getTextureCache().set(0, texture)) - return; - - setRenderStates2DMode(false, true, true); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - - Transformation3DChanged = true; - - u16 indices[] = {0, 1, 2, 3}; - S3DVertex vertices[4]; - - vertices[0].Pos = core::vector3df(-1.f, 1.f, 0.f); - vertices[1].Pos = core::vector3df(1.f, 1.f, 0.f); - vertices[2].Pos = core::vector3df(1.f, -1.f, 0.f); - vertices[3].Pos = core::vector3df(-1.f, -1.f, 0.f); - - f32 modificator = (flip) ? 1.f : 0.f; - - vertices[0].TCoords = core::vector2df(0.f, 0.f + modificator); - vertices[1].TCoords = core::vector2df(1.f, 0.f + modificator); - vertices[2].TCoords = core::vector2df(1.f, 1.f - modificator); - vertices[3].TCoords = core::vector2df(0.f, 1.f - modificator); - - vertices[0].Color = 0xFFFFFFFF; - vertices[1].Color = 0xFFFFFFFF; - vertices[2].Color = 0xFFFFFFFF; - vertices[3].Color = 0xFFFFFFFF; - - drawVertexPrimitiveList2d3d(vertices, 4, indices, 2, video::EVT_STANDARD, scene::EPT_TRIANGLE_FAN, EIT_16BIT, false); -} - -//! draws a set of 2d images, using a color and the alpha channel of the texture if desired. -void COGLES1Driver::draw2DImageBatch(const video::ITexture *texture, - const core::array> &positions, - const core::array> &sourceRects, - const core::rect *clipRect, - SColor color, - bool useAlphaChannelOfTexture) -{ - if (!texture) - return; - - const u32 drawCount = core::min_(positions.size(), sourceRects.size()); - if (!drawCount) - return; - - const core::dimension2d &ss = texture->getOriginalSize(); - if (!ss.Width || !ss.Height) - return; - const f32 invW = 1.f / static_cast(ss.Width); - const f32 invH = 1.f / static_cast(ss.Height); - const core::dimension2d &renderTargetSize = getCurrentRenderTargetSize(); - - if (!CacheHandler->getTextureCache().set(0, texture)) - return; - - setRenderStates2DMode(color.getAlpha() < 255, true, useAlphaChannelOfTexture); - - core::array vertices; - core::array quadIndices; - vertices.reallocate(drawCount * 4); - quadIndices.reallocate(drawCount * 6); - - for (u32 i = 0; i < drawCount; ++i) { - if (!sourceRects[i].isValid()) - continue; - - core::position2d targetPos(positions[i]); - core::position2d sourcePos(sourceRects[i].UpperLeftCorner); - // This needs to be signed as it may go negative. - core::dimension2d sourceSize(sourceRects[i].getSize()); - if (clipRect) { - if (targetPos.X < clipRect->UpperLeftCorner.X) { - sourceSize.Width += targetPos.X - clipRect->UpperLeftCorner.X; - if (sourceSize.Width <= 0) - continue; - - sourcePos.X -= targetPos.X - clipRect->UpperLeftCorner.X; - targetPos.X = clipRect->UpperLeftCorner.X; - } - - if (targetPos.X + sourceSize.Width > clipRect->LowerRightCorner.X) { - sourceSize.Width -= (targetPos.X + sourceSize.Width) - clipRect->LowerRightCorner.X; - if (sourceSize.Width <= 0) - continue; - } - - if (targetPos.Y < clipRect->UpperLeftCorner.Y) { - sourceSize.Height += targetPos.Y - clipRect->UpperLeftCorner.Y; - if (sourceSize.Height <= 0) - continue; - - sourcePos.Y -= targetPos.Y - clipRect->UpperLeftCorner.Y; - targetPos.Y = clipRect->UpperLeftCorner.Y; - } - - if (targetPos.Y + sourceSize.Height > clipRect->LowerRightCorner.Y) { - sourceSize.Height -= (targetPos.Y + sourceSize.Height) - clipRect->LowerRightCorner.Y; - if (sourceSize.Height <= 0) - continue; - } - } - - // clip these coordinates - - if (targetPos.X < 0) { - sourceSize.Width += targetPos.X; - if (sourceSize.Width <= 0) - continue; - - sourcePos.X -= targetPos.X; - targetPos.X = 0; - } - - if (targetPos.X + sourceSize.Width > (s32)renderTargetSize.Width) { - sourceSize.Width -= (targetPos.X + sourceSize.Width) - renderTargetSize.Width; - if (sourceSize.Width <= 0) - continue; - } - - if (targetPos.Y < 0) { - sourceSize.Height += targetPos.Y; - if (sourceSize.Height <= 0) - continue; - - sourcePos.Y -= targetPos.Y; - targetPos.Y = 0; - } - - if (targetPos.Y + sourceSize.Height > (s32)renderTargetSize.Height) { - sourceSize.Height -= (targetPos.Y + sourceSize.Height) - renderTargetSize.Height; - if (sourceSize.Height <= 0) - continue; - } - - // ok, we've clipped everything. - - const core::rect tcoords( - sourcePos.X * invW, - sourcePos.Y * invH, - (sourcePos.X + sourceSize.Width) * invW, - (sourcePos.Y + sourceSize.Height) * invH); - - const core::rect poss(targetPos, sourceSize); - - const u32 vstart = vertices.size(); - - vertices.push_back(S3DVertex((f32)poss.UpperLeftCorner.X, (f32)poss.UpperLeftCorner.Y, 0, 0, 0, 1, color, tcoords.UpperLeftCorner.X, tcoords.UpperLeftCorner.Y)); - vertices.push_back(S3DVertex((f32)poss.LowerRightCorner.X, (f32)poss.UpperLeftCorner.Y, 0, 0, 0, 1, color, tcoords.LowerRightCorner.X, tcoords.UpperLeftCorner.Y)); - vertices.push_back(S3DVertex((f32)poss.LowerRightCorner.X, (f32)poss.LowerRightCorner.Y, 0, 0, 0, 1, color, tcoords.LowerRightCorner.X, tcoords.LowerRightCorner.Y)); - vertices.push_back(S3DVertex((f32)poss.UpperLeftCorner.X, (f32)poss.LowerRightCorner.Y, 0, 0, 0, 1, color, tcoords.UpperLeftCorner.X, tcoords.LowerRightCorner.Y)); - - quadIndices.push_back(vstart); - quadIndices.push_back(vstart + 1); - quadIndices.push_back(vstart + 2); - quadIndices.push_back(vstart); - quadIndices.push_back(vstart + 2); - quadIndices.push_back(vstart + 3); - } - if (vertices.size()) - drawVertexPrimitiveList2d3d(vertices.pointer(), vertices.size(), - quadIndices.pointer(), vertices.size() / 2, - video::EVT_STANDARD, scene::EPT_TRIANGLES, - EIT_16BIT, false); -} - -//! draw a 2d rectangle -void COGLES1Driver::draw2DRectangle(SColor color, const core::rect &position, - const core::rect *clip) -{ - setRenderStates2DMode(color.getAlpha() < 255, false, false); - - core::rect pos = position; - - if (clip) - pos.clipAgainst(*clip); - - if (!pos.isValid()) - return; - - u16 indices[] = {0, 1, 2, 3}; - S3DVertex vertices[4]; - vertices[0] = S3DVertex((f32)pos.UpperLeftCorner.X, (f32)pos.UpperLeftCorner.Y, 0, 0, 0, 1, color, 0, 0); - vertices[1] = S3DVertex((f32)pos.LowerRightCorner.X, (f32)pos.UpperLeftCorner.Y, 0, 0, 0, 1, color, 0, 0); - vertices[2] = S3DVertex((f32)pos.LowerRightCorner.X, (f32)pos.LowerRightCorner.Y, 0, 0, 0, 1, color, 0, 0); - vertices[3] = S3DVertex((f32)pos.UpperLeftCorner.X, (f32)pos.LowerRightCorner.Y, 0, 0, 0, 1, color, 0, 0); - drawVertexPrimitiveList2d3d(vertices, 4, indices, 2, video::EVT_STANDARD, scene::EPT_TRIANGLE_FAN, EIT_16BIT, false); -} - -//! draw an 2d rectangle -void COGLES1Driver::draw2DRectangle(const core::rect &position, - SColor colorLeftUp, SColor colorRightUp, SColor colorLeftDown, SColor colorRightDown, - const core::rect *clip) -{ - core::rect pos = position; - - if (clip) - pos.clipAgainst(*clip); - - if (!pos.isValid()) - return; - - setRenderStates2DMode(colorLeftUp.getAlpha() < 255 || - colorRightUp.getAlpha() < 255 || - colorLeftDown.getAlpha() < 255 || - colorRightDown.getAlpha() < 255, - false, false); - - u16 indices[] = {0, 1, 2, 3}; - S3DVertex vertices[4]; - vertices[0] = S3DVertex((f32)pos.UpperLeftCorner.X, (f32)pos.UpperLeftCorner.Y, 0, 0, 0, 1, colorLeftUp, 0, 0); - vertices[1] = S3DVertex((f32)pos.LowerRightCorner.X, (f32)pos.UpperLeftCorner.Y, 0, 0, 0, 1, colorRightUp, 0, 0); - vertices[2] = S3DVertex((f32)pos.LowerRightCorner.X, (f32)pos.LowerRightCorner.Y, 0, 0, 0, 1, colorRightDown, 0, 0); - vertices[3] = S3DVertex((f32)pos.UpperLeftCorner.X, (f32)pos.LowerRightCorner.Y, 0, 0, 0, 1, colorLeftDown, 0, 0); - drawVertexPrimitiveList2d3d(vertices, 4, indices, 2, video::EVT_STANDARD, scene::EPT_TRIANGLE_FAN, EIT_16BIT, false); -} - -//! Draws a 2d line. -void COGLES1Driver::draw2DLine(const core::position2d &start, - const core::position2d &end, - SColor color) -{ - setRenderStates2DMode(color.getAlpha() < 255, false, false); - - u16 indices[] = {0, 1}; - S3DVertex vertices[2]; - vertices[0] = S3DVertex((f32)start.X, (f32)start.Y, 0, 0, 0, 1, color, 0, 0); - vertices[1] = S3DVertex((f32)end.X, (f32)end.Y, 0, 0, 0, 1, color, 1, 1); - drawVertexPrimitiveList2d3d(vertices, 2, indices, 1, video::EVT_STANDARD, scene::EPT_LINES, EIT_16BIT, false); -} - -//! creates a matrix in supplied GLfloat array to pass to OGLES1 -inline void COGLES1Driver::getGLMatrix(GLfloat gl_matrix[16], const core::matrix4 &m) -{ - memcpy(gl_matrix, m.pointer(), 16 * sizeof(f32)); -} - -//! creates a opengltexturematrix from a D3D style texture matrix -inline void COGLES1Driver::getGLTextureMatrix(GLfloat *o, const core::matrix4 &m) -{ - o[0] = m[0]; - o[1] = m[1]; - o[2] = 0.f; - o[3] = 0.f; - - o[4] = m[4]; - o[5] = m[5]; - o[6] = 0.f; - o[7] = 0.f; - - o[8] = 0.f; - o[9] = 0.f; - o[10] = 1.f; - o[11] = 0.f; - - o[12] = m[8]; - o[13] = m[9]; - o[14] = 0.f; - o[15] = 1.f; -} - -ITexture *COGLES1Driver::createDeviceDependentTexture(const io::path &name, IImage *image) -{ - core::array imageArray(1); - imageArray.push_back(image); - - COGLES1Texture *texture = new COGLES1Texture(name, imageArray, ETT_2D, this); - - return texture; -} - -ITexture *COGLES1Driver::createDeviceDependentTextureCubemap(const io::path &name, const core::array &image) -{ - COGLES1Texture *texture = new COGLES1Texture(name, image, ETT_CUBEMAP, this); - - return texture; -} - -//! Sets a material. All 3d drawing functions draw geometry now using this material. -void COGLES1Driver::setMaterial(const SMaterial &material) -{ - Material = material; - OverrideMaterial.apply(Material); - - for (u32 i = 0; i < Feature.MaxTextureUnits; ++i) - setTransform((E_TRANSFORMATION_STATE)(ETS_TEXTURE_0 + i), material.getTextureMatrix(i)); -} - -//! prints error if an error happened. -bool COGLES1Driver::testGLError(int code) -{ - if (!Params.DriverDebug) - return false; - - GLenum g = glGetError(); - switch (g) { - case GL_NO_ERROR: - return false; - case GL_INVALID_ENUM: - os::Printer::log("GL_INVALID_ENUM", core::stringc(code).c_str(), ELL_ERROR); - break; - case GL_INVALID_VALUE: - os::Printer::log("GL_INVALID_VALUE", core::stringc(code).c_str(), ELL_ERROR); - break; - case GL_INVALID_OPERATION: - os::Printer::log("GL_INVALID_OPERATION", core::stringc(code).c_str(), ELL_ERROR); - break; - case GL_STACK_OVERFLOW: - os::Printer::log("GL_STACK_OVERFLOW", core::stringc(code).c_str(), ELL_ERROR); - break; - case GL_STACK_UNDERFLOW: - os::Printer::log("GL_STACK_UNDERFLOW", core::stringc(code).c_str(), ELL_ERROR); - break; - case GL_OUT_OF_MEMORY: - os::Printer::log("GL_OUT_OF_MEMORY", core::stringc(code).c_str(), ELL_ERROR); - break; - }; - return true; -} - -//! sets the needed renderstates -void COGLES1Driver::setRenderStates3DMode() -{ - if (CurrentRenderMode != ERM_3D) { - // Reset Texture Stages - CacheHandler->setBlend(false); - glDisable(GL_ALPHA_TEST); - CacheHandler->setBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - - // switch back the matrices - glMatrixMode(GL_MODELVIEW); - glLoadMatrixf((Matrices[ETS_VIEW] * Matrices[ETS_WORLD]).pointer()); - - GLfloat glmat[16]; - getGLMatrix(glmat, Matrices[ETS_PROJECTION]); - glmat[12] *= -1.0f; - glMatrixMode(GL_PROJECTION); - glLoadMatrixf(glmat); - - ResetRenderStates = true; - } - - if (ResetRenderStates || LastMaterial != Material) { - // unset old material - - if (LastMaterial.MaterialType != Material.MaterialType && - static_cast(LastMaterial.MaterialType) < MaterialRenderers.size()) - MaterialRenderers[LastMaterial.MaterialType].Renderer->OnUnsetMaterial(); - - // set new material. - if (static_cast(Material.MaterialType) < MaterialRenderers.size()) - MaterialRenderers[Material.MaterialType].Renderer->OnSetMaterial( - Material, LastMaterial, ResetRenderStates, this); - - LastMaterial = Material; - CacheHandler->correctCacheMaterial(LastMaterial); - ResetRenderStates = false; - } - - if (static_cast(Material.MaterialType) < MaterialRenderers.size()) - MaterialRenderers[Material.MaterialType].Renderer->OnRender(this, video::EVT_STANDARD); - - CurrentRenderMode = ERM_3D; -} - -GLint COGLES1Driver::getTextureWrapMode(u8 clamp) const -{ - switch (clamp) { - case ETC_CLAMP: - // return GL_CLAMP; not supported in ogl-es - return GL_CLAMP_TO_EDGE; - break; - case ETC_CLAMP_TO_EDGE: - return GL_CLAMP_TO_EDGE; - break; - case ETC_CLAMP_TO_BORDER: - // return GL_CLAMP_TO_BORDER; not supported in ogl-es - return GL_CLAMP_TO_EDGE; - break; - case ETC_MIRROR: -#ifdef GL_OES_texture_mirrored_repeat - if (FeatureAvailable[COGLESCoreExtensionHandler::IRR_GL_OES_texture_mirrored_repeat]) - return GL_MIRRORED_REPEAT_OES; - else -#endif - return GL_REPEAT; - break; - // the next three are not yet supported at all - case ETC_MIRROR_CLAMP: - case ETC_MIRROR_CLAMP_TO_EDGE: - case ETC_MIRROR_CLAMP_TO_BORDER: -#ifdef GL_OES_texture_mirrored_repeat - if (FeatureAvailable[COGLESCoreExtensionHandler::IRR_GL_OES_texture_mirrored_repeat]) - return GL_MIRRORED_REPEAT_OES; - else -#endif - return GL_CLAMP_TO_EDGE; - break; - case ETC_REPEAT: - default: - return GL_REPEAT; - break; - } -} - -//! Can be called by an IMaterialRenderer to make its work easier. -void COGLES1Driver::setBasicRenderStates(const SMaterial &material, const SMaterial &lastmaterial, - bool resetAllRenderStates) -{ - if (resetAllRenderStates || - lastmaterial.ColorMaterial != material.ColorMaterial) { - // we only have diffuse_and_ambient in ogl-es - if (material.ColorMaterial == ECM_DIFFUSE_AND_AMBIENT) - glEnable(GL_COLOR_MATERIAL); - else - glDisable(GL_COLOR_MATERIAL); - } - - if (resetAllRenderStates || - lastmaterial.AmbientColor != material.AmbientColor || - lastmaterial.DiffuseColor != material.DiffuseColor || - lastmaterial.EmissiveColor != material.EmissiveColor || - lastmaterial.ColorMaterial != material.ColorMaterial) { - GLfloat color[4]; - - const f32 inv = 1.0f / 255.0f; - - if ((material.ColorMaterial != video::ECM_AMBIENT) && - (material.ColorMaterial != video::ECM_DIFFUSE_AND_AMBIENT)) { - color[0] = material.AmbientColor.getRed() * inv; - color[1] = material.AmbientColor.getGreen() * inv; - color[2] = material.AmbientColor.getBlue() * inv; - color[3] = material.AmbientColor.getAlpha() * inv; - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, color); - } - - if ((material.ColorMaterial != video::ECM_DIFFUSE) && - (material.ColorMaterial != video::ECM_DIFFUSE_AND_AMBIENT)) { - color[0] = material.DiffuseColor.getRed() * inv; - color[1] = material.DiffuseColor.getGreen() * inv; - color[2] = material.DiffuseColor.getBlue() * inv; - color[3] = material.DiffuseColor.getAlpha() * inv; - glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, color); - } - - if (material.ColorMaterial != video::ECM_EMISSIVE) { - color[0] = material.EmissiveColor.getRed() * inv; - color[1] = material.EmissiveColor.getGreen() * inv; - color[2] = material.EmissiveColor.getBlue() * inv; - color[3] = material.EmissiveColor.getAlpha() * inv; - glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, color); - } - } - - if (resetAllRenderStates || - lastmaterial.SpecularColor != material.SpecularColor || - lastmaterial.Shininess != material.Shininess) { - GLfloat color[] = {0.f, 0.f, 0.f, 1.f}; - const f32 inv = 1.0f / 255.0f; - - // disable Specular colors if no shininess is set - if ((material.Shininess != 0.0f) && - (material.ColorMaterial != video::ECM_SPECULAR)) { -#ifdef GL_EXT_separate_specular_color - if (FeatureAvailable[IRR_EXT_separate_specular_color]) - glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL, GL_SEPARATE_SPECULAR_COLOR); -#endif - glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, material.Shininess); - color[0] = material.SpecularColor.getRed() * inv; - color[1] = material.SpecularColor.getGreen() * inv; - color[2] = material.SpecularColor.getBlue() * inv; - color[3] = material.SpecularColor.getAlpha() * inv; - glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, color); - } -#ifdef GL_EXT_separate_specular_color - else if (FeatureAvailable[IRR_EXT_separate_specular_color]) - glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL, GL_SINGLE_COLOR); -#endif - } - - // TODO ogl-es - // fillmode - // if (resetAllRenderStates || (lastmaterial.Wireframe != material.Wireframe) || (lastmaterial.PointCloud != material.PointCloud)) - // glPolygonMode(GL_FRONT_AND_BACK, material.Wireframe ? GL_LINE : material.PointCloud? GL_POINT : GL_FILL); - - // shademode - if (resetAllRenderStates || (lastmaterial.GouraudShading != material.GouraudShading)) { - if (material.GouraudShading) - glShadeModel(GL_SMOOTH); - else - glShadeModel(GL_FLAT); - } - - // lighting - if (resetAllRenderStates || (lastmaterial.Lighting != material.Lighting)) { - if (material.Lighting) - glEnable(GL_LIGHTING); - else - glDisable(GL_LIGHTING); - } - - // zbuffer - if (resetAllRenderStates || lastmaterial.ZBuffer != material.ZBuffer) { - switch (material.ZBuffer) { - case ECFN_DISABLED: - glDisable(GL_DEPTH_TEST); - break; - case ECFN_LESSEQUAL: - glEnable(GL_DEPTH_TEST); - glDepthFunc(GL_LEQUAL); - break; - case ECFN_EQUAL: - glEnable(GL_DEPTH_TEST); - glDepthFunc(GL_EQUAL); - break; - case ECFN_LESS: - glEnable(GL_DEPTH_TEST); - glDepthFunc(GL_LESS); - break; - case ECFN_NOTEQUAL: - glEnable(GL_DEPTH_TEST); - glDepthFunc(GL_NOTEQUAL); - break; - case ECFN_GREATEREQUAL: - glEnable(GL_DEPTH_TEST); - glDepthFunc(GL_GEQUAL); - break; - case ECFN_GREATER: - glEnable(GL_DEPTH_TEST); - glDepthFunc(GL_GREATER); - break; - case ECFN_ALWAYS: - glEnable(GL_DEPTH_TEST); - glDepthFunc(GL_ALWAYS); - break; - case ECFN_NEVER: - glEnable(GL_DEPTH_TEST); - glDepthFunc(GL_NEVER); - break; - } - } - - // zwrite - if (getWriteZBuffer(material)) { - glDepthMask(GL_TRUE); - } else { - glDepthMask(GL_FALSE); - } - - // back face culling - if (resetAllRenderStates || (lastmaterial.FrontfaceCulling != material.FrontfaceCulling) || (lastmaterial.BackfaceCulling != material.BackfaceCulling)) { - if ((material.FrontfaceCulling) && (material.BackfaceCulling)) { - glCullFace(GL_FRONT_AND_BACK); - glEnable(GL_CULL_FACE); - } else if (material.BackfaceCulling) { - glCullFace(GL_BACK); - glEnable(GL_CULL_FACE); - } else if (material.FrontfaceCulling) { - glCullFace(GL_FRONT); - glEnable(GL_CULL_FACE); - } else - glDisable(GL_CULL_FACE); - } - - // fog - if (resetAllRenderStates || lastmaterial.FogEnable != material.FogEnable) { - if (material.FogEnable) - glEnable(GL_FOG); - else - glDisable(GL_FOG); - } - - // normalization - if (resetAllRenderStates || lastmaterial.NormalizeNormals != material.NormalizeNormals) { - if (material.NormalizeNormals) - glEnable(GL_NORMALIZE); - else - glDisable(GL_NORMALIZE); - } - - // Color Mask - if (resetAllRenderStates || lastmaterial.ColorMask != material.ColorMask) { - glColorMask( - (material.ColorMask & ECP_RED) ? GL_TRUE : GL_FALSE, - (material.ColorMask & ECP_GREEN) ? GL_TRUE : GL_FALSE, - (material.ColorMask & ECP_BLUE) ? GL_TRUE : GL_FALSE, - (material.ColorMask & ECP_ALPHA) ? GL_TRUE : GL_FALSE); - } - - // Blend Equation - if (material.BlendOperation == EBO_NONE) - CacheHandler->setBlend(false); - else { - CacheHandler->setBlend(true); - - if (queryFeature(EVDF_BLEND_OPERATIONS)) { - switch (material.BlendOperation) { - case EBO_ADD: -#if defined(GL_OES_blend_subtract) - CacheHandler->setBlendEquation(GL_FUNC_ADD_OES); -#endif - break; - case EBO_SUBTRACT: -#if defined(GL_OES_blend_subtract) - CacheHandler->setBlendEquation(GL_FUNC_SUBTRACT_OES); -#endif - break; - case EBO_REVSUBTRACT: -#if defined(GL_OES_blend_subtract) - CacheHandler->setBlendEquation(GL_FUNC_REVERSE_SUBTRACT_OES); -#endif - break; - default: - break; - } - } - } - - // Blend Factor - if (IR(material.BlendFactor) & 0xFFFFFFFF // TODO: why the & 0xFFFFFFFF? - && material.MaterialType != EMT_ONETEXTURE_BLEND) { - E_BLEND_FACTOR srcRGBFact = EBF_ZERO; - E_BLEND_FACTOR dstRGBFact = EBF_ZERO; - E_BLEND_FACTOR srcAlphaFact = EBF_ZERO; - E_BLEND_FACTOR dstAlphaFact = EBF_ZERO; - E_MODULATE_FUNC modulo = EMFN_MODULATE_1X; - u32 alphaSource = 0; - - unpack_textureBlendFuncSeparate(srcRGBFact, dstRGBFact, srcAlphaFact, dstAlphaFact, modulo, alphaSource, material.BlendFactor); - - if (queryFeature(EVDF_BLEND_SEPARATE)) { - CacheHandler->setBlendFuncSeparate(getGLBlend(srcRGBFact), getGLBlend(dstRGBFact), - getGLBlend(srcAlphaFact), getGLBlend(dstAlphaFact)); - } else { - CacheHandler->setBlendFunc(getGLBlend(srcRGBFact), getGLBlend(dstRGBFact)); - } - } - - // TODO: Polygon Offset. Not sure if it was left out deliberately or if it won't work with this driver. - - // thickness - if (resetAllRenderStates || lastmaterial.Thickness != material.Thickness) { - if (AntiAlias) { - // glPointSize(core::clamp(static_cast(material.Thickness), DimSmoothedPoint[0], DimSmoothedPoint[1])); - // we don't use point smoothing - glPointSize(core::clamp(static_cast(material.Thickness), DimAliasedPoint[0], DimAliasedPoint[1])); - } else { - glPointSize(core::clamp(static_cast(material.Thickness), DimAliasedPoint[0], DimAliasedPoint[1])); - glLineWidth(core::clamp(static_cast(material.Thickness), DimAliasedLine[0], DimAliasedLine[1])); - } - } - - // Anti aliasing - if (resetAllRenderStates || lastmaterial.AntiAliasing != material.AntiAliasing) { - if (material.AntiAliasing & EAAM_ALPHA_TO_COVERAGE) - glEnable(GL_SAMPLE_ALPHA_TO_COVERAGE); - else if (lastmaterial.AntiAliasing & EAAM_ALPHA_TO_COVERAGE) - glDisable(GL_SAMPLE_ALPHA_TO_COVERAGE); - - if ((AntiAlias >= 2) && (material.AntiAliasing & (EAAM_SIMPLE | EAAM_QUALITY))) - glEnable(GL_MULTISAMPLE); - else - glDisable(GL_MULTISAMPLE); - } - - // Texture parameters - setTextureRenderStates(material, resetAllRenderStates); -} - -//! Compare in SMaterial doesn't check texture parameters, so we should call this on each OnRender call. -void COGLES1Driver::setTextureRenderStates(const SMaterial &material, bool resetAllRenderstates) -{ - // Set textures to TU/TIU and apply filters to them - - for (s32 i = Feature.MaxTextureUnits - 1; i >= 0; --i) { - CacheHandler->getTextureCache().set(i, material.TextureLayers[i].Texture); - - const COGLES1Texture *tmpTexture = CacheHandler->getTextureCache().get(i); - - if (!tmpTexture) - continue; - - GLenum tmpTextureType = tmpTexture->getOpenGLTextureType(); - - CacheHandler->setActiveTexture(GL_TEXTURE0 + i); - - { - const bool isRTT = tmpTexture->isRenderTarget(); - - glMatrixMode(GL_TEXTURE); - - if (!isRTT && Matrices[ETS_TEXTURE_0 + i].isIdentity()) - glLoadIdentity(); - else { - GLfloat glmat[16]; - if (isRTT) - getGLTextureMatrix(glmat, Matrices[ETS_TEXTURE_0 + i] * TextureFlipMatrix); - else - getGLTextureMatrix(glmat, Matrices[ETS_TEXTURE_0 + i]); - glLoadMatrixf(glmat); - } - } - - COGLES1Texture::SStatesCache &statesCache = tmpTexture->getStatesCache(); - - if (resetAllRenderstates) - statesCache.IsCached = false; - -#if defined(GL_EXT_texture_lod_bias) - if (FeatureAvailable[COGLESCoreExtensionHandler::IRR_GL_EXT_texture_lod_bias]) { - if (material.TextureLayers[i].LODBias) { - const float tmp = core::clamp(material.TextureLayers[i].LODBias * 0.125f, -MaxTextureLODBias, MaxTextureLODBias); - glTexEnvf(GL_TEXTURE_FILTER_CONTROL_EXT, GL_TEXTURE_LOD_BIAS_EXT, tmp); - } else - glTexEnvf(GL_TEXTURE_FILTER_CONTROL_EXT, GL_TEXTURE_LOD_BIAS_EXT, 0.f); - } -#endif - - if (!statesCache.IsCached || material.TextureLayers[i].MagFilter != statesCache.MagFilter) { - E_TEXTURE_MAG_FILTER magFilter = material.TextureLayers[i].MagFilter; - glTexParameteri(tmpTextureType, GL_TEXTURE_MAG_FILTER, - magFilter == ETMAGF_NEAREST ? GL_NEAREST : (assert(magFilter == ETMAGF_LINEAR), GL_LINEAR)); - - statesCache.MagFilter = magFilter; - } - - if (material.UseMipMaps && tmpTexture->hasMipMaps()) { - if (!statesCache.IsCached || material.TextureLayers[i].MinFilter != statesCache.MinFilter || - !statesCache.MipMapStatus) { - E_TEXTURE_MIN_FILTER minFilter = material.TextureLayers[i].MinFilter; - glTexParameteri(tmpTextureType, GL_TEXTURE_MIN_FILTER, - minFilter == ETMINF_NEAREST_MIPMAP_NEAREST ? GL_NEAREST_MIPMAP_NEAREST : minFilter == ETMINF_LINEAR_MIPMAP_NEAREST ? GL_LINEAR_MIPMAP_NEAREST - : minFilter == ETMINF_NEAREST_MIPMAP_LINEAR ? GL_NEAREST_MIPMAP_LINEAR - : (assert(minFilter == ETMINF_LINEAR_MIPMAP_LINEAR), GL_LINEAR_MIPMAP_LINEAR)); - - statesCache.MinFilter = minFilter; - statesCache.MipMapStatus = true; - } - } else { - if (!statesCache.IsCached || material.TextureLayers[i].MinFilter != statesCache.MinFilter || - statesCache.MipMapStatus) { - E_TEXTURE_MIN_FILTER minFilter = material.TextureLayers[i].MinFilter; - glTexParameteri(tmpTextureType, GL_TEXTURE_MIN_FILTER, - (minFilter == ETMINF_NEAREST_MIPMAP_NEAREST || minFilter == ETMINF_NEAREST_MIPMAP_LINEAR) ? GL_NEAREST : (assert(minFilter == ETMINF_LINEAR_MIPMAP_NEAREST || minFilter == ETMINF_LINEAR_MIPMAP_LINEAR), GL_LINEAR)); - - statesCache.MinFilter = minFilter; - statesCache.MipMapStatus = false; - } - } - -#ifdef GL_EXT_texture_filter_anisotropic - if (FeatureAvailable[COGLESCoreExtensionHandler::IRR_GL_EXT_texture_filter_anisotropic] && - (!statesCache.IsCached || material.TextureLayers[i].AnisotropicFilter != statesCache.AnisotropicFilter)) { - glTexParameteri(tmpTextureType, GL_TEXTURE_MAX_ANISOTROPY_EXT, - material.TextureLayers[i].AnisotropicFilter > 1 ? core::min_(MaxAnisotropy, material.TextureLayers[i].AnisotropicFilter) : 1); - - statesCache.AnisotropicFilter = material.TextureLayers[i].AnisotropicFilter; - } -#endif - - if (!statesCache.IsCached || material.TextureLayers[i].TextureWrapU != statesCache.WrapU) { - glTexParameteri(tmpTextureType, GL_TEXTURE_WRAP_S, getTextureWrapMode(material.TextureLayers[i].TextureWrapU)); - statesCache.WrapU = material.TextureLayers[i].TextureWrapU; - } - - if (!statesCache.IsCached || material.TextureLayers[i].TextureWrapV != statesCache.WrapV) { - glTexParameteri(tmpTextureType, GL_TEXTURE_WRAP_T, getTextureWrapMode(material.TextureLayers[i].TextureWrapV)); - statesCache.WrapV = material.TextureLayers[i].TextureWrapV; - } - - statesCache.IsCached = true; - } - - // be sure to leave in texture stage 0 - CacheHandler->setActiveTexture(GL_TEXTURE0); -} - -//! sets the needed renderstates -void COGLES1Driver::setRenderStates2DMode(bool alpha, bool texture, bool alphaChannel) -{ - if (CurrentRenderMode != ERM_2D || Transformation3DChanged) { - // unset last 3d material - if (CurrentRenderMode == ERM_3D) { - if (static_cast(LastMaterial.MaterialType) < MaterialRenderers.size()) - MaterialRenderers[LastMaterial.MaterialType].Renderer->OnUnsetMaterial(); - } - if (Transformation3DChanged) { - glMatrixMode(GL_PROJECTION); - - const core::dimension2d &renderTargetSize = getCurrentRenderTargetSize(); - core::matrix4 m(core::matrix4::EM4CONST_NOTHING); - m.buildProjectionMatrixOrthoLH(f32(renderTargetSize.Width), f32(-(s32)(renderTargetSize.Height)), -1.0f, 1.0f); - m.setTranslation(core::vector3df(-1, 1, 0)); - glLoadMatrixf(m.pointer()); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - - Transformation3DChanged = false; - } - } - - Material = (OverrideMaterial2DEnabled) ? OverrideMaterial2D : InitMaterial2D; - Material.Lighting = false; - Material.TextureLayers[0].Texture = (texture) ? const_cast(CacheHandler->getTextureCache().get(0)) : 0; - setTransform(ETS_TEXTURE_0, core::IdentityMatrix); - - setBasicRenderStates(Material, LastMaterial, false); - - LastMaterial = Material; - CacheHandler->correctCacheMaterial(LastMaterial); - - // no alphaChannel without texture - alphaChannel &= texture; - - if (alphaChannel || alpha) { - CacheHandler->setBlend(true); - CacheHandler->setBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - CacheHandler->setBlendEquation(GL_FUNC_ADD); - glEnable(GL_ALPHA_TEST); - glAlphaFunc(GL_GREATER, 0.f); - } else { - CacheHandler->setBlend(false); - glDisable(GL_ALPHA_TEST); - } - - if (texture) { - // Due to the transformation change, the previous line would call a reset each frame - // but we can safely reset the variable as it was false before - Transformation3DChanged = false; - - if (alphaChannel) { - // if alpha and alpha texture just modulate, otherwise use only the alpha channel - if (alpha) { - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - } else { - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); - glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE); - glTexEnvf(GL_TEXTURE_ENV, GL_SRC0_ALPHA, GL_TEXTURE); - // rgb always modulates - glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE); - glTexEnvf(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_TEXTURE); - glTexEnvf(GL_TEXTURE_ENV, GL_SRC1_RGB, GL_PRIMARY_COLOR); - } - } else { - if (alpha) { - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); - glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE); - glTexEnvf(GL_TEXTURE_ENV, GL_SRC0_ALPHA, GL_PRIMARY_COLOR); - // rgb always modulates - glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE); - glTexEnvf(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_TEXTURE); - glTexEnvf(GL_TEXTURE_ENV, GL_SRC1_RGB, GL_PRIMARY_COLOR); - } else { - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - } - } - } - - CurrentRenderMode = ERM_2D; -} - -//! \return Returns the name of the video driver. -const char *COGLES1Driver::getName() const -{ - return Name.c_str(); -} - -//! Sets the dynamic ambient light color. -void COGLES1Driver::setAmbientLight(const SColorf &color) -{ - CNullDriver::setAmbientLight(color); - GLfloat data[4] = {color.r, color.g, color.b, color.a}; - glLightModelfv(GL_LIGHT_MODEL_AMBIENT, data); -} - -// this code was sent in by Oliver Klems, thank you -void COGLES1Driver::setViewPort(const core::rect &area) -{ - core::rect vp = area; - core::rect rendert(0, 0, getCurrentRenderTargetSize().Width, getCurrentRenderTargetSize().Height); - vp.clipAgainst(rendert); - - if (vp.getHeight() > 0 && vp.getWidth() > 0) - CacheHandler->setViewport(vp.UpperLeftCorner.X, getCurrentRenderTargetSize().Height - vp.UpperLeftCorner.Y - vp.getHeight(), vp.getWidth(), vp.getHeight()); - - ViewPort = vp; -} - -void COGLES1Driver::setViewPortRaw(u32 width, u32 height) -{ - CacheHandler->setViewport(0, 0, width, height); - ViewPort = core::recti(0, 0, width, height); -} - -//! Sets the fog mode. -void COGLES1Driver::setFog(SColor c, E_FOG_TYPE fogType, f32 start, - f32 end, f32 density, bool pixelFog, bool rangeFog) -{ - CNullDriver::setFog(c, fogType, start, end, density, pixelFog, rangeFog); - - glFogf(GL_FOG_MODE, GLfloat((fogType == EFT_FOG_LINEAR) ? GL_LINEAR : (fogType == EFT_FOG_EXP) ? GL_EXP - : GL_EXP2)); - -#ifdef GL_EXT_fog_coord - if (FeatureAvailable[IRR_EXT_fog_coord]) - glFogi(GL_FOG_COORDINATE_SOURCE, GL_FRAGMENT_DEPTH); -#endif - - if (fogType == EFT_FOG_LINEAR) { - glFogf(GL_FOG_START, start); - glFogf(GL_FOG_END, end); - } else - glFogf(GL_FOG_DENSITY, density); - - if (pixelFog) - glHint(GL_FOG_HINT, GL_NICEST); - else - glHint(GL_FOG_HINT, GL_FASTEST); - - SColorf color(c); - GLfloat data[4] = {color.r, color.g, color.b, color.a}; - glFogfv(GL_FOG_COLOR, data); -} - -//! Draws a 3d line. -void COGLES1Driver::draw3DLine(const core::vector3df &start, - const core::vector3df &end, SColor color) -{ - setRenderStates3DMode(); - - u16 indices[] = {0, 1}; - S3DVertex vertices[2]; - vertices[0] = S3DVertex(start.X, start.Y, start.Z, 0, 0, 1, color, 0, 0); - vertices[1] = S3DVertex(end.X, end.Y, end.Z, 0, 0, 1, color, 0, 0); - drawVertexPrimitiveList2d3d(vertices, 2, indices, 1, video::EVT_STANDARD, scene::EPT_LINES); -} - -//! Only used by the internal engine. Used to notify the driver that -//! the window was resized. -void COGLES1Driver::OnResize(const core::dimension2d &size) -{ - CNullDriver::OnResize(size); - CacheHandler->setViewport(0, 0, size.Width, size.Height); - Transformation3DChanged = true; -} - -//! Returns type of video driver -E_DRIVER_TYPE COGLES1Driver::getDriverType() const -{ - return EDT_OGLES1; -} - -//! returns color format -ECOLOR_FORMAT COGLES1Driver::getColorFormat() const -{ - return ColorFormat; -} - -//! Get a vertex shader constant index. -s32 COGLES1Driver::getVertexShaderConstantID(const c8 *name) -{ - return getPixelShaderConstantID(name); -} - -//! Get a pixel shader constant index. -s32 COGLES1Driver::getPixelShaderConstantID(const c8 *name) -{ - os::Printer::log("Error: Please use IMaterialRendererServices from IShaderConstantSetCallBack::OnSetConstants not VideoDriver->getPixelShaderConstantID()."); - return -1; -} - -//! Sets a constant for the vertex shader based on an index. -bool COGLES1Driver::setVertexShaderConstant(s32 index, const f32 *floats, int count) -{ - // pass this along, as in GLSL the same routine is used for both vertex and fragment shaders - return setPixelShaderConstant(index, floats, count); -} - -//! Int interface for the above. -bool COGLES1Driver::setVertexShaderConstant(s32 index, const s32 *ints, int count) -{ - return setPixelShaderConstant(index, ints, count); -} - -bool COGLES1Driver::setVertexShaderConstant(s32 index, const u32 *ints, int count) -{ - return setPixelShaderConstant(index, ints, count); -} - -//! Sets a constant for the pixel shader based on an index. -bool COGLES1Driver::setPixelShaderConstant(s32 index, const f32 *floats, int count) -{ - os::Printer::log("Error: Please use IMaterialRendererServices from IShaderConstantSetCallBack::OnSetConstants not VideoDriver->setPixelShaderConstant()."); - return false; -} - -//! Int interface for the above. -bool COGLES1Driver::setPixelShaderConstant(s32 index, const s32 *ints, int count) -{ - os::Printer::log("Error: Please use IMaterialRendererServices from IShaderConstantSetCallBack::OnSetConstants not VideoDriver->setPixelShaderConstant()."); - return false; -} - -bool COGLES1Driver::setPixelShaderConstant(s32 index, const u32 *ints, int count) -{ - os::Printer::log("Error: Please use IMaterialRendererServices from IShaderConstantSetCallBack::OnSetConstants not VideoDriver->setPixelShaderConstant()."); - return false; -} - -//! Adds a new material renderer to the VideoDriver, using GLSL to render geometry. -s32 COGLES1Driver::addHighLevelShaderMaterial( - const c8 *vertexShaderProgram, - const c8 *vertexShaderEntryPointName, - E_VERTEX_SHADER_TYPE vsCompileTarget, - const c8 *pixelShaderProgram, - const c8 *pixelShaderEntryPointName, - E_PIXEL_SHADER_TYPE psCompileTarget, - const c8 *geometryShaderProgram, - const c8 *geometryShaderEntryPointName, - E_GEOMETRY_SHADER_TYPE gsCompileTarget, - scene::E_PRIMITIVE_TYPE inType, - scene::E_PRIMITIVE_TYPE outType, - u32 verticesOut, - IShaderConstantSetCallBack *callback, - E_MATERIAL_TYPE baseMaterial, - s32 userData) -{ - os::Printer::log("No shader support."); - return -1; -} - -//! Returns a pointer to the IVideoDriver interface. (Implementation for -//! IMaterialRendererServices) -IVideoDriver *COGLES1Driver::getVideoDriver() -{ - return this; -} - -//! Returns pointer to the IGPUProgrammingServices interface. -IGPUProgrammingServices *COGLES1Driver::getGPUProgrammingServices() -{ - return this; -} - -ITexture *COGLES1Driver::addRenderTargetTexture(const core::dimension2d &size, - const io::path &name, const ECOLOR_FORMAT format) -{ - // disable mip-mapping - bool generateMipLevels = getTextureCreationFlag(ETCF_CREATE_MIP_MAPS); - setTextureCreationFlag(ETCF_CREATE_MIP_MAPS, false); - - bool supportForFBO = (Feature.ColorAttachment > 0); - - core::dimension2du destSize(size); - - if (!supportForFBO) { - destSize = core::dimension2d(core::min_(size.Width, ScreenSize.Width), core::min_(size.Height, ScreenSize.Height)); - destSize = destSize.getOptimalSize((size == size.getOptimalSize()), false, false); - } - - COGLES1Texture *renderTargetTexture = new COGLES1Texture(name, destSize, ETT_2D, format, this); - addTexture(renderTargetTexture); - renderTargetTexture->drop(); - - // restore mip-mapping - setTextureCreationFlag(ETCF_CREATE_MIP_MAPS, generateMipLevels); - - return renderTargetTexture; -} - -ITexture *COGLES1Driver::addRenderTargetTextureCubemap(const irr::u32 sideLen, const io::path &name, const ECOLOR_FORMAT format) -{ - // disable mip-mapping - bool generateMipLevels = getTextureCreationFlag(ETCF_CREATE_MIP_MAPS); - setTextureCreationFlag(ETCF_CREATE_MIP_MAPS, false); - - bool supportForFBO = (Feature.ColorAttachment > 0); - - const core::dimension2d size(sideLen, sideLen); - core::dimension2du destSize(size); - - if (!supportForFBO) { - destSize = core::dimension2d(core::min_(size.Width, ScreenSize.Width), core::min_(size.Height, ScreenSize.Height)); - destSize = destSize.getOptimalSize((size == size.getOptimalSize()), false, false); - } - - COGLES1Texture *renderTargetTexture = new COGLES1Texture(name, destSize, ETT_CUBEMAP, format, this); - addTexture(renderTargetTexture); - renderTargetTexture->drop(); - - // restore mip-mapping - setTextureCreationFlag(ETCF_CREATE_MIP_MAPS, generateMipLevels); - - return renderTargetTexture; -} - -//! Returns the maximum amount of primitives -u32 COGLES1Driver::getMaximalPrimitiveCount() const -{ - return 65535; -} - -bool COGLES1Driver::setRenderTargetEx(IRenderTarget *target, u16 clearFlag, SColor clearColor, f32 clearDepth, u8 clearStencil) -{ - if (target && target->getDriverType() != EDT_OGLES1) { - os::Printer::log("Fatal Error: Tried to set a render target not owned by OpenGL driver.", ELL_ERROR); - return false; - } - - bool supportForFBO = (Feature.ColorAttachment > 0); - - core::dimension2d destRenderTargetSize(0, 0); - - if (target) { - COGLES1RenderTarget *renderTarget = static_cast(target); - - if (supportForFBO) { - CacheHandler->setFBO(renderTarget->getBufferID()); - renderTarget->update(); - } - - destRenderTargetSize = renderTarget->getSize(); - - setViewPortRaw(destRenderTargetSize.Width, destRenderTargetSize.Height); - } else { - if (supportForFBO) - CacheHandler->setFBO(0); - else { - COGLES1RenderTarget *prevRenderTarget = static_cast(CurrentRenderTarget); - COGLES1Texture *renderTargetTexture = static_cast(prevRenderTarget->getTexture()); - - if (renderTargetTexture) { - const COGLES1Texture *prevTexture = CacheHandler->getTextureCache().get(0); - - CacheHandler->getTextureCache().set(0, renderTargetTexture); - - const core::dimension2d size = renderTargetTexture->getSize(); - glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, size.Width, size.Height); - - CacheHandler->getTextureCache().set(0, prevTexture); - } - } - - destRenderTargetSize = core::dimension2d(0, 0); - - setViewPortRaw(ScreenSize.Width, ScreenSize.Height); - } - - if (CurrentRenderTargetSize != destRenderTargetSize) { - CurrentRenderTargetSize = destRenderTargetSize; - - Transformation3DChanged = true; - } - - CurrentRenderTarget = target; - - if (!supportForFBO) { - clearFlag |= ECBF_COLOR; - clearFlag |= ECBF_DEPTH; - } - - clearBuffers(clearFlag, clearColor, clearDepth, clearStencil); - - return true; -} - -void COGLES1Driver::clearBuffers(u16 flag, SColor color, f32 depth, u8 stencil) -{ - GLbitfield mask = 0; - - if (flag & ECBF_COLOR) { - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - - const f32 inv = 1.0f / 255.0f; - glClearColor(color.getRed() * inv, color.getGreen() * inv, - color.getBlue() * inv, color.getAlpha() * inv); - - mask |= GL_COLOR_BUFFER_BIT; - } - - if (flag & ECBF_DEPTH) { - glDepthMask(GL_TRUE); - glClearDepthf(depth); - mask |= GL_DEPTH_BUFFER_BIT; - } - - if (flag & ECBF_STENCIL) { - glClearStencil(stencil); - mask |= GL_STENCIL_BUFFER_BIT; - } - - if (mask) - glClear(mask); -} - -//! Returns an image created from the last rendered frame. -// We want to read the front buffer to get the latest render finished. -// This is not possible under ogl-es, though, so one has to call this method -// outside of the render loop only. -IImage *COGLES1Driver::createScreenShot(video::ECOLOR_FORMAT format, video::E_RENDER_TARGET target) -{ - if (target == video::ERT_MULTI_RENDER_TEXTURES || target == video::ERT_RENDER_TEXTURE || target == video::ERT_STEREO_BOTH_BUFFERS) - return 0; - GLint internalformat = GL_RGBA; - GLint type = GL_UNSIGNED_BYTE; - if (false && (FeatureAvailable[COGLESCoreExtensionHandler::IRR_GL_IMG_read_format] || FeatureAvailable[COGLESCoreExtensionHandler::IRR_GL_OES_read_format] || FeatureAvailable[COGLESCoreExtensionHandler::IRR_GL_EXT_read_format_bgra])) { -#ifdef GL_IMPLEMENTATION_COLOR_READ_TYPE_OES - glGetIntegerv(GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES, &internalformat); - glGetIntegerv(GL_IMPLEMENTATION_COLOR_READ_TYPE_OES, &type); -#endif - // there are formats we don't support ATM - if (GL_UNSIGNED_SHORT_4_4_4_4 == type) - type = GL_UNSIGNED_SHORT_5_5_5_1; -#ifdef GL_EXT_read_format_bgra - else if (GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT == type) - type = GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT; -#endif - } - - IImage *newImage = 0; - if ((GL_RGBA == internalformat) -#ifdef GL_EXT_read_format_bgra - || (GL_BGRA_EXT == internalformat) -#endif - ) { - if (GL_UNSIGNED_BYTE == type) - newImage = new CImage(ECF_A8R8G8B8, ScreenSize); - else - newImage = new CImage(ECF_A1R5G5B5, ScreenSize); - } else { - if (GL_UNSIGNED_BYTE == type) - newImage = new CImage(ECF_R8G8B8, ScreenSize); - else - newImage = new CImage(ECF_R5G6B5, ScreenSize); - } - - u8 *pixels = static_cast(newImage->getData()); - if (!pixels) { - newImage->drop(); - return 0; - } - - glReadPixels(0, 0, ScreenSize.Width, ScreenSize.Height, internalformat, type, pixels); - - // opengl images are horizontally flipped, so we have to fix that here. - const s32 pitch = newImage->getPitch(); - u8 *p2 = pixels + (ScreenSize.Height - 1) * pitch; - u8 *tmpBuffer = new u8[pitch]; - for (u32 i = 0; i < ScreenSize.Height; i += 2) { - memcpy(tmpBuffer, pixels, pitch); - memcpy(pixels, p2, pitch); - memcpy(p2, tmpBuffer, pitch); - pixels += pitch; - p2 -= pitch; - } - delete[] tmpBuffer; - - if (testGLError(__LINE__)) { - newImage->drop(); - return 0; - } - - return newImage; -} - -void COGLES1Driver::removeTexture(ITexture *texture) -{ - CacheHandler->getTextureCache().remove(texture); - CNullDriver::removeTexture(texture); -} - -//! Set/unset a clipping plane. -bool COGLES1Driver::setClipPlane(u32 index, const core::plane3df &plane, bool enable) -{ - if (index >= MaxUserClipPlanes) - return false; - - UserClipPlane[index] = plane; - enableClipPlane(index, enable); - return true; -} - -void COGLES1Driver::uploadClipPlane(u32 index) -{ - // opengl needs an array of doubles for the plane equation - float clip_plane[4]; - clip_plane[0] = UserClipPlane[index].Normal.X; - clip_plane[1] = UserClipPlane[index].Normal.Y; - clip_plane[2] = UserClipPlane[index].Normal.Z; - clip_plane[3] = UserClipPlane[index].D; - glClipPlanef(GL_CLIP_PLANE0 + index, clip_plane); -} - -//! Enable/disable a clipping plane. -void COGLES1Driver::enableClipPlane(u32 index, bool enable) -{ - if (index >= MaxUserClipPlanes) - return; - if (enable) { - if (!UserClipPlaneEnabled[index]) { - uploadClipPlane(index); - glEnable(GL_CLIP_PLANE0 + index); - } - } else - glDisable(GL_CLIP_PLANE0 + index); - - UserClipPlaneEnabled[index] = enable; -} - -core::dimension2du COGLES1Driver::getMaxTextureSize() const -{ - return core::dimension2du(MaxTextureSize, MaxTextureSize); -} - -GLenum COGLES1Driver::getGLBlend(E_BLEND_FACTOR factor) const -{ - static GLenum const blendTable[] = { - GL_ZERO, - GL_ONE, - GL_DST_COLOR, - GL_ONE_MINUS_DST_COLOR, - GL_SRC_COLOR, - GL_ONE_MINUS_SRC_COLOR, - GL_SRC_ALPHA, - GL_ONE_MINUS_SRC_ALPHA, - GL_DST_ALPHA, - GL_ONE_MINUS_DST_ALPHA, - GL_SRC_ALPHA_SATURATE, - }; - - return blendTable[factor]; -} - -GLenum COGLES1Driver::getZBufferBits() const -{ - GLenum bits = 0; - - switch (Params.ZBufferBits) { - case 24: -#if defined(GL_OES_depth24) - if (queryGLESFeature(COGLESCoreExtensionHandler::IRR_GL_OES_depth24)) - bits = GL_DEPTH_COMPONENT24_OES; - else -#endif - bits = GL_DEPTH_COMPONENT16; - break; - case 32: -#if defined(GL_OES_depth32) - if (queryGLESFeature(COGLESCoreExtensionHandler::IRR_GL_OES_depth32)) - bits = GL_DEPTH_COMPONENT32_OES; - else -#endif - bits = GL_DEPTH_COMPONENT16; - break; - default: - bits = GL_DEPTH_COMPONENT16; - break; - } - - return bits; -} - -bool COGLES1Driver::getColorFormatParameters(ECOLOR_FORMAT format, GLint &internalFormat, GLenum &pixelFormat, - GLenum &pixelType, void (**converter)(const void *, s32, void *)) const -{ - bool supported = false; - internalFormat = GL_RGBA; - pixelFormat = GL_RGBA; - pixelType = GL_UNSIGNED_BYTE; - *converter = 0; - - switch (format) { - case ECF_A1R5G5B5: - supported = true; - internalFormat = GL_RGBA; - pixelFormat = GL_RGBA; - pixelType = GL_UNSIGNED_SHORT_5_5_5_1; - *converter = CColorConverter::convert_A1R5G5B5toR5G5B5A1; - break; - case ECF_R5G6B5: - supported = true; - internalFormat = GL_RGB; - pixelFormat = GL_RGB; - pixelType = GL_UNSIGNED_SHORT_5_6_5; - break; - case ECF_R8G8B8: - supported = true; - internalFormat = GL_RGB; - pixelFormat = GL_RGB; - pixelType = GL_UNSIGNED_BYTE; - break; - case ECF_A8R8G8B8: - supported = true; - if (queryGLESFeature(COGLESCoreExtensionHandler::IRR_GL_IMG_texture_format_BGRA8888) || - queryGLESFeature(COGLESCoreExtensionHandler::IRR_GL_EXT_texture_format_BGRA8888) || - queryGLESFeature(COGLESCoreExtensionHandler::IRR_GL_APPLE_texture_format_BGRA8888)) { - internalFormat = GL_BGRA; - pixelFormat = GL_BGRA; - } else { - internalFormat = GL_RGBA; - pixelFormat = GL_RGBA; - *converter = CColorConverter::convert_A8R8G8B8toA8B8G8R8; - } - pixelType = GL_UNSIGNED_BYTE; - break; - case ECF_D16: - supported = true; - internalFormat = GL_DEPTH_COMPONENT16; - pixelFormat = GL_DEPTH_COMPONENT; - pixelType = GL_UNSIGNED_SHORT; - break; - case ECF_D32: -#if defined(GL_OES_depth32) - if (queryGLESFeature(COGLESCoreExtensionHandler::IRR_GL_OES_depth32)) { - supported = true; - internalFormat = GL_DEPTH_COMPONENT32_OES; - pixelFormat = GL_DEPTH_COMPONENT; - pixelType = GL_UNSIGNED_INT; - } -#endif - break; - case ECF_D24S8: -#ifdef GL_OES_packed_depth_stencil - if (queryGLESFeature(COGLESCoreExtensionHandler::IRR_GL_OES_packed_depth_stencil)) { - supported = true; - internalFormat = GL_DEPTH24_STENCIL8_OES; - pixelFormat = GL_DEPTH_STENCIL_OES; - pixelType = GL_UNSIGNED_INT_24_8_OES; - } -#endif - break; - case ECF_R8: - break; - case ECF_R8G8: - break; - case ECF_R16: - break; - case ECF_R16G16: - break; - case ECF_R16F: - break; - case ECF_G16R16F: - break; - case ECF_A16B16G16R16F: - break; - case ECF_R32F: - break; - case ECF_G32R32F: - break; - case ECF_A32B32G32R32F: - break; - default: - break; - } - -#ifdef _IRR_IOS_PLATFORM_ - if (internalFormat == GL_BGRA) - internalFormat = GL_RGBA; -#endif - - return supported; -} - -bool COGLES1Driver::queryTextureFormat(ECOLOR_FORMAT format) const -{ - GLint dummyInternalFormat; - GLenum dummyPixelFormat; - GLenum dummyPixelType; - void (*dummyConverter)(const void *, s32, void *); - return getColorFormatParameters(format, dummyInternalFormat, dummyPixelFormat, dummyPixelType, &dummyConverter); -} - -bool COGLES1Driver::needsTransparentRenderPass(const irr::video::SMaterial &material) const -{ - return CNullDriver::needsTransparentRenderPass(material) || material.isAlphaBlendOperation(); -} - -COGLES1CacheHandler *COGLES1Driver::getCacheHandler() const -{ - return CacheHandler; -} - -} // end namespace -} // end namespace - -#endif // _IRR_COMPILE_WITH_OGLES1_ - -namespace irr -{ -namespace video -{ - -#ifndef _IRR_COMPILE_WITH_OGLES1_ -class IVideoDriver; -class IContextManager; -#endif - -IVideoDriver *createOGLES1Driver(const SIrrlichtCreationParameters ¶ms, io::IFileSystem *io, IContextManager *contextManager) -{ -#ifdef _IRR_COMPILE_WITH_OGLES1_ - return new COGLES1Driver(params, io, contextManager); -#else - return 0; -#endif // _IRR_COMPILE_WITH_OGLES1_ -} - -} // end namespace -} // end namespace diff --git a/irr/src/COGLESDriver.h b/irr/src/COGLESDriver.h deleted file mode 100644 index 29e0d94f1..000000000 --- a/irr/src/COGLESDriver.h +++ /dev/null @@ -1,327 +0,0 @@ -// Copyright (C) 2002-20014 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 "SIrrCreationParameters.h" - -#ifdef _IRR_COMPILE_WITH_OGLES1_ - -#include "CNullDriver.h" -#include "IMaterialRendererServices.h" -#include "EDriverFeatures.h" -#include "fast_atof.h" -#include "COGLESExtensionHandler.h" -#include "IContextManager.h" - -#define TEST_GL_ERROR(cls) (cls)->testGLError(__LINE__) - -namespace irr -{ -namespace video -{ - -class COGLES1Driver : public CNullDriver, public IMaterialRendererServices, public COGLES1ExtensionHandler -{ - friend class COpenGLCoreTexture; - -public: - //! constructor - COGLES1Driver(const SIrrlichtCreationParameters ¶ms, io::IFileSystem *io, IContextManager *contextManager); - - //! destructor - virtual ~COGLES1Driver(); - - virtual bool beginScene(u16 clearFlag, SColor clearColor = SColor(255, 0, 0, 0), f32 clearDepth = 1.f, u8 clearStencil = 0, - const SExposedVideoData &videoData = SExposedVideoData(), core::rect *sourceRect = 0) override; - - bool endScene() override; - - //! sets transformation - void setTransform(E_TRANSFORMATION_STATE state, const core::matrix4 &mat) override; - - struct SHWBufferLink_opengl : public SHWBufferLink - { - SHWBufferLink_opengl(const scene::IMeshBuffer *_MeshBuffer) : - SHWBufferLink(_MeshBuffer), vbo_verticesID(0), vbo_indicesID(0) {} - - GLuint vbo_verticesID; // tmp - GLuint vbo_indicesID; // tmp - - GLuint vbo_verticesSize; // tmp - GLuint vbo_indicesSize; // tmp - }; - - bool updateVertexHardwareBuffer(SHWBufferLink_opengl *HWBuffer); - bool updateIndexHardwareBuffer(SHWBufferLink_opengl *HWBuffer); - - //! updates hardware buffer if needed - bool updateHardwareBuffer(SHWBufferLink *HWBuffer) override; - - //! Create hardware buffer from mesh - SHWBufferLink *createHardwareBuffer(const scene::IMeshBuffer *mb) override; - - //! Delete hardware buffer (only some drivers can) - void deleteHardwareBuffer(SHWBufferLink *HWBuffer) override; - - //! Draw hardware buffer - void drawHardwareBuffer(SHWBufferLink *HWBuffer) override; - - IRenderTarget *addRenderTarget() override; - - //! draws a vertex primitive list - virtual void drawVertexPrimitiveList(const void *vertices, u32 vertexCount, - const void *indexList, u32 primitiveCount, - E_VERTEX_TYPE vType, scene::E_PRIMITIVE_TYPE pType, E_INDEX_TYPE iType) override; - - void drawVertexPrimitiveList2d3d(const void *vertices, u32 vertexCount, const void *indexList, u32 primitiveCount, E_VERTEX_TYPE vType, scene::E_PRIMITIVE_TYPE pType, E_INDEX_TYPE iType = EIT_16BIT, bool threed = true); - - //! queries the features of the driver, returns true if feature is available - bool queryFeature(E_VIDEO_DRIVER_FEATURE feature) const override - { - // return FeatureEnabled[feature] && COGLES1ExtensionHandler::queryFeature(feature); - return COGLES1ExtensionHandler::queryFeature(feature); - } - - //! Sets a material. - void setMaterial(const SMaterial &material) override; - - virtual void draw2DImage(const video::ITexture *texture, const core::position2d &destPos, - const core::rect &sourceRect, const core::rect *clipRect = 0, - SColor color = SColor(255, 255, 255, 255), bool useAlphaChannelOfTexture = false) override; - - virtual void draw2DImage(const video::ITexture *texture, const core::rect &destRect, - const core::rect &sourceRect, const core::rect *clipRect = 0, - const video::SColor *const colors = 0, bool useAlphaChannelOfTexture = false) override; - - virtual void draw2DImage(const video::ITexture *texture, u32 layer, bool flip); - - //! draws a set of 2d images, using a color and the alpha channel of the texture if desired. - virtual void draw2DImageBatch(const video::ITexture *texture, - const core::array> &positions, - const core::array> &sourceRects, - const core::rect *clipRect = 0, - SColor color = SColor(255, 255, 255, 255), - bool useAlphaChannelOfTexture = false) override; - - //! draw an 2d rectangle - virtual void draw2DRectangle(SColor color, const core::rect &pos, - const core::rect *clip = 0) override; - - //! Draws an 2d rectangle with a gradient. - virtual void draw2DRectangle(const core::rect &pos, - SColor colorLeftUp, SColor colorRightUp, SColor colorLeftDown, SColor colorRightDown, - const core::rect *clip = 0) override; - - //! Draws a 2d line. - virtual void draw2DLine(const core::position2d &start, - const core::position2d &end, - SColor color = SColor(255, 255, 255, 255)) override; - - //! Draws a 3d line. - virtual void draw3DLine(const core::vector3df &start, - const core::vector3df &end, - SColor color = SColor(255, 255, 255, 255)) override; - - //! Returns the name of the video driver. - const char *getName() const override; - - //! Sets the dynamic ambient light color. - void setAmbientLight(const SColorf &color) override; - - //! sets a viewport - void setViewPort(const core::rect &area) override; - - //! Sets the fog mode. - virtual void setFog(SColor color, E_FOG_TYPE fogType, f32 start, - f32 end, f32 density, bool pixelFog, bool rangeFog) override; - - //! Only used internally by the engine - void OnResize(const core::dimension2d &size) override; - - //! Returns type of video driver - E_DRIVER_TYPE getDriverType() const override; - - //! get color format of the current color buffer - ECOLOR_FORMAT getColorFormat() const override; - - //! Returns the transformation set by setTransform - const core::matrix4 &getTransform(E_TRANSFORMATION_STATE state) const override; - - //! Can be called by an IMaterialRenderer to make its work easier. - virtual void setBasicRenderStates(const SMaterial &material, const SMaterial &lastmaterial, - bool resetAllRenderstates) override; - - //! Compare in SMaterial doesn't check texture parameters, so we should call this on each OnRender call. - virtual void setTextureRenderStates(const SMaterial &material, bool resetAllRenderstates); - - //! Get a vertex shader constant index. - s32 getVertexShaderConstantID(const c8 *name) override; - - //! Get a pixel shader constant index. - s32 getPixelShaderConstantID(const c8 *name) override; - - //! Sets a constant for the vertex shader based on an index. - bool setVertexShaderConstant(s32 index, const f32 *floats, int count) override; - - //! Int interface for the above. - bool setVertexShaderConstant(s32 index, const s32 *ints, int count) override; - - //! Uint interface for the above. - bool setVertexShaderConstant(s32 index, const u32 *ints, int count) override; - - //! Sets a constant for the pixel shader based on an index. - bool setPixelShaderConstant(s32 index, const f32 *floats, int count) override; - - //! Int interface for the above. - bool setPixelShaderConstant(s32 index, const s32 *ints, int count) override; - - //! Uint interface for the above. - bool setPixelShaderConstant(s32 index, const u32 *ints, int count) override; - - //! Adds a new material renderer to the VideoDriver - virtual s32 addHighLevelShaderMaterial(const c8 *vertexShaderProgram, const c8 *vertexShaderEntryPointName, - E_VERTEX_SHADER_TYPE vsCompileTarget, const c8 *pixelShaderProgram, const c8 *pixelShaderEntryPointName, - E_PIXEL_SHADER_TYPE psCompileTarget, const c8 *geometryShaderProgram, const c8 *geometryShaderEntryPointName, - E_GEOMETRY_SHADER_TYPE gsCompileTarget, scene::E_PRIMITIVE_TYPE inType, scene::E_PRIMITIVE_TYPE outType, - u32 verticesOut, IShaderConstantSetCallBack *callback, E_MATERIAL_TYPE baseMaterial, - s32 userData) override; - - //! Returns pointer to the IGPUProgrammingServices interface. - IGPUProgrammingServices *getGPUProgrammingServices() override; - - //! Returns a pointer to the IVideoDriver interface. - IVideoDriver *getVideoDriver() override; - - //! Returns the maximum amount of primitives - u32 getMaximalPrimitiveCount() const override; - - virtual ITexture *addRenderTargetTexture(const core::dimension2d &size, - const io::path &name, const ECOLOR_FORMAT format = ECF_UNKNOWN) override; - - //! Creates a render target texture for a cubemap - ITexture *addRenderTargetTextureCubemap(const irr::u32 sideLen, - const io::path &name, const ECOLOR_FORMAT format) override; - - virtual bool setRenderTargetEx(IRenderTarget *target, u16 clearFlag, SColor clearColor = SColor(255, 0, 0, 0), - f32 clearDepth = 1.f, u8 clearStencil = 0) override; - - void clearBuffers(u16 flag, SColor color = SColor(255, 0, 0, 0), f32 depth = 1.f, u8 stencil = 0) override; - - //! Returns an image created from the last rendered frame. - IImage *createScreenShot(video::ECOLOR_FORMAT format = video::ECF_UNKNOWN, video::E_RENDER_TARGET target = video::ERT_FRAME_BUFFER) override; - - //! checks if an OpenGL error has happened and prints it (+ some internal code which is usually the line number) - bool testGLError(int code = 0); - - //! Set/unset a clipping plane. - bool setClipPlane(u32 index, const core::plane3df &plane, bool enable = false) override; - - //! Enable/disable a clipping plane. - void enableClipPlane(u32 index, bool enable) override; - - //! Returns the graphics card vendor name. - core::stringc getVendorInfo() override - { - return VendorName; - } - - //! Get the maximal texture size for this driver - core::dimension2du getMaxTextureSize() const override; - - void removeTexture(ITexture *texture) override; - - //! Check if the driver supports creating textures with the given color format - bool queryTextureFormat(ECOLOR_FORMAT format) const override; - - //! Used by some SceneNodes to check if a material should be rendered in the transparent render pass - bool needsTransparentRenderPass(const irr::video::SMaterial &material) const override; - - //! Convert E_BLEND_FACTOR to OpenGL equivalent - GLenum getGLBlend(E_BLEND_FACTOR factor) const; - - //! Get ZBuffer bits. - GLenum getZBufferBits() const; - - bool getColorFormatParameters(ECOLOR_FORMAT format, GLint &internalFormat, GLenum &pixelFormat, - GLenum &pixelType, void (**converter)(const void *, s32, void *)) const; - - COGLES1CacheHandler *getCacheHandler() const; - -private: - void uploadClipPlane(u32 index); - - //! inits the opengl-es driver - bool genericDriverInit(const core::dimension2d &screenSize, bool stencilBuffer); - - ITexture *createDeviceDependentTexture(const io::path &name, IImage *image) override; - - ITexture *createDeviceDependentTextureCubemap(const io::path &name, const core::array &image) override; - - //! creates a transposed matrix in supplied GLfloat array to pass to OGLES1 - inline void getGLMatrix(GLfloat gl_matrix[16], const core::matrix4 &m); - inline void getGLTextureMatrix(GLfloat gl_matrix[16], const core::matrix4 &m); - - //! Set GL pipeline to desired texture wrap modes of the material - void setWrapMode(const SMaterial &material); - - //! Get OpenGL wrap enum from Irrlicht enum - GLint getTextureWrapMode(u8 clamp) const; - - //! sets the needed renderstates - void setRenderStates3DMode(); - - //! sets the needed renderstates - void setRenderStates2DMode(bool alpha, bool texture, bool alphaChannel); - - void createMaterialRenderers(); - - //! Assign a hardware light to the specified requested light, if any - //! free hardware lights exist. - //! \param[in] lightIndex: the index of the requesting light - void assignHardwareLight(u32 lightIndex); - - //! Same as `CacheHandler->setViewport`, but also sets `ViewPort` - virtual void setViewPortRaw(u32 width, u32 height); - - COGLES1CacheHandler *CacheHandler; - - core::stringc Name; - core::matrix4 Matrices[ETS_COUNT]; - core::array ColorBuffer; - - //! enumeration for rendering modes such as 2d and 3d for minimizing the switching of renderStates. - enum E_RENDER_MODE - { - ERM_NONE = 0, // no render state has been set yet. - ERM_2D, // 2d drawing rendermode - ERM_3D // 3d rendering mode - }; - - E_RENDER_MODE CurrentRenderMode; - //! bool to make all renderstates reset if set to true. - bool ResetRenderStates; - bool Transformation3DChanged; - u8 AntiAlias; - - SMaterial Material, LastMaterial; - core::array UserClipPlane; - std::vector UserClipPlaneEnabled; - - core::stringc VendorName; - - core::matrix4 TextureFlipMatrix; - - //! Color buffer format - ECOLOR_FORMAT ColorFormat; - - SIrrlichtCreationParameters Params; - - IContextManager *ContextManager; -}; - -} // end namespace video -} // end namespace irr - -#endif // _IRR_COMPILE_WITH_OGLES1_ diff --git a/irr/src/COGLESExtensionHandler.cpp b/irr/src/COGLESExtensionHandler.cpp deleted file mode 100644 index 82f8e9261..000000000 --- a/irr/src/COGLESExtensionHandler.cpp +++ /dev/null @@ -1,94 +0,0 @@ -// Copyright (C) 2008 Christian Stehno -// Heavily based on the OpenGL driver implemented by Nikolaus Gebhardt -// 2017 modified by Michael Zeilfelder (unifying extension handlers) -// This file is part of the "Irrlicht Engine". -// For conditions of distribution and use, see copyright notice in Irrlicht.h - -#include "COGLESExtensionHandler.h" - -#ifdef _IRR_COMPILE_WITH_OGLES1_ - -#include "irrString.h" -#include "SMaterial.h" -#include "fast_atof.h" - -#if defined(_IRR_COMPILE_WITH_WINDOWS_DEVICE_) -#include -#else -#include -#endif - -namespace irr -{ -namespace video -{ - -COGLES1ExtensionHandler::COGLES1ExtensionHandler() : - COGLESCoreExtensionHandler(), - MaxUserClipPlanes(0), MaxLights(0), pGlBlendEquationOES(0), pGlBlendFuncSeparateOES(0), - pGlBindFramebufferOES(0), pGlDeleteFramebuffersOES(0), - pGlGenFramebuffersOES(0), pGlCheckFramebufferStatusOES(0), - pGlFramebufferTexture2DOES(0), pGlGenerateMipmapOES(0) -{ -} - -void COGLES1ExtensionHandler::initExtensions() -{ - getGLVersion(); - - if (Version >= 100) - os::Printer::log("OpenGL ES driver version is 1.1.", ELL_INFORMATION); - else - os::Printer::log("OpenGL ES driver version is 1.0.", ELL_WARNING); - - getGLExtensions(); - - GLint val = 0; - - if (Version > 100 || FeatureAvailable[IRR_GL_IMG_user_clip_plane]) { - glGetIntegerv(GL_MAX_CLIP_PLANES, &val); - MaxUserClipPlanes = static_cast(val); - } - - glGetIntegerv(GL_MAX_LIGHTS, &val); - MaxLights = static_cast(val); - - glGetIntegerv(GL_MAX_TEXTURE_UNITS, &val); - Feature.MaxTextureUnits = static_cast(val); - -#ifdef GL_EXT_texture_filter_anisotropic - if (FeatureAvailable[IRR_GL_EXT_texture_filter_anisotropic]) { - glGetIntegerv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &val); - MaxAnisotropy = static_cast(val); - } -#endif -#ifdef GL_MAX_ELEMENTS_INDICES - glGetIntegerv(GL_MAX_ELEMENTS_INDICES, &val); - MaxIndices = val; -#endif - glGetIntegerv(GL_MAX_TEXTURE_SIZE, &val); - MaxTextureSize = static_cast(val); -#ifdef GL_EXT_texture_lod_bias - if (FeatureAvailable[IRR_GL_EXT_texture_lod_bias]) - glGetFloatv(GL_MAX_TEXTURE_LOD_BIAS_EXT, &MaxTextureLODBias); -#endif - glGetFloatv(GL_ALIASED_LINE_WIDTH_RANGE, DimAliasedLine); - glGetFloatv(GL_ALIASED_POINT_SIZE_RANGE, DimAliasedPoint); - - Feature.MaxTextureUnits = core::min_(Feature.MaxTextureUnits, static_cast(MATERIAL_MAX_TEXTURES)); - Feature.ColorAttachment = 1; - - pGlBlendEquationOES = (PFNGLBLENDEQUATIONOESPROC)eglGetProcAddress("glBlendEquationOES"); - pGlBlendFuncSeparateOES = (PFNGLBLENDFUNCSEPARATEOESPROC)eglGetProcAddress("glBlendFuncSeparateOES"); - pGlBindFramebufferOES = (PFNGLBINDFRAMEBUFFEROESPROC)eglGetProcAddress("glBindFramebufferOES"); - pGlDeleteFramebuffersOES = (PFNGLDELETEFRAMEBUFFERSOESPROC)eglGetProcAddress("glDeleteFramebuffersOES"); - pGlGenFramebuffersOES = (PFNGLGENFRAMEBUFFERSOESPROC)eglGetProcAddress("glGenFramebuffersOES"); - pGlCheckFramebufferStatusOES = (PFNGLCHECKFRAMEBUFFERSTATUSOESPROC)eglGetProcAddress("glCheckFramebufferStatusOES"); - pGlFramebufferTexture2DOES = (PFNGLFRAMEBUFFERTEXTURE2DOESPROC)eglGetProcAddress("glFramebufferTexture2DOES"); - pGlGenerateMipmapOES = (PFNGLGENERATEMIPMAPOESPROC)eglGetProcAddress("glGenerateMipmapOES"); -} - -} // end namespace video -} // end namespace irr - -#endif // _IRR_COMPILE_WITH_OGLES2_ diff --git a/irr/src/COGLESExtensionHandler.h b/irr/src/COGLESExtensionHandler.h deleted file mode 100644 index d9e1ac4bc..000000000 --- a/irr/src/COGLESExtensionHandler.h +++ /dev/null @@ -1,190 +0,0 @@ -// Copyright (C) 2008 Christian Stehno -// Heavily based on the OpenGL driver implemented by Nikolaus Gebhardt -// 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_OGLES1_ - -#include "EDriverFeatures.h" -#include "irrTypes.h" -#include "os.h" - -#include "COGLESCommon.h" - -#include "COGLESCoreExtensionHandler.h" - -namespace irr -{ -namespace video -{ - -class COGLES1ExtensionHandler : public COGLESCoreExtensionHandler -{ -public: - COGLES1ExtensionHandler(); - - void initExtensions(); - - bool queryFeature(video::E_VIDEO_DRIVER_FEATURE feature) const - { - switch (feature) { - case EVDF_RENDER_TO_TARGET: - case EVDF_HARDWARE_TL: - case EVDF_MULTITEXTURE: - case EVDF_BILINEAR_FILTER: - case EVDF_MIP_MAP: - case EVDF_TEXTURE_NSQUARE: - case EVDF_STENCIL_BUFFER: - case EVDF_ALPHA_TO_COVERAGE: - case EVDF_COLOR_MASK: - case EVDF_POLYGON_OFFSET: - case EVDF_TEXTURE_MATRIX: - return true; - case EVDF_TEXTURE_NPOT: - return FeatureAvailable[IRR_GL_APPLE_texture_2D_limited_npot] || FeatureAvailable[IRR_GL_OES_texture_npot]; - case EVDF_MIP_MAP_AUTO_UPDATE: - return Version > 100; - case EVDF_BLEND_OPERATIONS: - return FeatureAvailable[IRR_GL_OES_blend_subtract]; - case EVDF_BLEND_SEPARATE: - return FeatureAvailable[IRR_GL_OES_blend_func_separate]; - case EVDF_FRAMEBUFFER_OBJECT: - return FeatureAvailable[IRR_GL_OES_framebuffer_object]; - case EVDF_VERTEX_BUFFER_OBJECT: - return Version > 100; - default: - return true; - }; - } - - inline void irrGlActiveTexture(GLenum texture) - { - glActiveTexture(texture); - } - - inline void irrGlCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, - GLsizei imageSize, const void *data) - { - glCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data); - } - - inline void irrGlCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, - GLenum format, GLsizei imageSize, const void *data) - { - glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data); - } - - inline void irrGlUseProgram(GLuint prog) - { - } - - inline void irrGlBindFramebuffer(GLenum target, GLuint framebuffer) - { - if (pGlBindFramebufferOES) - pGlBindFramebufferOES(target, framebuffer); - } - - inline void irrGlDeleteFramebuffers(GLsizei n, const GLuint *framebuffers) - { - if (pGlDeleteFramebuffersOES) - pGlDeleteFramebuffersOES(n, framebuffers); - } - - inline void irrGlGenFramebuffers(GLsizei n, GLuint *framebuffers) - { - if (pGlGenFramebuffersOES) - pGlGenFramebuffersOES(n, framebuffers); - } - - inline GLenum irrGlCheckFramebufferStatus(GLenum target) - { - if (pGlCheckFramebufferStatusOES) - return pGlCheckFramebufferStatusOES(target); - else - return 0; - } - - inline void irrGlFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) - { - if (pGlFramebufferTexture2DOES) - pGlFramebufferTexture2DOES(target, attachment, textarget, texture, level); - } - - inline void irrGlGenerateMipmap(GLenum target) - { - if (pGlGenerateMipmapOES) - pGlGenerateMipmapOES(target); - } - - inline void irrGlActiveStencilFace(GLenum face) - { - } - - inline void irrGlDrawBuffer(GLenum mode) - { - } - - inline void irrGlDrawBuffers(GLsizei n, const GLenum *bufs) - { - } - - inline void irrGlBlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) - { - if (pGlBlendFuncSeparateOES) - pGlBlendFuncSeparateOES(srcRGB, dstRGB, srcAlpha, dstAlpha); - } - - inline void irrGlBlendEquation(GLenum mode) - { - if (pGlBlendEquationOES) - pGlBlendEquationOES(mode); - } - - inline void irrGlEnableIndexed(GLenum target, GLuint index) - { - } - - inline void irrGlDisableIndexed(GLenum target, GLuint index) - { - } - - inline void irrGlColorMaskIndexed(GLuint buf, GLboolean r, GLboolean g, GLboolean b, GLboolean a) - { - } - - inline void irrGlBlendFuncIndexed(GLuint buf, GLenum src, GLenum dst) - { - } - - inline void irrGlBlendFuncSeparateIndexed(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) - { - } - - inline void irrGlBlendEquationIndexed(GLuint buf, GLenum mode) - { - } - - inline void irrGlBlendEquationSeparateIndexed(GLuint buf, GLenum modeRGB, GLenum modeAlpha) - { - } - -protected: - u8 MaxUserClipPlanes; - u8 MaxLights; - - PFNGLBLENDEQUATIONOESPROC pGlBlendEquationOES; - PFNGLBLENDFUNCSEPARATEOESPROC pGlBlendFuncSeparateOES; - PFNGLBINDFRAMEBUFFEROESPROC pGlBindFramebufferOES; - PFNGLDELETEFRAMEBUFFERSOESPROC pGlDeleteFramebuffersOES; - PFNGLGENFRAMEBUFFERSOESPROC pGlGenFramebuffersOES; - PFNGLCHECKFRAMEBUFFERSTATUSOESPROC pGlCheckFramebufferStatusOES; - PFNGLFRAMEBUFFERTEXTURE2DOESPROC pGlFramebufferTexture2DOES; - PFNGLGENERATEMIPMAPOESPROC pGlGenerateMipmapOES; -}; - -} -} - -#endif diff --git a/irr/src/COGLESMaterialRenderer.h b/irr/src/COGLESMaterialRenderer.h deleted file mode 100644 index 69d1b81ff..000000000 --- a/irr/src/COGLESMaterialRenderer.h +++ /dev/null @@ -1,286 +0,0 @@ -// Copyright (C) 2002-2008 Nikolaus Gebhardt -// 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_OGLES1_ - -#include "COGLESDriver.h" -#include "IMaterialRenderer.h" - -namespace irr -{ -namespace video -{ - -//! Base class for all internal OGLES1 material renderers -class COGLES1MaterialRenderer : public IMaterialRenderer -{ -public: - //! Constructor - COGLES1MaterialRenderer(video::COGLES1Driver *driver) : - Driver(driver) - { - } - -protected: - video::COGLES1Driver *Driver; -}; - -//! Solid material renderer -class COGLES1MaterialRenderer_SOLID : public COGLES1MaterialRenderer -{ -public: - COGLES1MaterialRenderer_SOLID(video::COGLES1Driver *d) : - COGLES1MaterialRenderer(d) {} - - virtual void OnSetMaterial(const SMaterial &material, const SMaterial &lastMaterial, - bool resetAllRenderstates, IMaterialRendererServices *services) - { - Driver->setBasicRenderStates(material, lastMaterial, resetAllRenderstates); - - if (resetAllRenderstates || (material.MaterialType != lastMaterial.MaterialType)) { - // thanks to Murphy, the following line removed some - // bugs with several OGLES1 implementations. - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - } - } -}; - -//! Generic Texture Blend -class COGLES1MaterialRenderer_ONETEXTURE_BLEND : public COGLES1MaterialRenderer -{ -public: - COGLES1MaterialRenderer_ONETEXTURE_BLEND(video::COGLES1Driver *d) : - COGLES1MaterialRenderer(d) {} - - virtual void OnSetMaterial(const SMaterial &material, const SMaterial &lastMaterial, - bool resetAllRenderstates, IMaterialRendererServices *services) - { - Driver->setBasicRenderStates(material, lastMaterial, resetAllRenderstates); - - // if (material.MaterialType != lastMaterial.MaterialType || - // material.MaterialTypeParam != lastMaterial.MaterialTypeParam || - // resetAllRenderstates) - { - E_BLEND_FACTOR srcRGBFact, dstRGBFact, srcAlphaFact, dstAlphaFact; - E_MODULATE_FUNC modulate; - u32 alphaSource; - unpack_textureBlendFuncSeparate(srcRGBFact, dstRGBFact, srcAlphaFact, dstAlphaFact, modulate, alphaSource, material.MaterialTypeParam); - - Driver->getCacheHandler()->setBlend(true); - - if (Driver->queryFeature(EVDF_BLEND_SEPARATE)) { - Driver->getCacheHandler()->setBlendFuncSeparate(Driver->getGLBlend(srcRGBFact), Driver->getGLBlend(dstRGBFact), - Driver->getGLBlend(srcAlphaFact), Driver->getGLBlend(dstAlphaFact)); - } else { - Driver->getCacheHandler()->setBlendFunc(Driver->getGLBlend(srcRGBFact), Driver->getGLBlend(dstRGBFact)); - } - - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); - glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE); - glTexEnvf(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_TEXTURE); - glTexEnvf(GL_TEXTURE_ENV, GL_SRC1_RGB, GL_PREVIOUS); - - glTexEnvf(GL_TEXTURE_ENV, GL_RGB_SCALE, (f32)modulate); - - glEnable(GL_ALPHA_TEST); - glAlphaFunc(GL_GREATER, 0.f); - - if (textureBlendFunc_hasAlpha(srcRGBFact) || textureBlendFunc_hasAlpha(dstRGBFact) || - textureBlendFunc_hasAlpha(srcAlphaFact) || textureBlendFunc_hasAlpha(dstAlphaFact)) { - glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE); - glTexEnvf(GL_TEXTURE_ENV, GL_SRC0_ALPHA, GL_TEXTURE); - - glTexEnvf(GL_TEXTURE_ENV, GL_SRC1_RGB, GL_PRIMARY_COLOR); - } - } - } - - virtual void OnUnsetMaterial() - { - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - glTexEnvf(GL_TEXTURE_ENV, GL_RGB_SCALE, 1.f); - glTexEnvf(GL_TEXTURE_ENV, GL_SRC1_RGB, GL_PREVIOUS); - - Driver->getCacheHandler()->setBlend(false); - glDisable(GL_ALPHA_TEST); - } - - //! Returns if the material is transparent. - /** Is not always transparent, but mostly. */ - virtual bool isTransparent() const - { - return true; - } - -private: - u32 getGLBlend(E_BLEND_FACTOR factor) const - { - u32 r = 0; - switch (factor) { - case EBF_ZERO: - r = GL_ZERO; - break; - case EBF_ONE: - r = GL_ONE; - break; - case EBF_DST_COLOR: - r = GL_DST_COLOR; - break; - case EBF_ONE_MINUS_DST_COLOR: - r = GL_ONE_MINUS_DST_COLOR; - break; - case EBF_SRC_COLOR: - r = GL_SRC_COLOR; - break; - case EBF_ONE_MINUS_SRC_COLOR: - r = GL_ONE_MINUS_SRC_COLOR; - break; - case EBF_SRC_ALPHA: - r = GL_SRC_ALPHA; - break; - case EBF_ONE_MINUS_SRC_ALPHA: - r = GL_ONE_MINUS_SRC_ALPHA; - break; - case EBF_DST_ALPHA: - r = GL_DST_ALPHA; - break; - case EBF_ONE_MINUS_DST_ALPHA: - r = GL_ONE_MINUS_DST_ALPHA; - break; - case EBF_SRC_ALPHA_SATURATE: - r = GL_SRC_ALPHA_SATURATE; - break; - } - return r; - } -}; - -//! Transparent vertex alpha material renderer -class COGLES1MaterialRenderer_TRANSPARENT_VERTEX_ALPHA : public COGLES1MaterialRenderer -{ -public: - COGLES1MaterialRenderer_TRANSPARENT_VERTEX_ALPHA(video::COGLES1Driver *d) : - COGLES1MaterialRenderer(d) {} - - virtual void OnSetMaterial(const SMaterial &material, const SMaterial &lastMaterial, - bool resetAllRenderstates, IMaterialRendererServices *services) - { - Driver->setBasicRenderStates(material, lastMaterial, resetAllRenderstates); - - Driver->getCacheHandler()->setBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); - Driver->getCacheHandler()->setBlend(true); - - if (material.MaterialType != lastMaterial.MaterialType || resetAllRenderstates) { - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); - - glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE); - glTexEnvf(GL_TEXTURE_ENV, GL_SRC0_ALPHA, GL_PRIMARY_COLOR); - - glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE); - glTexEnvf(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_PRIMARY_COLOR); - glTexEnvf(GL_TEXTURE_ENV, GL_SRC1_RGB, GL_TEXTURE); - } - } - - virtual void OnUnsetMaterial() - { - // default values - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_MODULATE); - glTexEnvf(GL_TEXTURE_ENV, GL_SRC0_ALPHA, GL_TEXTURE); - glTexEnvf(GL_TEXTURE_ENV, GL_SRC1_ALPHA, GL_PREVIOUS); - glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE); - glTexEnvf(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_TEXTURE); - glTexEnvf(GL_TEXTURE_ENV, GL_SRC1_RGB, GL_PREVIOUS); - - Driver->getCacheHandler()->setBlend(false); - } - - //! Returns if the material is transparent. - virtual bool isTransparent() const - { - return true; - } -}; - -//! Transparent alpha channel material renderer -class COGLES1MaterialRenderer_TRANSPARENT_ALPHA_CHANNEL : public COGLES1MaterialRenderer -{ -public: - COGLES1MaterialRenderer_TRANSPARENT_ALPHA_CHANNEL(video::COGLES1Driver *d) : - COGLES1MaterialRenderer(d) {} - - virtual void OnSetMaterial(const SMaterial &material, const SMaterial &lastMaterial, - bool resetAllRenderstates, IMaterialRendererServices *services) - { - Driver->setBasicRenderStates(material, lastMaterial, resetAllRenderstates); - - Driver->getCacheHandler()->setBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - Driver->getCacheHandler()->setBlend(true); - - if (material.MaterialType != lastMaterial.MaterialType || resetAllRenderstates || material.MaterialTypeParam != lastMaterial.MaterialTypeParam) { - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); - glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE); - glTexEnvf(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_TEXTURE); - glTexEnvf(GL_TEXTURE_ENV, GL_SRC1_RGB, GL_PREVIOUS); - - glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE); - glTexEnvf(GL_TEXTURE_ENV, GL_SRC0_ALPHA, GL_TEXTURE); - - glEnable(GL_ALPHA_TEST); - - glAlphaFunc(GL_GREATER, material.MaterialTypeParam); - } - } - - virtual void OnUnsetMaterial() - { - glDisable(GL_ALPHA_TEST); - Driver->getCacheHandler()->setBlend(false); - } - - //! Returns if the material is transparent. - virtual bool isTransparent() const - { - return true; - } -}; - -//! Transparent alpha channel material renderer -class COGLES1MaterialRenderer_TRANSPARENT_ALPHA_CHANNEL_REF : public COGLES1MaterialRenderer -{ -public: - COGLES1MaterialRenderer_TRANSPARENT_ALPHA_CHANNEL_REF(video::COGLES1Driver *d) : - COGLES1MaterialRenderer(d) {} - - virtual void OnSetMaterial(const SMaterial &material, const SMaterial &lastMaterial, - bool resetAllRenderstates, IMaterialRendererServices *services) - { - Driver->setBasicRenderStates(material, lastMaterial, resetAllRenderstates); - - if (material.MaterialType != lastMaterial.MaterialType || resetAllRenderstates) { - glEnable(GL_ALPHA_TEST); - glAlphaFunc(GL_GREATER, 0.5f); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - } - } - - virtual void OnUnsetMaterial() - { - glDisable(GL_ALPHA_TEST); - } - - //! Returns if the material is transparent. - virtual bool isTransparent() const - { - return false; // this material is not really transparent because it does no blending. - } -}; - -} // end namespace video -} // end namespace irr - -#endif diff --git a/irr/src/COpenGLCoreCacheHandler.h b/irr/src/COpenGLCoreCacheHandler.h index ae3661313..a1277bfed 100644 --- a/irr/src/COpenGLCoreCacheHandler.h +++ b/irr/src/COpenGLCoreCacheHandler.h @@ -84,12 +84,12 @@ class COpenGLCoreCacheHandler if (curTextureType != prevTextureType) { GL.BindTexture(prevTextureType, 0); -#if (defined(IRR_COMPILE_GL_COMMON) || defined(IRR_COMPILE_GLES_COMMON)) +#if defined(IRR_COMPILE_GL_COMMON) GL.Disable(prevTextureType); GL.Enable(curTextureType); #endif } -#if (defined(IRR_COMPILE_GL_COMMON) || defined(IRR_COMPILE_GLES_COMMON)) +#if defined(IRR_COMPILE_GL_COMMON) else if (!prevTexture) GL.Enable(curTextureType); #endif @@ -109,7 +109,7 @@ class COpenGLCoreCacheHandler GL.BindTexture(prevTextureType, 0); -#if (defined(IRR_COMPILE_GL_COMMON) || defined(IRR_COMPILE_GLES_COMMON)) +#if defined(IRR_COMPILE_GL_COMMON) GL.Disable(prevTextureType); #endif } @@ -222,7 +222,7 @@ public: Driver->irrGlActiveTexture(ActiveTexture); -#if (defined(IRR_COMPILE_GL_COMMON) || defined(IRR_COMPILE_GLES_COMMON)) +#if defined(IRR_COMPILE_GL_COMMON) GL.Disable(GL_TEXTURE_2D); #endif diff --git a/irr/src/COpenGLCoreTexture.h b/irr/src/COpenGLCoreTexture.h index 79a855cc1..95cac4c22 100644 --- a/irr/src/COpenGLCoreTexture.h +++ b/irr/src/COpenGLCoreTexture.h @@ -4,7 +4,7 @@ #pragma once -#include "irrArray.h" +#include #include "SMaterialLayer.h" #include "ITexture.h" #include "EDriverFeatures.h" @@ -43,19 +43,19 @@ public: bool IsCached; }; - COpenGLCoreTexture(const io::path &name, const core::array &images, E_TEXTURE_TYPE type, TOpenGLDriver *driver) : + COpenGLCoreTexture(const io::path &name, const std::vector &srcImages, E_TEXTURE_TYPE type, TOpenGLDriver *driver) : ITexture(name, type), Driver(driver), TextureType(GL_TEXTURE_2D), TextureName(0), InternalFormat(GL_RGBA), PixelFormat(GL_RGBA), PixelType(GL_UNSIGNED_BYTE), Converter(0), LockReadOnly(false), LockImage(0), LockLayer(0), KeepImage(false), MipLevelStored(0), LegacyAutoGenerateMipMaps(false) { - _IRR_DEBUG_BREAK_IF(images.size() == 0) + _IRR_DEBUG_BREAK_IF(srcImages.empty()) DriverType = Driver->getDriverType(); TextureType = TextureTypeIrrToGL(Type); HasMipMaps = Driver->getTextureCreationFlag(ETCF_CREATE_MIP_MAPS); KeepImage = Driver->getTextureCreationFlag(ETCF_ALLOW_MEMORY_COPY); - getImageValues(images[0]); + getImageValues(srcImages[0]); if (!InternalFormat) return; @@ -71,22 +71,22 @@ public: os::Printer::log(lbuf, ELL_DEBUG); #endif - const core::array *tmpImages = &images; + const auto *tmpImages = &srcImages; if (KeepImage || OriginalSize != Size || OriginalColorFormat != ColorFormat) { - Images.set_used(images.size()); + Images.resize(srcImages.size()); - for (u32 i = 0; i < images.size(); ++i) { + for (size_t i = 0; i < srcImages.size(); ++i) { Images[i] = Driver->createImage(ColorFormat, Size); - if (images[i]->getDimension() == Size) - images[i]->copyTo(Images[i]); + if (srcImages[i]->getDimension() == Size) + srcImages[i]->copyTo(Images[i]); else - images[i]->copyToScaling(Images[i]); + srcImages[i]->copyToScaling(Images[i]); - if (images[i]->getMipMapsData()) { + if (srcImages[i]->getMipMapsData()) { if (OriginalSize == Size && OriginalColorFormat == ColorFormat) { - Images[i]->setMipMapsData(images[i]->getMipMapsData(), false); + Images[i]->setMipMapsData(srcImages[i]->getMipMapsData(), false); } else { // TODO: handle at least mipmap with changing color format os::Printer::log("COpenGLCoreTexture: Can't handle format changes for mipmap data. Mipmap data dropped", ELL_WARNING); @@ -118,19 +118,19 @@ public: TEST_GL_ERROR(Driver); - for (u32 i = 0; i < (*tmpImages).size(); ++i) + for (size_t i = 0; i < tmpImages->size(); ++i) uploadTexture(true, i, 0, (*tmpImages)[i]->getData()); if (HasMipMaps && !LegacyAutoGenerateMipMaps) { // Create mipmaps (either from image mipmaps or generate them) - for (u32 i = 0; i < (*tmpImages).size(); ++i) { + for (size_t i = 0; i < tmpImages->size(); ++i) { void *mipmapsData = (*tmpImages)[i]->getMipMapsData(); regenerateMipMapLevels(mipmapsData, i); } } if (!KeepImage) { - for (u32 i = 0; i < Images.size(); ++i) + for (size_t i = 0; i < Images.size(); ++i) Images[i]->drop(); Images.clear(); @@ -227,8 +227,8 @@ public: if (LockImage) LockImage->drop(); - for (u32 i = 0; i < Images.size(); ++i) - Images[i]->drop(); + for (auto *image : Images) + image->drop(); } void *lock(E_TEXTURE_LOCK_MODE mode = ETLM_READ_WRITE, u32 mipmapLevel = 0, u32 layer = 0, E_TEXTURE_LOCK_FLAGS lockFlags = ETLF_FLIP_Y_UP_RTT) override @@ -296,8 +296,7 @@ public: delete[] tmpBuffer; } -#elif (defined(IRR_COMPILE_GLES2_COMMON) || defined(IRR_COMPILE_GLES_COMMON)) - // TODO: on ES2 we can likely also work with glCopyTexImage2D instead of rendering which should be faster. +#elif defined(IRR_COMPILE_GLES2_COMMON) COpenGLCoreTexture *tmpTexture = new COpenGLCoreTexture("OGL_CORE_LOCK_TEXTURE", Size, ETT_2D, ColorFormat, Driver); GLuint tmpFBO = 0; @@ -621,7 +620,7 @@ protected: u32 LockLayer; bool KeepImage; - core::array Images; + std::vector Images; u8 MipLevelStored; bool LegacyAutoGenerateMipMaps; diff --git a/irr/src/COpenGLDriver.cpp b/irr/src/COpenGLDriver.cpp index 0d3f18e2b..e5f070f8e 100644 --- a/irr/src/COpenGLDriver.cpp +++ b/irr/src/COpenGLDriver.cpp @@ -122,7 +122,6 @@ bool COpenGLDriver::genericDriverInit() DriverAttributes->setAttribute("MaxSupportedTextures", (s32)Feature.MaxTextureUnits); DriverAttributes->setAttribute("MaxLights", MaxLights); DriverAttributes->setAttribute("MaxAnisotropy", MaxAnisotropy); - DriverAttributes->setAttribute("MaxUserClipPlanes", MaxUserClipPlanes); DriverAttributes->setAttribute("MaxAuxBuffers", MaxAuxBuffers); DriverAttributes->setAttribute("MaxMultipleRenderTargets", (s32)Feature.MultipleRenderTarget); DriverAttributes->setAttribute("MaxIndices", (s32)MaxIndices); @@ -135,10 +134,6 @@ bool COpenGLDriver::genericDriverInit() glPixelStorei(GL_PACK_ALIGNMENT, 1); - UserClipPlanes.reallocate(MaxUserClipPlanes); - for (i = 0; i < MaxUserClipPlanes; ++i) - UserClipPlanes.push_back(SUserClipPlane()); - for (i = 0; i < ETS_COUNT; ++i) setTransform(static_cast(i), core::IdentityMatrix); @@ -244,11 +239,6 @@ void COpenGLDriver::setTransform(E_TRANSFORMATION_STATE state, const core::matri // first load the viewing transformation for user clip planes glLoadMatrixf((Matrices[ETS_VIEW]).pointer()); - // we have to update the clip planes to the latest view matrix - for (u32 i = 0; i < MaxUserClipPlanes; ++i) - if (UserClipPlanes[i].Enabled) - uploadClipPlane(i); - // now the real model-view matrix glMultMatrixf(Matrices[ETS_WORLD].pointer()); } break; @@ -270,12 +260,14 @@ bool COpenGLDriver::updateVertexHardwareBuffer(SHWBufferLink_opengl *HWBuffer) return false; #if defined(GL_ARB_vertex_buffer_object) - const scene::IMeshBuffer *mb = HWBuffer->MeshBuffer; - const void *vertices = mb->getVertices(); - const u32 vertexCount = mb->getVertexCount(); - const E_VERTEX_TYPE vType = mb->getVertexType(); + const auto *vb = HWBuffer->VertexBuffer; + const void *vertices = vb->getData(); + const u32 vertexCount = vb->getCount(); + const E_VERTEX_TYPE vType = vb->getType(); const u32 vertexSize = getVertexPitchFromType(vType); + accountHWBufferUpload(vertexSize * vertexCount); + const c8 *vbuf = static_cast(vertices); core::array buffer; if (!FeatureAvailable[IRR_ARB_vertex_array_bgra] && !FeatureAvailable[IRR_EXT_vertex_array_bgra]) { @@ -315,26 +307,26 @@ bool COpenGLDriver::updateVertexHardwareBuffer(SHWBufferLink_opengl *HWBuffer) // get or create buffer bool newBuffer = false; - if (!HWBuffer->vbo_verticesID) { - extGlGenBuffers(1, &HWBuffer->vbo_verticesID); - if (!HWBuffer->vbo_verticesID) + if (!HWBuffer->vbo_ID) { + extGlGenBuffers(1, &HWBuffer->vbo_ID); + if (!HWBuffer->vbo_ID) return false; newBuffer = true; - } else if (HWBuffer->vbo_verticesSize < vertexCount * vertexSize) { + } else if (HWBuffer->vbo_Size < vertexCount * vertexSize) { newBuffer = true; } - extGlBindBuffer(GL_ARRAY_BUFFER, HWBuffer->vbo_verticesID); + extGlBindBuffer(GL_ARRAY_BUFFER, HWBuffer->vbo_ID); // copy data to graphics card if (!newBuffer) extGlBufferSubData(GL_ARRAY_BUFFER, 0, vertexCount * vertexSize, vbuf); else { - HWBuffer->vbo_verticesSize = vertexCount * vertexSize; + HWBuffer->vbo_Size = vertexCount * vertexSize; - if (HWBuffer->Mapped_Vertex == scene::EHM_STATIC) + if (vb->getHardwareMappingHint() == scene::EHM_STATIC) extGlBufferData(GL_ARRAY_BUFFER, vertexCount * vertexSize, vbuf, GL_STATIC_DRAW); - else if (HWBuffer->Mapped_Vertex == scene::EHM_DYNAMIC) + else if (vb->getHardwareMappingHint() == scene::EHM_DYNAMIC) extGlBufferData(GL_ARRAY_BUFFER, vertexCount * vertexSize, vbuf, GL_DYNAMIC_DRAW); else // scene::EHM_STREAM extGlBufferData(GL_ARRAY_BUFFER, vertexCount * vertexSize, vbuf, GL_STREAM_DRAW); @@ -357,13 +349,13 @@ bool COpenGLDriver::updateIndexHardwareBuffer(SHWBufferLink_opengl *HWBuffer) return false; #if defined(GL_ARB_vertex_buffer_object) - const scene::IMeshBuffer *mb = HWBuffer->MeshBuffer; + const auto *ib = HWBuffer->IndexBuffer; - const void *indices = mb->getIndices(); - u32 indexCount = mb->getIndexCount(); + const void *indices = ib->getData(); + u32 indexCount = ib->getCount(); GLenum indexSize; - switch (mb->getIndexType()) { + switch (ib->getType()) { case EIT_16BIT: { indexSize = sizeof(u16); break; @@ -377,28 +369,30 @@ bool COpenGLDriver::updateIndexHardwareBuffer(SHWBufferLink_opengl *HWBuffer) } } + accountHWBufferUpload(indexCount * indexSize); + // get or create buffer bool newBuffer = false; - if (!HWBuffer->vbo_indicesID) { - extGlGenBuffers(1, &HWBuffer->vbo_indicesID); - if (!HWBuffer->vbo_indicesID) + if (!HWBuffer->vbo_ID) { + extGlGenBuffers(1, &HWBuffer->vbo_ID); + if (!HWBuffer->vbo_ID) return false; newBuffer = true; - } else if (HWBuffer->vbo_indicesSize < indexCount * indexSize) { + } else if (HWBuffer->vbo_Size < indexCount * indexSize) { newBuffer = true; } - extGlBindBuffer(GL_ELEMENT_ARRAY_BUFFER, HWBuffer->vbo_indicesID); + extGlBindBuffer(GL_ELEMENT_ARRAY_BUFFER, HWBuffer->vbo_ID); // copy data to graphics card if (!newBuffer) extGlBufferSubData(GL_ELEMENT_ARRAY_BUFFER, 0, indexCount * indexSize, indices); else { - HWBuffer->vbo_indicesSize = indexCount * indexSize; + HWBuffer->vbo_Size = indexCount * indexSize; - if (HWBuffer->Mapped_Index == scene::EHM_STATIC) + if (ib->getHardwareMappingHint() == scene::EHM_STATIC) extGlBufferData(GL_ELEMENT_ARRAY_BUFFER, indexCount * indexSize, indices, GL_STATIC_DRAW); - else if (HWBuffer->Mapped_Index == scene::EHM_DYNAMIC) + else if (ib->getHardwareMappingHint() == scene::EHM_DYNAMIC) extGlBufferData(GL_ELEMENT_ARRAY_BUFFER, indexCount * indexSize, indices, GL_DYNAMIC_DRAW); else // scene::EHM_STREAM extGlBufferData(GL_ELEMENT_ARRAY_BUFFER, indexCount * indexSize, indices, GL_STREAM_DRAW); @@ -418,51 +412,62 @@ bool COpenGLDriver::updateHardwareBuffer(SHWBufferLink *HWBuffer) if (!HWBuffer) return false; - if (HWBuffer->Mapped_Vertex != scene::EHM_NEVER) { - if (HWBuffer->ChangedID_Vertex != HWBuffer->MeshBuffer->getChangedID_Vertex() || !((SHWBufferLink_opengl *)HWBuffer)->vbo_verticesID) { + auto *b = static_cast(HWBuffer); - HWBuffer->ChangedID_Vertex = HWBuffer->MeshBuffer->getChangedID_Vertex(); - - if (!updateVertexHardwareBuffer((SHWBufferLink_opengl *)HWBuffer)) + if (b->IsVertex) { + assert(b->VertexBuffer); + if (b->ChangedID != b->VertexBuffer->getChangedID() || !b->vbo_ID) { + if (!updateVertexHardwareBuffer(b)) return false; + b->ChangedID = b->VertexBuffer->getChangedID(); + } + } else { + assert(b->IndexBuffer); + if (b->ChangedID != b->IndexBuffer->getChangedID() || !b->vbo_ID) { + if (!updateIndexHardwareBuffer(b)) + return false; + b->ChangedID = b->IndexBuffer->getChangedID(); } } - - if (HWBuffer->Mapped_Index != scene::EHM_NEVER) { - if (HWBuffer->ChangedID_Index != HWBuffer->MeshBuffer->getChangedID_Index() || !((SHWBufferLink_opengl *)HWBuffer)->vbo_indicesID) { - - HWBuffer->ChangedID_Index = HWBuffer->MeshBuffer->getChangedID_Index(); - - if (!updateIndexHardwareBuffer((SHWBufferLink_opengl *)HWBuffer)) - return false; - } - } - return true; } //! Create hardware buffer from meshbuffer -COpenGLDriver::SHWBufferLink *COpenGLDriver::createHardwareBuffer(const scene::IMeshBuffer *mb) +COpenGLDriver::SHWBufferLink *COpenGLDriver::createHardwareBuffer(const scene::IVertexBuffer *vb) { #if defined(GL_ARB_vertex_buffer_object) - if (!mb || (mb->getHardwareMappingHint_Index() == scene::EHM_NEVER && mb->getHardwareMappingHint_Vertex() == scene::EHM_NEVER)) + if (!vb || vb->getHardwareMappingHint() == scene::EHM_NEVER) return 0; - SHWBufferLink_opengl *HWBuffer = new SHWBufferLink_opengl(mb); + SHWBufferLink_opengl *HWBuffer = new SHWBufferLink_opengl(vb); // add to map HWBuffer->listPosition = HWBufferList.insert(HWBufferList.end(), HWBuffer); - HWBuffer->ChangedID_Vertex = HWBuffer->MeshBuffer->getChangedID_Vertex(); - HWBuffer->ChangedID_Index = HWBuffer->MeshBuffer->getChangedID_Index(); - HWBuffer->Mapped_Vertex = mb->getHardwareMappingHint_Vertex(); - HWBuffer->Mapped_Index = mb->getHardwareMappingHint_Index(); - HWBuffer->vbo_verticesID = 0; - HWBuffer->vbo_indicesID = 0; - HWBuffer->vbo_verticesSize = 0; - HWBuffer->vbo_indicesSize = 0; + if (!updateVertexHardwareBuffer(HWBuffer)) { + deleteHardwareBuffer(HWBuffer); + return 0; + } - if (!updateHardwareBuffer(HWBuffer)) { + return HWBuffer; +#else + return 0; +#endif +} + +//! Create hardware buffer from meshbuffer +COpenGLDriver::SHWBufferLink *COpenGLDriver::createHardwareBuffer(const scene::IIndexBuffer *ib) +{ +#if defined(GL_ARB_vertex_buffer_object) + if (!ib || ib->getHardwareMappingHint() == scene::EHM_NEVER) + return 0; + + SHWBufferLink_opengl *HWBuffer = new SHWBufferLink_opengl(ib); + + // add to map + HWBuffer->listPosition = HWBufferList.insert(HWBufferList.end(), HWBuffer); + + if (!updateIndexHardwareBuffer(HWBuffer)) { deleteHardwareBuffer(HWBuffer); return 0; } @@ -479,51 +484,51 @@ void COpenGLDriver::deleteHardwareBuffer(SHWBufferLink *_HWBuffer) return; #if defined(GL_ARB_vertex_buffer_object) - SHWBufferLink_opengl *HWBuffer = (SHWBufferLink_opengl *)_HWBuffer; - if (HWBuffer->vbo_verticesID) { - extGlDeleteBuffers(1, &HWBuffer->vbo_verticesID); - HWBuffer->vbo_verticesID = 0; - } - if (HWBuffer->vbo_indicesID) { - extGlDeleteBuffers(1, &HWBuffer->vbo_indicesID); - HWBuffer->vbo_indicesID = 0; + auto *HWBuffer = (SHWBufferLink_opengl *)_HWBuffer; + if (HWBuffer->vbo_ID) { + extGlDeleteBuffers(1, &HWBuffer->vbo_ID); + HWBuffer->vbo_ID = 0; } #endif CNullDriver::deleteHardwareBuffer(_HWBuffer); } -//! Draw hardware buffer -void COpenGLDriver::drawHardwareBuffer(SHWBufferLink *_HWBuffer) +void COpenGLDriver::drawBuffers(const scene::IVertexBuffer *vb, + const scene::IIndexBuffer *ib, u32 PrimitiveCount, + scene::E_PRIMITIVE_TYPE PrimitiveType) { - if (!_HWBuffer) + if (!vb || !ib) return; - updateHardwareBuffer(_HWBuffer); // check if update is needed - #if defined(GL_ARB_vertex_buffer_object) - SHWBufferLink_opengl *HWBuffer = (SHWBufferLink_opengl *)_HWBuffer; + auto *hwvert = (SHWBufferLink_opengl *) getBufferLink(vb); + auto *hwidx = (SHWBufferLink_opengl *) getBufferLink(ib); + updateHardwareBuffer(hwvert); + updateHardwareBuffer(hwidx); - const scene::IMeshBuffer *mb = HWBuffer->MeshBuffer; - const void *vertices = mb->getVertices(); - const void *indexList = mb->getIndices(); - - if (HWBuffer->Mapped_Vertex != scene::EHM_NEVER) { - extGlBindBuffer(GL_ARRAY_BUFFER, HWBuffer->vbo_verticesID); + const void *vertices = vb->getData(); + if (hwvert) { + extGlBindBuffer(GL_ARRAY_BUFFER, hwvert->vbo_ID); vertices = 0; } - if (HWBuffer->Mapped_Index != scene::EHM_NEVER) { - extGlBindBuffer(GL_ELEMENT_ARRAY_BUFFER, HWBuffer->vbo_indicesID); + const void *indexList = ib->getData(); + if (hwidx) { + extGlBindBuffer(GL_ELEMENT_ARRAY_BUFFER, hwidx->vbo_ID); indexList = 0; } - drawVertexPrimitiveList(vertices, mb->getVertexCount(), indexList, mb->getPrimitiveCount(), mb->getVertexType(), mb->getPrimitiveType(), mb->getIndexType()); + drawVertexPrimitiveList(vertices, vb->getCount(), indexList, + PrimitiveCount, vb->getType(), PrimitiveType, ib->getType()); - if (HWBuffer->Mapped_Vertex != scene::EHM_NEVER) + if (hwvert) extGlBindBuffer(GL_ARRAY_BUFFER, 0); - if (HWBuffer->Mapped_Index != scene::EHM_NEVER) + if (hwidx) extGlBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); +#else + drawVertexPrimitiveList(vb->getData(), vb->getCount(), ib->getData(), + PrimitiveCount, vb->getType(), PrimitiveType, ib->getType()); #endif } @@ -1597,15 +1602,14 @@ inline void COpenGLDriver::getGLTextureMatrix(GLfloat *o, const core::matrix4 &m ITexture *COpenGLDriver::createDeviceDependentTexture(const io::path &name, IImage *image) { - core::array imageArray(1); - imageArray.push_back(image); + std::vector tmp { image }; - COpenGLTexture *texture = new COpenGLTexture(name, imageArray, ETT_2D, this); + COpenGLTexture *texture = new COpenGLTexture(name, tmp, ETT_2D, this); return texture; } -ITexture *COpenGLDriver::createDeviceDependentTextureCubemap(const io::path &name, const core::array &image) +ITexture *COpenGLDriver::createDeviceDependentTextureCubemap(const io::path &name, const std::vector &image) { COpenGLTexture *texture = new COpenGLTexture(name, image, ETT_CUBEMAP, this); @@ -1836,112 +1840,11 @@ void COpenGLDriver::setBasicRenderStates(const SMaterial &material, const SMater E_OPENGL_FIXED_PIPELINE_STATE tempState = FixedPipelineState; if (resetAllRenderStates || tempState == EOFPS_ENABLE || tempState == EOFPS_DISABLE_TO_ENABLE) { - // material colors - if (resetAllRenderStates || tempState == EOFPS_DISABLE_TO_ENABLE || - lastmaterial.ColorMaterial != material.ColorMaterial) { - switch (material.ColorMaterial) { - case ECM_NONE: - glDisable(GL_COLOR_MATERIAL); - break; - case ECM_DIFFUSE: - glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE); - break; - case ECM_AMBIENT: - glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT); - break; - case ECM_EMISSIVE: - glColorMaterial(GL_FRONT_AND_BACK, GL_EMISSION); - break; - case ECM_SPECULAR: - glColorMaterial(GL_FRONT_AND_BACK, GL_SPECULAR); - break; - case ECM_DIFFUSE_AND_AMBIENT: - glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE); - break; - } - if (material.ColorMaterial != ECM_NONE) - glEnable(GL_COLOR_MATERIAL); - } - - if (resetAllRenderStates || tempState == EOFPS_DISABLE_TO_ENABLE || - lastmaterial.AmbientColor != material.AmbientColor || - lastmaterial.DiffuseColor != material.DiffuseColor || - lastmaterial.EmissiveColor != material.EmissiveColor || - lastmaterial.ColorMaterial != material.ColorMaterial) { - GLfloat color[4]; - - const f32 inv = 1.0f / 255.0f; - - if ((material.ColorMaterial != video::ECM_AMBIENT) && - (material.ColorMaterial != video::ECM_DIFFUSE_AND_AMBIENT)) { - color[0] = material.AmbientColor.getRed() * inv; - color[1] = material.AmbientColor.getGreen() * inv; - color[2] = material.AmbientColor.getBlue() * inv; - color[3] = material.AmbientColor.getAlpha() * inv; - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, color); - } - - if ((material.ColorMaterial != video::ECM_DIFFUSE) && - (material.ColorMaterial != video::ECM_DIFFUSE_AND_AMBIENT)) { - color[0] = material.DiffuseColor.getRed() * inv; - color[1] = material.DiffuseColor.getGreen() * inv; - color[2] = material.DiffuseColor.getBlue() * inv; - color[3] = material.DiffuseColor.getAlpha() * inv; - glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, color); - } - - if (material.ColorMaterial != video::ECM_EMISSIVE) { - color[0] = material.EmissiveColor.getRed() * inv; - color[1] = material.EmissiveColor.getGreen() * inv; - color[2] = material.EmissiveColor.getBlue() * inv; - color[3] = material.EmissiveColor.getAlpha() * inv; - glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, color); - } - } - - if (resetAllRenderStates || tempState == EOFPS_DISABLE_TO_ENABLE || - lastmaterial.SpecularColor != material.SpecularColor || - lastmaterial.Shininess != material.Shininess || - lastmaterial.ColorMaterial != material.ColorMaterial) { - GLfloat color[4] = {0.f, 0.f, 0.f, 1.f}; - const f32 inv = 1.0f / 255.0f; - - glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, material.Shininess); - // disable Specular colors if no shininess is set - if ((material.Shininess != 0.0f) && - (material.ColorMaterial != video::ECM_SPECULAR)) { -#ifdef GL_EXT_separate_specular_color - if (FeatureAvailable[IRR_EXT_separate_specular_color]) - glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL, GL_SEPARATE_SPECULAR_COLOR); -#endif - color[0] = material.SpecularColor.getRed() * inv; - color[1] = material.SpecularColor.getGreen() * inv; - color[2] = material.SpecularColor.getBlue() * inv; - color[3] = material.SpecularColor.getAlpha() * inv; - } -#ifdef GL_EXT_separate_specular_color - else if (FeatureAvailable[IRR_EXT_separate_specular_color]) - glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL, GL_SINGLE_COLOR); -#endif - glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, color); - } - - // shademode - if (resetAllRenderStates || tempState == EOFPS_DISABLE_TO_ENABLE || - lastmaterial.GouraudShading != material.GouraudShading) { - if (material.GouraudShading) - glShadeModel(GL_SMOOTH); - else - glShadeModel(GL_FLAT); - } - - // lighting - if (resetAllRenderStates || tempState == EOFPS_DISABLE_TO_ENABLE || - lastmaterial.Lighting != material.Lighting) { - if (material.Lighting) - glEnable(GL_LIGHTING); - else - glDisable(GL_LIGHTING); + if (resetAllRenderStates || tempState == EOFPS_DISABLE_TO_ENABLE) { + glDisable(GL_COLOR_MATERIAL); + glDisable(GL_LIGHTING); + glShadeModel(GL_SMOOTH); + glDisable(GL_NORMALIZE); } // fog @@ -1953,15 +1856,6 @@ void COpenGLDriver::setBasicRenderStates(const SMaterial &material, const SMater glDisable(GL_FOG); } - // normalization - if (resetAllRenderStates || tempState == EOFPS_DISABLE_TO_ENABLE || - lastmaterial.NormalizeNormals != material.NormalizeNormals) { - if (material.NormalizeNormals) - glEnable(GL_NORMALIZE); - else - glDisable(GL_NORMALIZE); - } - // Set fixed pipeline as active. tempState = EOFPS_ENABLE; } else if (tempState == EOFPS_ENABLE_TO_DISABLE) { @@ -2401,7 +2295,6 @@ void COpenGLDriver::setRenderStates2DMode(bool alpha, bool texture, bool alphaCh } SMaterial currentMaterial = (!OverrideMaterial2DEnabled) ? InitMaterial2D : OverrideMaterial2D; - currentMaterial.Lighting = false; if (texture) { setTransform(ETS_TEXTURE_0, core::IdentityMatrix); @@ -3018,7 +2911,7 @@ IImage *COpenGLDriver::createScreenShot(video::ECOLOR_FORMAT format, video::E_RE if (newImage) pixels = static_cast(newImage->getData()); if (pixels) { - glReadBuffer(GL_FRONT); + glReadBuffer(Params.Doublebuffer ? GL_BACK : GL_FRONT); glReadPixels(0, 0, ScreenSize.Width, ScreenSize.Height, fmt, type, pixels); testGLError(__LINE__); glReadBuffer(GL_BACK); @@ -3062,44 +2955,6 @@ IImage *COpenGLDriver::createScreenShot(video::ECOLOR_FORMAT format, video::E_RE return newImage; } -//! Set/unset a clipping plane. -bool COpenGLDriver::setClipPlane(u32 index, const core::plane3df &plane, bool enable) -{ - if (index >= MaxUserClipPlanes) - return false; - - UserClipPlanes[index].Plane = plane; - enableClipPlane(index, enable); - return true; -} - -void COpenGLDriver::uploadClipPlane(u32 index) -{ - // opengl needs an array of doubles for the plane equation - GLdouble clip_plane[4]; - clip_plane[0] = UserClipPlanes[index].Plane.Normal.X; - clip_plane[1] = UserClipPlanes[index].Plane.Normal.Y; - clip_plane[2] = UserClipPlanes[index].Plane.Normal.Z; - clip_plane[3] = UserClipPlanes[index].Plane.D; - glClipPlane(GL_CLIP_PLANE0 + index, clip_plane); -} - -//! Enable/disable a clipping plane. -void COpenGLDriver::enableClipPlane(u32 index, bool enable) -{ - if (index >= MaxUserClipPlanes) - return; - if (enable) { - if (!UserClipPlanes[index].Enabled) { - uploadClipPlane(index); - glEnable(GL_CLIP_PLANE0 + index); - } - } else - glDisable(GL_CLIP_PLANE0 + index); - - UserClipPlanes[index].Enabled = enable; -} - core::dimension2du COpenGLDriver::getMaxTextureSize() const { return core::dimension2du(MaxTextureSize, MaxTextureSize); diff --git a/irr/src/COpenGLDriver.h b/irr/src/COpenGLDriver.h index 6fe8ac37d..9c4ecd3b3 100644 --- a/irr/src/COpenGLDriver.h +++ b/irr/src/COpenGLDriver.h @@ -58,27 +58,28 @@ public: struct SHWBufferLink_opengl : public SHWBufferLink { - SHWBufferLink_opengl(const scene::IMeshBuffer *_MeshBuffer) : - SHWBufferLink(_MeshBuffer), vbo_verticesID(0), vbo_indicesID(0) {} + SHWBufferLink_opengl(const scene::IVertexBuffer *vb) : SHWBufferLink(vb) {} + SHWBufferLink_opengl(const scene::IIndexBuffer *ib) : SHWBufferLink(ib) {} - GLuint vbo_verticesID; // tmp - GLuint vbo_indicesID; // tmp - - GLuint vbo_verticesSize; // tmp - GLuint vbo_indicesSize; // tmp + GLuint vbo_ID = 0; + u32 vbo_Size = 0; }; //! updates hardware buffer if needed bool updateHardwareBuffer(SHWBufferLink *HWBuffer) override; - //! Create hardware buffer from mesh - SHWBufferLink *createHardwareBuffer(const scene::IMeshBuffer *mb) override; + //! Create hardware buffer from vertex buffer + SHWBufferLink *createHardwareBuffer(const scene::IVertexBuffer *vb) override; + + //! Create hardware buffer from index buffer + SHWBufferLink *createHardwareBuffer(const scene::IIndexBuffer *ib) override; //! Delete hardware buffer (only some drivers can) void deleteHardwareBuffer(SHWBufferLink *HWBuffer) override; - //! Draw hardware buffer - void drawHardwareBuffer(SHWBufferLink *HWBuffer) override; + void drawBuffers(const scene::IVertexBuffer *vb, + const scene::IIndexBuffer *ib, u32 primCount, + scene::E_PRIMITIVE_TYPE pType = scene::EPT_TRIANGLES) override; //! Create occlusion query. /** Use node for identification and mesh for occlusion test. */ @@ -285,19 +286,6 @@ public: //! for performance reasons only available in debug mode bool testGLError(int code = 0); - //! Set/unset a clipping plane. - //! There are at least 6 clipping planes available for the user to set at will. - //! \param index: The plane index. Must be between 0 and MaxUserClipPlanes. - //! \param plane: The plane itself. - //! \param enable: If true, enable the clipping plane else disable it. - bool setClipPlane(u32 index, const core::plane3df &plane, bool enable = false) override; - - //! Enable/disable a clipping plane. - //! There are at least 6 clipping planes available for the user to set at will. - //! \param index: The plane index. Must be between 0 and MaxUserClipPlanes. - //! \param enable: If true, enable the clipping plane else disable it. - void enableClipPlane(u32 index, bool enable) override; - //! Enable the 2d override material void enableMaterial2D(bool enable = true) override; @@ -343,14 +331,12 @@ private: bool updateVertexHardwareBuffer(SHWBufferLink_opengl *HWBuffer); bool updateIndexHardwareBuffer(SHWBufferLink_opengl *HWBuffer); - void uploadClipPlane(u32 index); - //! inits the parts of the open gl driver used on all platforms bool genericDriverInit(); ITexture *createDeviceDependentTexture(const io::path &name, IImage *image) override; - ITexture *createDeviceDependentTextureCubemap(const io::path &name, const core::array &image) override; + ITexture *createDeviceDependentTextureCubemap(const io::path &name, const std::vector &image) override; //! creates a transposed matrix in supplied GLfloat array to pass to OpenGL inline void getGLMatrix(GLfloat gl_matrix[16], const core::matrix4 &m); @@ -404,15 +390,6 @@ private: SMaterial Material, LastMaterial; - struct SUserClipPlane - { - SUserClipPlane() : - Enabled(false) {} - core::plane3df Plane; - bool Enabled; - }; - core::array UserClipPlanes; - core::stringc VendorName; core::matrix4 TextureFlipMatrix; diff --git a/irr/src/COpenGLExtensionHandler.cpp b/irr/src/COpenGLExtensionHandler.cpp index d5aade126..6127d6e46 100644 --- a/irr/src/COpenGLExtensionHandler.cpp +++ b/irr/src/COpenGLExtensionHandler.cpp @@ -20,7 +20,7 @@ bool COpenGLExtensionHandler::needsDSAFramebufferHack = true; COpenGLExtensionHandler::COpenGLExtensionHandler() : StencilBuffer(false), TextureCompressionExtension(false), MaxLights(1), - MaxAnisotropy(1), MaxUserClipPlanes(0), MaxAuxBuffers(0), MaxIndices(65535), + MaxAnisotropy(1), MaxAuxBuffers(0), MaxIndices(65535), MaxTextureSize(1), MaxGeometryVerticesOut(0), MaxTextureLODBias(0.f), Version(0), ShaderLanguageVersion(0), OcclusionQuerySupport(false), IsAtiRadeonX(false), pGlActiveTexture(0), pGlActiveTextureARB(0), pGlClientActiveTextureARB(0), @@ -428,8 +428,6 @@ void COpenGLExtensionHandler::initExtensions(video::IContextManager *cmgr, bool if (FeatureAvailable[IRR_EXT_texture_lod_bias]) glGetFloatv(GL_MAX_TEXTURE_LOD_BIAS_EXT, &MaxTextureLODBias); #endif - glGetIntegerv(GL_MAX_CLIP_PLANES, &num); - MaxUserClipPlanes = static_cast(num); glGetIntegerv(GL_AUX_BUFFERS, &num); MaxAuxBuffers = static_cast(num); #ifdef GL_ARB_draw_buffers diff --git a/irr/src/COpenGLExtensionHandler.h b/irr/src/COpenGLExtensionHandler.h index ada1c9a3a..cdff911b9 100644 --- a/irr/src/COpenGLExtensionHandler.h +++ b/irr/src/COpenGLExtensionHandler.h @@ -1019,8 +1019,6 @@ public: u8 MaxLights; //! Maximal Anisotropy u8 MaxAnisotropy; - //! Number of user clipplanes - u8 MaxUserClipPlanes; //! Number of auxiliary buffers u8 MaxAuxBuffers; //! Optimal number of indices per meshbuffer diff --git a/irr/src/CReadFile.h b/irr/src/CReadFile.h index 14f674772..c9231be7c 100644 --- a/irr/src/CReadFile.h +++ b/irr/src/CReadFile.h @@ -17,7 +17,7 @@ namespace io /*! Class for reading a real file from disk. */ -class CReadFile : public IReadFile +class CReadFile final : public IReadFile { public: CReadFile(const io::path &fileName); diff --git a/irr/src/CSceneCollisionManager.cpp b/irr/src/CSceneCollisionManager.cpp index 692f3c44f..77549a7dc 100644 --- a/irr/src/CSceneCollisionManager.cpp +++ b/irr/src/CSceneCollisionManager.cpp @@ -6,7 +6,6 @@ #include "ICameraSceneNode.h" #include "SViewFrustum.h" -#include "os.h" #include "irrMath.h" namespace irr diff --git a/irr/src/CSceneManager.cpp b/irr/src/CSceneManager.cpp index b20f6010a..c75a28a48 100644 --- a/irr/src/CSceneManager.cpp +++ b/irr/src/CSceneManager.cpp @@ -2,6 +2,8 @@ // This file is part of the "Irrlicht Engine". // For conditions of distribution and use, see copyright notice in irrlicht.h +#include + #include "CSceneManager.h" #include "IVideoDriver.h" #include "IFileSystem.h" @@ -18,6 +20,7 @@ #include "CXMeshFileLoader.h" #include "COBJMeshFileLoader.h" #include "CB3DMeshFileLoader.h" +#include "CGLTFMeshFileLoader.h" #include "CBillboardSceneNode.h" #include "CAnimatedMeshSceneNode.h" #include "CCameraSceneNode.h" @@ -76,6 +79,7 @@ CSceneManager::CSceneManager(video::IVideoDriver *driver, MeshLoaderList.push_back(new CXMeshFileLoader(this)); MeshLoaderList.push_back(new COBJMeshFileLoader(this)); MeshLoaderList.push_back(new CB3DMeshFileLoader(this)); + MeshLoaderList.push_back(new CGLTFMeshFileLoader()); } //! destructor @@ -95,9 +99,8 @@ CSceneManager::~CSceneManager() if (CollisionManager) CollisionManager->drop(); - u32 i; - for (i = 0; i < MeshLoaderList.size(); ++i) - MeshLoaderList[i]->drop(); + for (auto *loader : MeshLoaderList) + loader->drop(); if (ActiveCamera) ActiveCamera->drop(); @@ -140,12 +143,11 @@ IAnimatedMesh *CSceneManager::getUncachedMesh(io::IReadFile *file, const io::pat IAnimatedMesh *msh = 0; // iterate the list in reverse order so user-added loaders can override the built-in ones - s32 count = MeshLoaderList.size(); - for (s32 i = count - 1; i >= 0; --i) { - if (MeshLoaderList[i]->isALoadableFileExtension(filename)) { + for (auto it = MeshLoaderList.rbegin(); it != MeshLoaderList.rend(); it++) { + if ((*it)->isALoadableFileExtension(filename)) { // reset file to avoid side effects of previous calls to createMesh file->seek(0); - msh = MeshLoaderList[i]->createMesh(file); + msh = (*it)->createMesh(file); if (msh) { MeshCache->addMesh(cachename, msh); msh->drop(); @@ -388,14 +390,8 @@ u32 CSceneManager::registerNodeForRendering(ISceneNode *node, E_SCENE_NODE_RENDE switch (pass) { // take camera if it is not already registered case ESNRP_CAMERA: { - taken = 1; - for (u32 i = 0; i != CameraList.size(); ++i) { - if (CameraList[i] == node) { - taken = 0; - break; - } - } - if (taken) { + if (std::find(CameraList.begin(), CameraList.end(), node) == CameraList.end()) { + taken = 1; CameraList.push_back(node); } } break; @@ -405,19 +401,19 @@ u32 CSceneManager::registerNodeForRendering(ISceneNode *node, E_SCENE_NODE_RENDE break; case ESNRP_SOLID: if (!isCulled(node)) { - SolidNodeList.push_back(node); + SolidNodeList.emplace_back(node); taken = 1; } break; case ESNRP_TRANSPARENT: if (!isCulled(node)) { - TransparentNodeList.push_back(TransparentNodeEntry(node, camWorldPos)); + TransparentNodeList.emplace_back(node, camWorldPos); taken = 1; } break; case ESNRP_TRANSPARENT_EFFECT: if (!isCulled(node)) { - TransparentEffectNodeList.push_back(TransparentNodeEntry(node, camWorldPos)); + TransparentEffectNodeList.emplace_back(node, camWorldPos); taken = 1; } break; @@ -429,8 +425,7 @@ u32 CSceneManager::registerNodeForRendering(ISceneNode *node, E_SCENE_NODE_RENDE for (u32 i = 0; i < count; ++i) { if (Driver->needsTransparentRenderPass(node->getMaterial(i))) { // register as transparent node - TransparentNodeEntry e(node, camWorldPos); - TransparentNodeList.push_back(e); + TransparentNodeList.emplace_back(node, camWorldPos); taken = 1; break; } @@ -438,7 +433,7 @@ u32 CSceneManager::registerNodeForRendering(ISceneNode *node, E_SCENE_NODE_RENDE // not transparent, register as solid if (!taken) { - SolidNodeList.push_back(node); + SolidNodeList.emplace_back(node); taken = 1; } } @@ -509,10 +504,10 @@ void CSceneManager::drawAll() CurrentRenderPass = ESNRP_CAMERA; Driver->getOverrideMaterial().Enabled = ((Driver->getOverrideMaterial().EnablePasses & CurrentRenderPass) != 0); - for (i = 0; i < CameraList.size(); ++i) - CameraList[i]->render(); + for (auto *node : CameraList) + node->render(); - CameraList.set_used(0); + CameraList.clear(); } // render skyboxes @@ -520,10 +515,10 @@ void CSceneManager::drawAll() CurrentRenderPass = ESNRP_SKY_BOX; Driver->getOverrideMaterial().Enabled = ((Driver->getOverrideMaterial().EnablePasses & CurrentRenderPass) != 0); - for (i = 0; i < SkyBoxList.size(); ++i) - SkyBoxList[i]->render(); + for (auto *node : SkyBoxList) + node->render(); - SkyBoxList.set_used(0); + SkyBoxList.clear(); } // render default objects @@ -531,12 +526,12 @@ void CSceneManager::drawAll() CurrentRenderPass = ESNRP_SOLID; Driver->getOverrideMaterial().Enabled = ((Driver->getOverrideMaterial().EnablePasses & CurrentRenderPass) != 0); - SolidNodeList.sort(); // sort by textures + std::sort(SolidNodeList.begin(), SolidNodeList.end()); - for (i = 0; i < SolidNodeList.size(); ++i) - SolidNodeList[i].Node->render(); + for (auto &it : SolidNodeList) + it.Node->render(); - SolidNodeList.set_used(0); + SolidNodeList.clear(); } // render transparent objects. @@ -544,11 +539,12 @@ void CSceneManager::drawAll() CurrentRenderPass = ESNRP_TRANSPARENT; Driver->getOverrideMaterial().Enabled = ((Driver->getOverrideMaterial().EnablePasses & CurrentRenderPass) != 0); - TransparentNodeList.sort(); // sort by distance from camera - for (i = 0; i < TransparentNodeList.size(); ++i) - TransparentNodeList[i].Node->render(); + std::sort(TransparentNodeList.begin(), TransparentNodeList.end()); - TransparentNodeList.set_used(0); + for (auto &it : TransparentNodeList) + it.Node->render(); + + TransparentNodeList.clear(); } // render transparent effect objects. @@ -556,12 +552,12 @@ void CSceneManager::drawAll() CurrentRenderPass = ESNRP_TRANSPARENT_EFFECT; Driver->getOverrideMaterial().Enabled = ((Driver->getOverrideMaterial().EnablePasses & CurrentRenderPass) != 0); - TransparentEffectNodeList.sort(); // sort by distance from camera + std::sort(TransparentEffectNodeList.begin(), TransparentEffectNodeList.end()); - for (i = 0; i < TransparentEffectNodeList.size(); ++i) - TransparentEffectNodeList[i].Node->render(); + for (auto &it : TransparentEffectNodeList) + it.Node->render(); - TransparentEffectNodeList.set_used(0); + TransparentEffectNodeList.clear(); } // render custom gui nodes @@ -569,10 +565,10 @@ void CSceneManager::drawAll() CurrentRenderPass = ESNRP_GUI; Driver->getOverrideMaterial().Enabled = ((Driver->getOverrideMaterial().EnablePasses & CurrentRenderPass) != 0); - for (i = 0; i < GuiNodeList.size(); ++i) - GuiNodeList[i]->render(); + for (auto *node : GuiNodeList) + node->render(); - GuiNodeList.set_used(0); + GuiNodeList.clear(); } clearDeletionList(); @@ -592,7 +588,7 @@ void CSceneManager::addExternalMeshLoader(IMeshLoader *externalLoader) //! Returns the number of mesh loaders supported by Irrlicht at this time u32 CSceneManager::getMeshLoaderCount() const { - return MeshLoaderList.size(); + return static_cast(MeshLoaderList.size()); } //! Retrieve the given mesh loader @@ -629,12 +625,9 @@ void CSceneManager::addToDeletionQueue(ISceneNode *node) //! clears the deletion list void CSceneManager::clearDeletionList() { - if (DeletionList.empty()) - return; - - for (u32 i = 0; i < DeletionList.size(); ++i) { - DeletionList[i]->remove(); - DeletionList[i]->drop(); + for (auto *node : DeletionList) { + node->remove(); + node->drop(); } DeletionList.clear(); diff --git a/irr/src/CSceneManager.h b/irr/src/CSceneManager.h index 0e27290a8..4ef6d64b0 100644 --- a/irr/src/CSceneManager.h +++ b/irr/src/CSceneManager.h @@ -25,7 +25,7 @@ class IMeshCache; /*! The Scene Manager manages scene nodes, mesh resources, cameras and all the other stuff. */ -class CSceneManager : public ISceneManager, public ISceneNode +class CSceneManager final : public ISceneManager, public ISceneNode { public: //! constructor @@ -277,15 +277,15 @@ private: ISceneCollisionManager *CollisionManager; //! render pass lists - core::array CameraList; - core::array SkyBoxList; - core::array SolidNodeList; - core::array TransparentNodeList; - core::array TransparentEffectNodeList; - core::array GuiNodeList; + std::vector CameraList; + std::vector SkyBoxList; + std::vector SolidNodeList; + std::vector TransparentNodeList; + std::vector TransparentEffectNodeList; + std::vector GuiNodeList; - core::array MeshLoaderList; - core::array DeletionList; + std::vector MeshLoaderList; + std::vector DeletionList; //! current active camera ICameraSceneNode *ActiveCamera; diff --git a/irr/src/CSkinnedMesh.cpp b/irr/src/CSkinnedMesh.cpp index eb7317309..5db027abc 100644 --- a/irr/src/CSkinnedMesh.cpp +++ b/irr/src/CSkinnedMesh.cpp @@ -6,6 +6,7 @@ #include #include "CBoneSceneNode.h" #include "IAnimatedMeshSceneNode.h" +#include "SSkinMeshBuffer.h" #include "os.h" namespace @@ -596,6 +597,15 @@ IMeshBuffer *CSkinnedMesh::getMeshBuffer(const video::SMaterial &material) const return 0; } +u32 CSkinnedMesh::getTextureSlot(u32 meshbufNr) const +{ + return TextureSlots.at(meshbufNr); +} + +void CSkinnedMesh::setTextureSlot(u32 meshbufNr, u32 textureSlot) { + TextureSlots.at(meshbufNr) = textureSlot; +} + //! returns an axis aligned bounding box const core::aabbox3d &CSkinnedMesh::getBoundingBox() const { @@ -1057,10 +1067,17 @@ void CSkinnedMesh::updateBoundingBox(void) scene::SSkinMeshBuffer *CSkinnedMesh::addMeshBuffer() { scene::SSkinMeshBuffer *buffer = new scene::SSkinMeshBuffer(); + TextureSlots.push_back(LocalBuffers.size()); LocalBuffers.push_back(buffer); return buffer; } +void CSkinnedMesh::addMeshBuffer(SSkinMeshBuffer *meshbuf) +{ + TextureSlots.push_back(LocalBuffers.size()); + LocalBuffers.push_back(meshbuf); +} + CSkinnedMesh::SJoint *CSkinnedMesh::addJoint(SJoint *parent) { SJoint *joint = new SJoint; diff --git a/irr/src/CSkinnedMesh.h b/irr/src/CSkinnedMesh.h index b0228c93b..4b4c5e3b7 100644 --- a/irr/src/CSkinnedMesh.h +++ b/irr/src/CSkinnedMesh.h @@ -61,6 +61,10 @@ public: NULL if there is no such mesh buffer. */ IMeshBuffer *getMeshBuffer(const video::SMaterial &material) const override; + u32 getTextureSlot(u32 meshbufNr) const override; + + void setTextureSlot(u32 meshbufNr, u32 textureSlot); + //! returns an axis aligned bounding box const core::aabbox3d &getBoundingBox() const override; @@ -129,6 +133,9 @@ public: //! Adds a new meshbuffer to the mesh, access it as last one SSkinMeshBuffer *addMeshBuffer() override; + //! Adds a new meshbuffer to the mesh, access it as last one + void addMeshBuffer(SSkinMeshBuffer *meshbuf) override; + //! Adds a new joint to the mesh, access it as last one SJoint *addJoint(SJoint *parent = 0) override; @@ -184,6 +191,8 @@ private: core::array *SkinningBuffers; // Meshbuffer to skin, default is to skin localBuffers core::array LocalBuffers; + //! Mapping from meshbuffer number to bindable texture slot + std::vector TextureSlots; core::array AllJoints; core::array RootJoints; diff --git a/irr/src/CXMeshFileLoader.cpp b/irr/src/CXMeshFileLoader.cpp index 5978980f4..fc0e6e237 100644 --- a/irr/src/CXMeshFileLoader.cpp +++ b/irr/src/CXMeshFileLoader.cpp @@ -109,10 +109,6 @@ bool CXMeshFileLoader::load(io::IReadFile *file) // default material if nothing loaded if (!mesh->Materials.size()) { mesh->Materials.push_back(video::SMaterial()); - mesh->Materials[0].DiffuseColor.set(0xff777777); - mesh->Materials[0].Shininess = 0.f; - mesh->Materials[0].SpecularColor.set(0xff777777); - mesh->Materials[0].EmissiveColor.set(0xff000000); } u32 i; @@ -142,7 +138,7 @@ bool CXMeshFileLoader::load(io::IReadFile *file) if (!mesh->HasVertexColors) { for (u32 j = 0; j < mesh->FaceMaterialIndices.size(); ++j) { for (u32 id = j * 3 + 0; id <= j * 3 + 2; ++id) { - mesh->Vertices[mesh->Indices[id]].Color = mesh->Buffers[mesh->FaceMaterialIndices[j]]->Material.DiffuseColor; + mesh->Vertices[mesh->Indices[id]].Color = 0xff777777; } } } @@ -273,12 +269,12 @@ bool CXMeshFileLoader::load(io::IReadFile *file) } if (mesh->TCoords2.size()) { for (i = 0; i != mesh->Buffers.size(); ++i) { - mesh->Buffers[i]->Vertices_2TCoords.reallocate(vCountArray[i]); + mesh->Buffers[i]->Vertices_2TCoords->Data.reserve(vCountArray[i]); mesh->Buffers[i]->VertexType = video::EVT_2TCOORDS; } } else { for (i = 0; i != mesh->Buffers.size(); ++i) - mesh->Buffers[i]->Vertices_Standard.reallocate(vCountArray[i]); + mesh->Buffers[i]->Vertices_Standard->Data.reserve(vCountArray[i]); } verticesLinkIndex.set_used(mesh->Vertices.size()); @@ -290,14 +286,14 @@ bool CXMeshFileLoader::load(io::IReadFile *file) scene::SSkinMeshBuffer *buffer = mesh->Buffers[verticesLinkBuffer[i]]; if (mesh->TCoords2.size()) { - verticesLinkIndex[i] = buffer->Vertices_2TCoords.size(); - buffer->Vertices_2TCoords.push_back(mesh->Vertices[i]); + verticesLinkIndex[i] = buffer->Vertices_2TCoords->getCount(); + buffer->Vertices_2TCoords->Data.emplace_back(mesh->Vertices[i]); // We have a problem with correct tcoord2 handling here // crash fixed for now by checking the values - buffer->Vertices_2TCoords.getLast().TCoords2 = (i < mesh->TCoords2.size()) ? mesh->TCoords2[i] : mesh->Vertices[i].TCoords; + buffer->Vertices_2TCoords->Data.back().TCoords2 = (i < mesh->TCoords2.size()) ? mesh->TCoords2[i] : mesh->Vertices[i].TCoords; } else { - verticesLinkIndex[i] = buffer->Vertices_Standard.size(); - buffer->Vertices_Standard.push_back(mesh->Vertices[i]); + verticesLinkIndex[i] = buffer->Vertices_Standard->getCount(); + buffer->Vertices_Standard->Data.push_back(mesh->Vertices[i]); } } @@ -306,13 +302,13 @@ bool CXMeshFileLoader::load(io::IReadFile *file) for (i = 0; i < mesh->FaceMaterialIndices.size(); ++i) ++vCountArray[mesh->FaceMaterialIndices[i]]; for (i = 0; i != mesh->Buffers.size(); ++i) - mesh->Buffers[i]->Indices.reallocate(vCountArray[i]); + mesh->Buffers[i]->Indices->Data.reserve(vCountArray[i]); delete[] vCountArray; // create indices per buffer for (i = 0; i < mesh->FaceMaterialIndices.size(); ++i) { scene::SSkinMeshBuffer *buffer = mesh->Buffers[mesh->FaceMaterialIndices[i]]; for (u32 id = i * 3 + 0; id != i * 3 + 3; ++id) { - buffer->Indices.push_back(verticesLinkIndex[mesh->Indices[id]]); + buffer->Indices->Data.push_back(verticesLinkIndex[mesh->Indices[id]]); } } } diff --git a/irr/src/CZipReader.cpp b/irr/src/CZipReader.cpp index b761c72e8..2d2152719 100644 --- a/irr/src/CZipReader.cpp +++ b/irr/src/CZipReader.cpp @@ -325,7 +325,7 @@ bool CZipReader::scanZipHeader(bool ignoreGPBits) dirEnd.Offset = os::Byteswap::byteswap(dirEnd.Offset); dirEnd.CommentLength = os::Byteswap::byteswap(dirEnd.CommentLength); #endif - FileInfo.reallocate(dirEnd.TotalEntries); + FileInfo.reserve(dirEnd.TotalEntries); File->seek(dirEnd.Offset); while (scanCentralDirectoryHeader()) { } @@ -381,9 +381,10 @@ bool CZipReader::scanCentralDirectoryHeader() File->seek(entry.RelativeOffsetOfLocalHeader); scanZipHeader(true); File->seek(pos + entry.FilenameLength + entry.ExtraFieldLength + entry.FileCommentLength); - FileInfo.getLast().header.DataDescriptor.CompressedSize = entry.CompressedSize; - FileInfo.getLast().header.DataDescriptor.UncompressedSize = entry.UncompressedSize; - FileInfo.getLast().header.DataDescriptor.CRC32 = entry.CRC32; + auto &lastInfo = FileInfo.back(); + lastInfo.header.DataDescriptor.CompressedSize = entry.CompressedSize; + lastInfo.header.DataDescriptor.UncompressedSize = entry.UncompressedSize; + lastInfo.header.DataDescriptor.CRC32 = entry.CRC32; Files.getLast().Size = entry.UncompressedSize; return true; } diff --git a/irr/src/CZipReader.h b/irr/src/CZipReader.h index d9afd668a..b520c2030 100644 --- a/irr/src/CZipReader.h +++ b/irr/src/CZipReader.h @@ -4,8 +4,8 @@ #pragma once +#include #include "IReadFile.h" -#include "irrArray.h" #include "irrString.h" #include "IFileSystem.h" #include "CFileList.h" @@ -209,7 +209,7 @@ protected: IReadFile *File; // holds extended info about files - core::array FileInfo; + std::vector FileInfo; bool IsGZip; }; diff --git a/irr/src/IAttribute.h b/irr/src/IAttribute.h index b0dc76eee..23352a623 100644 --- a/irr/src/IAttribute.h +++ b/irr/src/IAttribute.h @@ -4,15 +4,8 @@ #pragma once -#include "IReferenceCounted.h" -#include "SColor.h" -#include "vector3d.h" -#include "vector2d.h" -#include "position2d.h" -#include "rect.h" -#include "dimension2d.h" +#include "irrTypes.h" #include "irrString.h" -#include "irrArray.h" #include "EAttributes.h" namespace irr @@ -20,16 +13,7 @@ namespace irr namespace io { -// All derived attribute types implement at least getter/setter for their own type (like CBoolAttribute will have setBool/getBool). -// Simple types will also implement getStringW and setString, but don't expect it to work for all types. -// String serialization makes no sense for some attribute-types (like stringw arrays or pointers), but is still useful for many types. -// (Note: I do _not_ know yet why the default string serialization is asymmetric with char* in set and wchar_t* in get). -// Additionally many attribute types will implement conversion functions like CBoolAttribute has p.E. getInt/setInt(). -// The reason for conversion functions is likely to make reading old formats easier which have changed in the meantime. For example -// an old xml can contain a bool attribute which is an int in a newer format. You can still call getInt() even thought the attribute has the wrong type. -// And please do _not_ confuse these attributes here with the ones used in the xml-reader (aka SAttribute which is just a key-value pair). - -class IAttribute : public virtual IReferenceCounted +class IAttribute { public: virtual ~IAttribute(){}; diff --git a/irr/src/Irrlicht.cpp b/irr/src/Irrlicht.cpp index d119584e3..eb94fa4eb 100644 --- a/irr/src/Irrlicht.cpp +++ b/irr/src/Irrlicht.cpp @@ -100,10 +100,6 @@ extern "C" IRRLICHT_API bool IRRCALLCONV isDriverSupported(E_DRIVER_TYPE driver) case EDT_OPENGL: return true; #endif -#ifdef _IRR_COMPILE_WITH_OGLES1_ - case EDT_OGLES1: - return true; -#endif #ifdef _IRR_COMPILE_WITH_OGLES2_ case EDT_OGLES2: return true; diff --git a/irr/src/OpenGL/Driver.cpp b/irr/src/OpenGL/Driver.cpp index 0dd6ea1bb..fe9a24758 100644 --- a/irr/src/OpenGL/Driver.cpp +++ b/irr/src/OpenGL/Driver.cpp @@ -107,6 +107,7 @@ static const VertexType &getVertexTypeDescription(E_VERTEX_TYPE type) return vtTangents; default: assert(false); + CODE_UNREACHABLE(); } } @@ -254,11 +255,7 @@ bool COpenGL3DriverBase::genericDriverInit(const core::dimension2d &screenS DriverAttributes->setAttribute("MaxTextures", (s32)Feature.MaxTextureUnits); DriverAttributes->setAttribute("MaxSupportedTextures", (s32)Feature.MaxTextureUnits); - // DriverAttributes->setAttribute("MaxLights", MaxLights); DriverAttributes->setAttribute("MaxAnisotropy", MaxAnisotropy); - // DriverAttributes->setAttribute("MaxUserClipPlanes", MaxUserClipPlanes); - // DriverAttributes->setAttribute("MaxAuxBuffers", MaxAuxBuffers); - // DriverAttributes->setAttribute("MaxMultipleRenderTargets", MaxMultipleRenderTargets); DriverAttributes->setAttribute("MaxIndices", (s32)MaxIndices); DriverAttributes->setAttribute("MaxTextureSize", (s32)MaxTextureSize); DriverAttributes->setAttribute("MaxTextureLODBias", MaxTextureLODBias); @@ -267,8 +264,6 @@ bool COpenGL3DriverBase::genericDriverInit(const core::dimension2d &screenS GL.PixelStorei(GL_PACK_ALIGNMENT, 1); - UserClipPlane.reallocate(0); - for (s32 i = 0; i < ETS_COUNT; ++i) setTransform(static_cast(i), core::IdentityMatrix); @@ -482,43 +477,36 @@ void COpenGL3DriverBase::setTransform(E_TRANSFORMATION_STATE state, const core:: Transformation3DChanged = true; } -bool COpenGL3DriverBase::updateVertexHardwareBuffer(SHWBufferLink_opengl *HWBuffer) +bool COpenGL3DriverBase::updateHardwareBuffer(SHWBufferLink_opengl *HWBuffer, + const void *buffer, size_t bufferSize, scene::E_HARDWARE_MAPPING hint) { - if (!HWBuffer) - return false; + assert(HWBuffer); - const scene::IMeshBuffer *mb = HWBuffer->MeshBuffer; - const void *vertices = mb->getVertices(); - const u32 vertexCount = mb->getVertexCount(); - const E_VERTEX_TYPE vType = mb->getVertexType(); - const u32 vertexSize = getVertexPitchFromType(vType); - - const void *buffer = vertices; - size_t bufferSize = vertexSize * vertexCount; + accountHWBufferUpload(bufferSize); // get or create buffer bool newBuffer = false; - if (!HWBuffer->vbo_verticesID) { - GL.GenBuffers(1, &HWBuffer->vbo_verticesID); - if (!HWBuffer->vbo_verticesID) + if (!HWBuffer->vbo_ID) { + GL.GenBuffers(1, &HWBuffer->vbo_ID); + if (!HWBuffer->vbo_ID) return false; newBuffer = true; - } else if (HWBuffer->vbo_verticesSize < bufferSize) { + } else if (HWBuffer->vbo_Size < bufferSize) { newBuffer = true; } - GL.BindBuffer(GL_ARRAY_BUFFER, HWBuffer->vbo_verticesID); + GL.BindBuffer(GL_ARRAY_BUFFER, HWBuffer->vbo_ID); // copy data to graphics card if (!newBuffer) GL.BufferSubData(GL_ARRAY_BUFFER, 0, bufferSize, buffer); else { - HWBuffer->vbo_verticesSize = bufferSize; + HWBuffer->vbo_Size = bufferSize; GLenum usage = GL_STATIC_DRAW; - if (HWBuffer->Mapped_Index == scene::EHM_STREAM) + if (hint == scene::EHM_STREAM) usage = GL_STREAM_DRAW; - else if (HWBuffer->Mapped_Index == scene::EHM_DYNAMIC) + else if (hint == scene::EHM_DYNAMIC) usage = GL_DYNAMIC_DRAW; GL.BufferData(GL_ARRAY_BUFFER, bufferSize, buffer, usage); } @@ -528,113 +516,83 @@ bool COpenGL3DriverBase::updateVertexHardwareBuffer(SHWBufferLink_opengl *HWBuff return (!TEST_GL_ERROR(this)); } +bool COpenGL3DriverBase::updateVertexHardwareBuffer(SHWBufferLink_opengl *HWBuffer) +{ + if (!HWBuffer) + return false; + + assert(HWBuffer->IsVertex); + const auto *vb = HWBuffer->VertexBuffer; + assert(vb); + + const u32 vertexSize = getVertexPitchFromType(vb->getType()); + const size_t bufferSize = vertexSize * vb->getCount(); + + return updateHardwareBuffer(HWBuffer, vb->getData(), bufferSize, vb->getHardwareMappingHint()); +} + bool COpenGL3DriverBase::updateIndexHardwareBuffer(SHWBufferLink_opengl *HWBuffer) { if (!HWBuffer) return false; - const scene::IMeshBuffer *mb = HWBuffer->MeshBuffer; + assert(!HWBuffer->IsVertex); + const auto *ib = HWBuffer->IndexBuffer; + assert(ib); - const void *indices = mb->getIndices(); - u32 indexCount = mb->getIndexCount(); - - GLenum indexSize; - switch (mb->getIndexType()) { - case (EIT_16BIT): { + u32 indexSize; + switch (ib->getType()) { + case EIT_16BIT: indexSize = sizeof(u16); break; - } - case (EIT_32BIT): { + case EIT_32BIT: indexSize = sizeof(u32); break; - } - default: { + default: return false; } - } - // get or create buffer - bool newBuffer = false; - if (!HWBuffer->vbo_indicesID) { - GL.GenBuffers(1, &HWBuffer->vbo_indicesID); - if (!HWBuffer->vbo_indicesID) - return false; - newBuffer = true; - } else if (HWBuffer->vbo_indicesSize < indexCount * indexSize) { - newBuffer = true; - } + const size_t bufferSize = ib->getCount() * indexSize; - GL.BindBuffer(GL_ELEMENT_ARRAY_BUFFER, HWBuffer->vbo_indicesID); - - // copy data to graphics card - if (!newBuffer) - GL.BufferSubData(GL_ELEMENT_ARRAY_BUFFER, 0, indexCount * indexSize, indices); - else { - HWBuffer->vbo_indicesSize = indexCount * indexSize; - - GLenum usage = GL_STATIC_DRAW; - if (HWBuffer->Mapped_Index == scene::EHM_STREAM) - usage = GL_STREAM_DRAW; - else if (HWBuffer->Mapped_Index == scene::EHM_DYNAMIC) - usage = GL_DYNAMIC_DRAW; - GL.BufferData(GL_ELEMENT_ARRAY_BUFFER, indexCount * indexSize, indices, usage); - } - - GL.BindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); - - return (!TEST_GL_ERROR(this)); + return updateHardwareBuffer(HWBuffer, ib->getData(), bufferSize, ib->getHardwareMappingHint()); } -//! updates hardware buffer if needed bool COpenGL3DriverBase::updateHardwareBuffer(SHWBufferLink *HWBuffer) { if (!HWBuffer) return false; - if (HWBuffer->Mapped_Vertex != scene::EHM_NEVER) { - if (HWBuffer->ChangedID_Vertex != HWBuffer->MeshBuffer->getChangedID_Vertex() || !static_cast(HWBuffer)->vbo_verticesID) { + auto *b = static_cast(HWBuffer); - HWBuffer->ChangedID_Vertex = HWBuffer->MeshBuffer->getChangedID_Vertex(); - - if (!updateVertexHardwareBuffer(static_cast(HWBuffer))) + if (b->IsVertex) { + assert(b->VertexBuffer); + if (b->ChangedID != b->VertexBuffer->getChangedID() || !b->vbo_ID) { + if (!updateVertexHardwareBuffer(b)) return false; + b->ChangedID = b->VertexBuffer->getChangedID(); + } + } else { + assert(b->IndexBuffer); + if (b->ChangedID != b->IndexBuffer->getChangedID() || !b->vbo_ID) { + if (!updateIndexHardwareBuffer(b)) + return false; + b->ChangedID = b->IndexBuffer->getChangedID(); } } - - if (HWBuffer->Mapped_Index != scene::EHM_NEVER) { - if (HWBuffer->ChangedID_Index != HWBuffer->MeshBuffer->getChangedID_Index() || !static_cast(HWBuffer)->vbo_indicesID) { - - HWBuffer->ChangedID_Index = HWBuffer->MeshBuffer->getChangedID_Index(); - - if (!updateIndexHardwareBuffer((SHWBufferLink_opengl *)HWBuffer)) - return false; - } - } - return true; } -//! Create hardware buffer from meshbuffer -COpenGL3DriverBase::SHWBufferLink *COpenGL3DriverBase::createHardwareBuffer(const scene::IMeshBuffer *mb) +COpenGL3DriverBase::SHWBufferLink *COpenGL3DriverBase::createHardwareBuffer(const scene::IVertexBuffer *vb) { - if (!mb || (mb->getHardwareMappingHint_Index() == scene::EHM_NEVER && mb->getHardwareMappingHint_Vertex() == scene::EHM_NEVER)) + if (!vb || vb->getHardwareMappingHint() == scene::EHM_NEVER) return 0; - SHWBufferLink_opengl *HWBuffer = new SHWBufferLink_opengl(mb); + SHWBufferLink_opengl *HWBuffer = new SHWBufferLink_opengl(vb); // add to map HWBuffer->listPosition = HWBufferList.insert(HWBufferList.end(), HWBuffer); - HWBuffer->ChangedID_Vertex = HWBuffer->MeshBuffer->getChangedID_Vertex(); - HWBuffer->ChangedID_Index = HWBuffer->MeshBuffer->getChangedID_Index(); - HWBuffer->Mapped_Vertex = mb->getHardwareMappingHint_Vertex(); - HWBuffer->Mapped_Index = mb->getHardwareMappingHint_Index(); - HWBuffer->vbo_verticesID = 0; - HWBuffer->vbo_indicesID = 0; - HWBuffer->vbo_verticesSize = 0; - HWBuffer->vbo_indicesSize = 0; - - if (!updateHardwareBuffer(HWBuffer)) { + if (!updateVertexHardwareBuffer(HWBuffer)) { deleteHardwareBuffer(HWBuffer); return 0; } @@ -642,57 +600,70 @@ COpenGL3DriverBase::SHWBufferLink *COpenGL3DriverBase::createHardwareBuffer(cons return HWBuffer; } -void COpenGL3DriverBase::deleteHardwareBuffer(SHWBufferLink *_HWBuffer) +COpenGL3DriverBase::SHWBufferLink *COpenGL3DriverBase::createHardwareBuffer(const scene::IIndexBuffer *ib) { - if (!_HWBuffer) - return; + if (!ib || ib->getHardwareMappingHint() == scene::EHM_NEVER) + return 0; - SHWBufferLink_opengl *HWBuffer = static_cast(_HWBuffer); - if (HWBuffer->vbo_verticesID) { - GL.DeleteBuffers(1, &HWBuffer->vbo_verticesID); - HWBuffer->vbo_verticesID = 0; - } - if (HWBuffer->vbo_indicesID) { - GL.DeleteBuffers(1, &HWBuffer->vbo_indicesID); - HWBuffer->vbo_indicesID = 0; + SHWBufferLink_opengl *HWBuffer = new SHWBufferLink_opengl(ib); + + // add to map + HWBuffer->listPosition = HWBufferList.insert(HWBufferList.end(), HWBuffer); + + if (!updateIndexHardwareBuffer(HWBuffer)) { + deleteHardwareBuffer(HWBuffer); + return 0; } - CNullDriver::deleteHardwareBuffer(_HWBuffer); + return HWBuffer; } -//! Draw hardware buffer -void COpenGL3DriverBase::drawHardwareBuffer(SHWBufferLink *_HWBuffer) +void COpenGL3DriverBase::deleteHardwareBuffer(SHWBufferLink *HWBuffer) { - if (!_HWBuffer) + if (!HWBuffer) return; - SHWBufferLink_opengl *HWBuffer = static_cast(_HWBuffer); - - updateHardwareBuffer(HWBuffer); // check if update is needed - - const scene::IMeshBuffer *mb = HWBuffer->MeshBuffer; - const void *vertices = mb->getVertices(); - const void *indexList = mb->getIndices(); - - if (HWBuffer->Mapped_Vertex != scene::EHM_NEVER) { - GL.BindBuffer(GL_ARRAY_BUFFER, HWBuffer->vbo_verticesID); - vertices = 0; + auto *b = static_cast(HWBuffer); + if (b->vbo_ID) { + GL.DeleteBuffers(1, &b->vbo_ID); + b->vbo_ID = 0; } - if (HWBuffer->Mapped_Index != scene::EHM_NEVER) { - GL.BindBuffer(GL_ELEMENT_ARRAY_BUFFER, HWBuffer->vbo_indicesID); - indexList = 0; + CNullDriver::deleteHardwareBuffer(HWBuffer); +} + +void COpenGL3DriverBase::drawBuffers(const scene::IVertexBuffer *vb, + const scene::IIndexBuffer *ib, u32 PrimitiveCount, + scene::E_PRIMITIVE_TYPE PrimitiveType) +{ + if (!vb || !ib) + return; + + auto *hwvert = static_cast(getBufferLink(vb)); + auto *hwidx = static_cast(getBufferLink(ib)); + updateHardwareBuffer(hwvert); + updateHardwareBuffer(hwidx); + + const void *vertices = vb->getData(); + if (hwvert) { + assert(hwvert->IsVertex); + GL.BindBuffer(GL_ARRAY_BUFFER, hwvert->vbo_ID); + vertices = nullptr; } - drawVertexPrimitiveList(vertices, mb->getVertexCount(), - indexList, mb->getPrimitiveCount(), - mb->getVertexType(), mb->getPrimitiveType(), - mb->getIndexType()); + const void *indexList = ib->getData(); + if (hwidx) { + assert(!hwidx->IsVertex); + GL.BindBuffer(GL_ELEMENT_ARRAY_BUFFER, hwidx->vbo_ID); + indexList = nullptr; + } - if (HWBuffer->Mapped_Vertex != scene::EHM_NEVER) + drawVertexPrimitiveList(vertices, vb->getCount(), indexList, + PrimitiveCount, vb->getType(), PrimitiveType, ib->getType()); + + if (hwvert) GL.BindBuffer(GL_ARRAY_BUFFER, 0); - - if (HWBuffer->Mapped_Index != scene::EHM_NEVER) + if (hwidx) GL.BindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); } @@ -915,7 +886,8 @@ void COpenGL3DriverBase::draw2DImageBatch(const video::ITexture *texture, const irr::u32 drawCount = core::min_(positions.size(), sourceRects.size()); assert(6 * drawCount <= QuadIndexCount); // FIXME split the batch? or let it crash? - core::array vtx(drawCount * 4); + std::vector vtx; + vtx.reserve(drawCount * 4); for (u32 i = 0; i < drawCount; i++) { core::position2d targetPos = positions[i]; @@ -938,22 +910,22 @@ void COpenGL3DriverBase::draw2DImageBatch(const video::ITexture *texture, f32 down = 2.f - (f32)poss.LowerRightCorner.Y / (f32)renderTargetSize.Height * 2.f - 1.f; f32 top = 2.f - (f32)poss.UpperLeftCorner.Y / (f32)renderTargetSize.Height * 2.f - 1.f; - vtx.push_back(S3DVertex(left, top, 0.0f, + vtx.emplace_back(left, top, 0.0f, 0.0f, 0.0f, 0.0f, color, - tcoords.UpperLeftCorner.X, tcoords.UpperLeftCorner.Y)); - vtx.push_back(S3DVertex(right, top, 0.0f, + tcoords.UpperLeftCorner.X, tcoords.UpperLeftCorner.Y); + vtx.emplace_back(right, top, 0.0f, 0.0f, 0.0f, 0.0f, color, - tcoords.LowerRightCorner.X, tcoords.UpperLeftCorner.Y)); - vtx.push_back(S3DVertex(right, down, 0.0f, + tcoords.LowerRightCorner.X, tcoords.UpperLeftCorner.Y); + vtx.emplace_back(right, down, 0.0f, 0.0f, 0.0f, 0.0f, color, - tcoords.LowerRightCorner.X, tcoords.LowerRightCorner.Y)); - vtx.push_back(S3DVertex(left, down, 0.0f, + tcoords.LowerRightCorner.X, tcoords.LowerRightCorner.Y); + vtx.emplace_back(left, down, 0.0f, 0.0f, 0.0f, 0.0f, color, - tcoords.UpperLeftCorner.X, tcoords.LowerRightCorner.Y)); + tcoords.UpperLeftCorner.X, tcoords.LowerRightCorner.Y); } GL.BindBuffer(GL_ELEMENT_ARRAY_BUFFER, QuadIndexBuffer); - drawElements(GL_TRIANGLES, vt2DImage, vtx.const_pointer(), vtx.size(), 0, 6 * drawCount); + drawElements(GL_TRIANGLES, vt2DImage, vtx.data(), vtx.size(), 0, 6 * drawCount); GL.BindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); if (clipRect) @@ -1103,15 +1075,14 @@ void COpenGL3DriverBase::endDraw(const VertexType &vertexType) ITexture *COpenGL3DriverBase::createDeviceDependentTexture(const io::path &name, IImage *image) { - core::array imageArray(1); - imageArray.push_back(image); + std::vector tmp { image }; - COpenGL3Texture *texture = new COpenGL3Texture(name, imageArray, ETT_2D, this); + COpenGL3Texture *texture = new COpenGL3Texture(name, tmp, ETT_2D, this); return texture; } -ITexture *COpenGL3DriverBase::createDeviceDependentTextureCubemap(const io::path &name, const core::array &image) +ITexture *COpenGL3DriverBase::createDeviceDependentTextureCubemap(const io::path &name, const std::vector &image) { COpenGL3Texture *texture = new COpenGL3Texture(name, image, ETT_CUBEMAP, this); @@ -1125,8 +1096,11 @@ void COpenGL3DriverBase::setMaterial(const SMaterial &material) OverrideMaterial.apply(Material); for (u32 i = 0; i < Feature.MaxTextureUnits; ++i) { - CacheHandler->getTextureCache().set(i, material.getTexture(i)); - setTransform((E_TRANSFORMATION_STATE)(ETS_TEXTURE_0 + i), material.getTextureMatrix(i)); + auto *texture = material.getTexture(i); + CacheHandler->getTextureCache().set(i, texture); + if (texture) { + setTransform((E_TRANSFORMATION_STATE)(ETS_TEXTURE_0 + i), material.getTextureMatrix(i)); + } } } @@ -1504,10 +1478,8 @@ void COpenGL3DriverBase::chooseMaterial2D() Material = InitMaterial2D; if (OverrideMaterial2DEnabled) { - OverrideMaterial2D.Lighting = false; OverrideMaterial2D.ZWriteEnable = EZW_OFF; OverrideMaterial2D.ZBuffer = ECFN_DISABLED; // it will be ECFN_DISABLED after merge - OverrideMaterial2D.Lighting = false; Material = OverrideMaterial2D; } @@ -1875,40 +1847,6 @@ void COpenGL3DriverBase::removeTexture(ITexture *texture) CNullDriver::removeTexture(texture); } -//! Set/unset a clipping plane. -bool COpenGL3DriverBase::setClipPlane(u32 index, const core::plane3df &plane, bool enable) -{ - if (index >= UserClipPlane.size()) - UserClipPlane.push_back(SUserClipPlane()); - - UserClipPlane[index].Plane = plane; - UserClipPlane[index].Enabled = enable; - return true; -} - -//! Enable/disable a clipping plane. -void COpenGL3DriverBase::enableClipPlane(u32 index, bool enable) -{ - UserClipPlane[index].Enabled = enable; -} - -//! Get the ClipPlane Count -u32 COpenGL3DriverBase::getClipPlaneCount() const -{ - return UserClipPlane.size(); -} - -const core::plane3df &COpenGL3DriverBase::getClipPlane(irr::u32 index) const -{ - if (index < UserClipPlane.size()) - return UserClipPlane[index].Plane; - else { - _IRR_DEBUG_BREAK_IF(true) // invalid index - static const core::plane3df dummy; - return dummy; - } -} - core::dimension2du COpenGL3DriverBase::getMaxTextureSize() const { return core::dimension2du(MaxTextureSize, MaxTextureSize); diff --git a/irr/src/OpenGL/Driver.h b/irr/src/OpenGL/Driver.h index 51554334b..3104b164d 100644 --- a/irr/src/OpenGL/Driver.h +++ b/irr/src/OpenGL/Driver.h @@ -7,7 +7,6 @@ #pragma once #include "SIrrCreationParameters.h" - #include "Common.h" #include "CNullDriver.h" #include "IMaterialRendererServices.h" @@ -47,16 +46,11 @@ public: struct SHWBufferLink_opengl : public SHWBufferLink { - SHWBufferLink_opengl(const scene::IMeshBuffer *meshBuffer) : - SHWBufferLink(meshBuffer), vbo_verticesID(0), vbo_indicesID(0), vbo_verticesSize(0), vbo_indicesSize(0) - { - } + SHWBufferLink_opengl(const scene::IVertexBuffer *vb) : SHWBufferLink(vb) {} + SHWBufferLink_opengl(const scene::IIndexBuffer *ib) : SHWBufferLink(ib) {} - u32 vbo_verticesID; // tmp - u32 vbo_indicesID; // tmp - - u32 vbo_verticesSize; // tmp - u32 vbo_indicesSize; // tmp + GLuint vbo_ID = 0; + u32 vbo_Size = 0; }; bool updateVertexHardwareBuffer(SHWBufferLink_opengl *HWBuffer); @@ -65,14 +59,18 @@ public: //! updates hardware buffer if needed bool updateHardwareBuffer(SHWBufferLink *HWBuffer) override; - //! Create hardware buffer from mesh - SHWBufferLink *createHardwareBuffer(const scene::IMeshBuffer *mb) override; + //! Create hardware buffer from vertex buffer + SHWBufferLink *createHardwareBuffer(const scene::IVertexBuffer *vb) override; + + //! Create hardware buffer from index buffer + SHWBufferLink *createHardwareBuffer(const scene::IIndexBuffer *ib) override; //! Delete hardware buffer (only some drivers can) void deleteHardwareBuffer(SHWBufferLink *HWBuffer) override; - //! Draw hardware buffer - void drawHardwareBuffer(SHWBufferLink *HWBuffer) override; + void drawBuffers(const scene::IVertexBuffer *vb, + const scene::IIndexBuffer *ib, u32 primCount, + scene::E_PRIMITIVE_TYPE pType = scene::EPT_TRIANGLES) override; IRenderTarget *addRenderTarget() override; @@ -227,18 +225,6 @@ public: // Does *nothing* unless in debug mode. bool testGLError(const char *file, int line); - //! Set/unset a clipping plane. - bool setClipPlane(u32 index, const core::plane3df &plane, bool enable = false) override; - - //! returns the current amount of user clip planes set. - u32 getClipPlaneCount() const; - - //! returns the 0 indexed Plane - const core::plane3df &getClipPlane(u32 index) const; - - //! Enable/disable a clipping plane. - void enableClipPlane(u32 index, bool enable) override; - //! Returns the graphics card vendor name. core::stringc getVendorInfo() override { @@ -278,7 +264,7 @@ protected: ITexture *createDeviceDependentTexture(const io::path &name, IImage *image) override; - ITexture *createDeviceDependentTextureCubemap(const io::path &name, const core::array &image) override; + ITexture *createDeviceDependentTextureCubemap(const io::path &name, const std::vector &image) override; //! Map Irrlicht wrap mode to OpenGL enum GLint getTextureWrapMode(u8 clamp) const; @@ -304,10 +290,7 @@ protected: LockRenderStateMode = false; } - void draw2D3DVertexPrimitiveList(const void *vertices, - u32 vertexCount, const void *indexList, u32 primitiveCount, - E_VERTEX_TYPE vType, scene::E_PRIMITIVE_TYPE pType, - E_INDEX_TYPE iType, bool is3D); + bool updateHardwareBuffer(SHWBufferLink_opengl *b, const void *buffer, size_t bufferSize, scene::E_HARDWARE_MAPPING hint); void createMaterialRenderers(); @@ -337,14 +320,6 @@ protected: bool LockRenderStateMode; u8 AntiAlias; - struct SUserClipPlane - { - core::plane3df Plane; - bool Enabled; - }; - - core::array UserClipPlane; - core::matrix4 TextureFlipMatrix; using FColorConverter = void (*)(const void *source, s32 count, void *dest); diff --git a/irr/src/OpenGL/FixedPipelineRenderer.cpp b/irr/src/OpenGL/FixedPipelineRenderer.cpp index 7c4adf719..cef446587 100644 --- a/irr/src/OpenGL/FixedPipelineRenderer.cpp +++ b/irr/src/OpenGL/FixedPipelineRenderer.cpp @@ -4,6 +4,7 @@ // For conditions of distribution and use, see copyright notice in Irrlicht.h #include "FixedPipelineRenderer.h" +#include "os.h" #include "IVideoDriver.h" @@ -15,24 +16,15 @@ namespace video // Base callback COpenGL3MaterialBaseCB::COpenGL3MaterialBaseCB() : - FirstUpdateBase(true), WVPMatrixID(-1), WVMatrixID(-1), NMatrixID(-1), + FirstUpdateBase(true), WVPMatrixID(-1), WVMatrixID(-1), FogEnableID(-1), FogTypeID(-1), FogColorID(-1), FogStartID(-1), - FogEndID(-1), FogDensityID(-1), ThicknessID(-1), LightEnable(false), MaterialAmbient(SColorf(0.f, 0.f, 0.f)), MaterialDiffuse(SColorf(0.f, 0.f, 0.f)), MaterialEmissive(SColorf(0.f, 0.f, 0.f)), MaterialSpecular(SColorf(0.f, 0.f, 0.f)), - MaterialShininess(0.f), FogEnable(0), FogType(1), FogColor(SColorf(0.f, 0.f, 0.f, 1.f)), FogStart(0.f), FogEnd(0.f), FogDensity(0.f), Thickness(1.f) + FogEndID(-1), FogDensityID(-1), ThicknessID(-1), Thickness(1.f), FogEnable(false) { } void COpenGL3MaterialBaseCB::OnSetMaterial(const SMaterial &material) { - LightEnable = material.Lighting; - MaterialAmbient = SColorf(material.AmbientColor); - MaterialDiffuse = SColorf(material.DiffuseColor); - MaterialEmissive = SColorf(material.EmissiveColor); - MaterialSpecular = SColorf(material.SpecularColor); - MaterialShininess = material.Shininess; - - FogEnable = material.FogEnable ? 1 : 0; - + FogEnable = material.FogEnable; Thickness = (material.Thickness > 0.f) ? material.Thickness : 1.f; } @@ -43,7 +35,6 @@ void COpenGL3MaterialBaseCB::OnSetConstants(IMaterialRendererServices *services, if (FirstUpdateBase) { WVPMatrixID = services->getVertexShaderConstantID("uWVPMatrix"); WVMatrixID = services->getVertexShaderConstantID("uWVMatrix"); - NMatrixID = services->getVertexShaderConstantID("uNMatrix"); FogEnableID = services->getVertexShaderConstantID("uFogEnable"); FogTypeID = services->getVertexShaderConstantID("uFogType"); @@ -56,31 +47,29 @@ void COpenGL3MaterialBaseCB::OnSetConstants(IMaterialRendererServices *services, FirstUpdateBase = false; } - const core::matrix4 W = driver->getTransform(ETS_WORLD); - const core::matrix4 V = driver->getTransform(ETS_VIEW); - const core::matrix4 P = driver->getTransform(ETS_PROJECTION); + const core::matrix4 &W = driver->getTransform(ETS_WORLD); + const core::matrix4 &V = driver->getTransform(ETS_VIEW); + const core::matrix4 &P = driver->getTransform(ETS_PROJECTION); - core::matrix4 Matrix = P * V * W; - services->setPixelShaderConstant(WVPMatrixID, Matrix.pointer(), 16); - - Matrix = V * W; + core::matrix4 Matrix = V * W; services->setPixelShaderConstant(WVMatrixID, Matrix.pointer(), 16); - Matrix.makeInverse(); - services->setPixelShaderConstant(NMatrixID, Matrix.getTransposed().pointer(), 16); + Matrix = P * Matrix; + services->setPixelShaderConstant(WVPMatrixID, Matrix.pointer(), 16); - services->setPixelShaderConstant(FogEnableID, &FogEnable, 1); + s32 TempEnable = FogEnable ? 1 : 0; + services->setPixelShaderConstant(FogEnableID, &TempEnable, 1); if (FogEnable) { SColor TempColor(0); E_FOG_TYPE TempType = EFT_FOG_LINEAR; - bool TempPerFragment = false; - bool TempRange = false; + f32 FogStart, FogEnd, FogDensity; + bool unused = false; - driver->getFog(TempColor, TempType, FogStart, FogEnd, FogDensity, TempPerFragment, TempRange); + driver->getFog(TempColor, TempType, FogStart, FogEnd, FogDensity, unused, unused); - FogType = (s32)TempType; - FogColor = SColorf(TempColor); + s32 FogType = (s32)TempType; + SColorf FogColor(TempColor); services->setPixelShaderConstant(FogTypeID, &FogType, 1); services->setPixelShaderConstant(FogColorID, reinterpret_cast(&FogColor), 4); diff --git a/irr/src/OpenGL/FixedPipelineRenderer.h b/irr/src/OpenGL/FixedPipelineRenderer.h index a07af1df9..89e251a35 100644 --- a/irr/src/OpenGL/FixedPipelineRenderer.h +++ b/irr/src/OpenGL/FixedPipelineRenderer.h @@ -26,7 +26,6 @@ protected: s32 WVPMatrixID; s32 WVMatrixID; - s32 NMatrixID; s32 FogEnableID; s32 FogTypeID; @@ -37,22 +36,8 @@ protected: s32 ThicknessID; - bool LightEnable; - SColorf GlobalAmbient; - SColorf MaterialAmbient; - SColorf MaterialDiffuse; - SColorf MaterialEmissive; - SColorf MaterialSpecular; - f32 MaterialShininess; - - s32 FogEnable; - s32 FogType; - SColorf FogColor; - f32 FogStart; - f32 FogEnd; - f32 FogDensity; - f32 Thickness; + bool FogEnable; }; class COpenGL3MaterialSolidCB : public COpenGL3MaterialBaseCB diff --git a/irr/src/OpenGL/MaterialRenderer.cpp b/irr/src/OpenGL/MaterialRenderer.cpp index 51a796d48..3c32ba318 100644 --- a/irr/src/OpenGL/MaterialRenderer.cpp +++ b/irr/src/OpenGL/MaterialRenderer.cpp @@ -262,35 +262,30 @@ bool COpenGL3MaterialRenderer::linkProgram() // seems that some implementations use an extra null terminator. ++maxlen; - c8 *buf = new c8[maxlen]; + std::vector buf(maxlen); UniformInfo.clear(); - UniformInfo.reallocate(num); + UniformInfo.reserve(num); for (GLint i = 0; i < num; ++i) { SUniformInfo ui; - memset(buf, 0, maxlen); + memset(buf.data(), 0, buf.size()); GLint size; - GL.GetActiveUniform(Program, i, maxlen, 0, &size, &ui.type, reinterpret_cast(buf)); - - core::stringc name = ""; + GL.GetActiveUniform(Program, i, maxlen, 0, &size, &ui.type, reinterpret_cast(buf.data())); // array support, workaround for some bugged drivers. for (s32 i = 0; i < maxlen; ++i) { if (buf[i] == '[' || buf[i] == '\0') break; - name += buf[i]; + ui.name += buf[i]; } - ui.name = name; - ui.location = GL.GetUniformLocation(Program, buf); + ui.location = GL.GetUniformLocation(Program, buf.data()); - UniformInfo.push_back(ui); + UniformInfo.push_back(std::move(ui)); } - - delete[] buf; } return true; diff --git a/irr/src/OpenGL/MaterialRenderer.h b/irr/src/OpenGL/MaterialRenderer.h index fa37cfff3..fca71478a 100644 --- a/irr/src/OpenGL/MaterialRenderer.h +++ b/irr/src/OpenGL/MaterialRenderer.h @@ -4,12 +4,12 @@ #pragma once +#include +#include #include "EMaterialTypes.h" #include "IMaterialRenderer.h" #include "IMaterialRendererServices.h" #include "IGPUProgrammingServices.h" -#include "irrArray.h" -#include "irrString.h" #include "Common.h" @@ -79,13 +79,13 @@ protected: struct SUniformInfo { - core::stringc name; + std::string name; GLenum type; GLint location; }; GLuint Program; - core::array UniformInfo; + std::vector UniformInfo; s32 UserData; }; diff --git a/irr/src/os.h b/irr/src/os.h index fcbaeddd5..bcc096f95 100644 --- a/irr/src/os.h +++ b/irr/src/os.h @@ -10,6 +10,22 @@ #include "ILogger.h" #include "ITimer.h" +// CODE_UNREACHABLE(): Invokes undefined behavior for unreachable code optimization +#if defined(__cpp_lib_unreachable) +#include +#define CODE_UNREACHABLE() std::unreachable() +#elif defined(__has_builtin) +#if __has_builtin(__builtin_unreachable) +#define CODE_UNREACHABLE() __builtin_unreachable() +#endif +#elif defined(_MSC_VER) +#define CODE_UNREACHABLE() __assume(false) +#endif + +#ifndef CODE_UNREACHABLE +#define CODE_UNREACHABLE() (void)0 +#endif + namespace irr { @@ -36,7 +52,6 @@ public: // prints out a string to the console out stdout or debug log or whatever static void print(const c8 *message, ELOG_LEVEL ll = ELL_INFORMATION); static void log(const c8 *message, ELOG_LEVEL ll = ELL_INFORMATION); - static void log(const wchar_t *message, ELOG_LEVEL ll = ELL_INFORMATION); // The string ": " is added between message and hint static void log(const c8 *message, const c8 *hint, ELOG_LEVEL ll = ELL_INFORMATION); diff --git a/irr/test/CMakeLists.txt b/irr/test/CMakeLists.txt deleted file mode 100644 index 6518f69c1..000000000 --- a/irr/test/CMakeLists.txt +++ /dev/null @@ -1,32 +0,0 @@ -link_libraries(IrrlichtMt::IrrlichtMt) -add_executable(image_loader_test image_loader_test.cpp) - -function(test_image_loader format expected input) - string(TOLOWER ${format} suffix) - add_test(NAME ImageLoader${format}-${input} COMMAND image_loader_test ${expected} data/sample_${input}.${suffix} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) -endfunction() - -test_image_loader(BMP 16color-16bpp 4bpp_v3) -# test_image_loader(BMP 16color-16bpp 4bpp_v7) -# test_image_loader(BMP 16color-16bpp 4bpp_v3_rle) -# test_image_loader(BMP 16color-16bpp 4bpp_v7_rle) -test_image_loader(BMP 30color-16bpp 8bpp_v3) -# test_image_loader(BMP 30color-16bpp 8bpp_v7) -test_image_loader(BMP 30color-16bpp 8bpp_v3_rle) -# test_image_loader(BMP 30color-16bpp 8bpp_v7_rle) -# test_image_loader(BMP 30color-16bpp 16bpp_v3) -# test_image_loader(BMP 30color-16bpp 16bpp_v7) -test_image_loader(BMP 30color-24bpp 24bpp_v3) -test_image_loader(BMP 30color-24bpp 24bpp_v7) - -test_image_loader(PNG 30color-24bpp 8bpp) -test_image_loader(PNG 30color-24bpp 24bpp) - -test_image_loader(TGA 30color-32bpp 8bpp_up) -test_image_loader(TGA 30color-32bpp 8bpp_down) -# test_image_loader(TGA 30color-16bpp 8bpp_rle_up) -# test_image_loader(TGA 30color-16bpp 8bpp_rle_down) -test_image_loader(TGA 30color-24bpp 24bpp_up) -test_image_loader(TGA 30color-24bpp 24bpp_down) -test_image_loader(TGA 30color-24bpp 24bpp_rle_up) -test_image_loader(TGA 30color-24bpp 24bpp_rle_down) diff --git a/irr/test/data/sample_16bpp_v3.bmp b/irr/test/data/sample_16bpp_v3.bmp deleted file mode 100644 index 4b6fbcf50..000000000 Binary files a/irr/test/data/sample_16bpp_v3.bmp and /dev/null differ diff --git a/irr/test/data/sample_16bpp_v7.bmp b/irr/test/data/sample_16bpp_v7.bmp deleted file mode 100644 index 7a0b8a6ed..000000000 Binary files a/irr/test/data/sample_16bpp_v7.bmp and /dev/null differ diff --git a/irr/test/data/sample_24bpp.png b/irr/test/data/sample_24bpp.png deleted file mode 100644 index d38f5989c..000000000 Binary files a/irr/test/data/sample_24bpp.png and /dev/null differ diff --git a/irr/test/data/sample_24bpp_down.tga b/irr/test/data/sample_24bpp_down.tga deleted file mode 100644 index 031f88282..000000000 Binary files a/irr/test/data/sample_24bpp_down.tga and /dev/null differ diff --git a/irr/test/data/sample_24bpp_rle_down.tga b/irr/test/data/sample_24bpp_rle_down.tga deleted file mode 100644 index 24e765e19..000000000 Binary files a/irr/test/data/sample_24bpp_rle_down.tga and /dev/null differ diff --git a/irr/test/data/sample_24bpp_rle_up.tga b/irr/test/data/sample_24bpp_rle_up.tga deleted file mode 100644 index 4a5f9604d..000000000 Binary files a/irr/test/data/sample_24bpp_rle_up.tga and /dev/null differ diff --git a/irr/test/data/sample_24bpp_up.tga b/irr/test/data/sample_24bpp_up.tga deleted file mode 100644 index 1f1edc6e9..000000000 Binary files a/irr/test/data/sample_24bpp_up.tga and /dev/null differ diff --git a/irr/test/data/sample_24bpp_v3.bmp b/irr/test/data/sample_24bpp_v3.bmp deleted file mode 100644 index 4684f1466..000000000 Binary files a/irr/test/data/sample_24bpp_v3.bmp and /dev/null differ diff --git a/irr/test/data/sample_24bpp_v7.bmp b/irr/test/data/sample_24bpp_v7.bmp deleted file mode 100644 index 1fa343188..000000000 Binary files a/irr/test/data/sample_24bpp_v7.bmp and /dev/null differ diff --git a/irr/test/data/sample_4bpp_v3.bmp b/irr/test/data/sample_4bpp_v3.bmp deleted file mode 100644 index 0cc06f316..000000000 Binary files a/irr/test/data/sample_4bpp_v3.bmp and /dev/null differ diff --git a/irr/test/data/sample_8bpp.png b/irr/test/data/sample_8bpp.png deleted file mode 100644 index c81f816f4..000000000 Binary files a/irr/test/data/sample_8bpp.png and /dev/null differ diff --git a/irr/test/data/sample_8bpp_down.tga b/irr/test/data/sample_8bpp_down.tga deleted file mode 100644 index e46cad554..000000000 Binary files a/irr/test/data/sample_8bpp_down.tga and /dev/null differ diff --git a/irr/test/data/sample_8bpp_rle_down.tga b/irr/test/data/sample_8bpp_rle_down.tga deleted file mode 100644 index 3d34bff4c..000000000 Binary files a/irr/test/data/sample_8bpp_rle_down.tga and /dev/null differ diff --git a/irr/test/data/sample_8bpp_rle_up.tga b/irr/test/data/sample_8bpp_rle_up.tga deleted file mode 100644 index 0372bc34c..000000000 Binary files a/irr/test/data/sample_8bpp_rle_up.tga and /dev/null differ diff --git a/irr/test/data/sample_8bpp_up.tga b/irr/test/data/sample_8bpp_up.tga deleted file mode 100644 index a314e8689..000000000 Binary files a/irr/test/data/sample_8bpp_up.tga and /dev/null differ diff --git a/irr/test/data/sample_8bpp_v3.bmp b/irr/test/data/sample_8bpp_v3.bmp deleted file mode 100644 index a890e6465..000000000 Binary files a/irr/test/data/sample_8bpp_v3.bmp and /dev/null differ diff --git a/irr/test/data/sample_8bpp_v3_rle.bmp b/irr/test/data/sample_8bpp_v3_rle.bmp deleted file mode 100644 index d460d0fd6..000000000 Binary files a/irr/test/data/sample_8bpp_v3_rle.bmp and /dev/null differ diff --git a/irr/test/data/sample_8bpp_v7.bmp b/irr/test/data/sample_8bpp_v7.bmp deleted file mode 100644 index a31a342c2..000000000 Binary files a/irr/test/data/sample_8bpp_v7.bmp and /dev/null differ diff --git a/irr/test/data/sample_8bpp_v7_rle.bmp b/irr/test/data/sample_8bpp_v7_rle.bmp deleted file mode 100644 index d197b09a6..000000000 Binary files a/irr/test/data/sample_8bpp_v7_rle.bmp and /dev/null differ diff --git a/irr/test/image_loader_test.cpp b/irr/test/image_loader_test.cpp deleted file mode 100644 index 1dd4888f2..000000000 --- a/irr/test/image_loader_test.cpp +++ /dev/null @@ -1,162 +0,0 @@ -#include -#include -#include -#include -#include - -using namespace irr; - -struct ImageDesc -{ - const char *name; - video::ECOLOR_FORMAT format; - std::vector data; -}; - -template -std::vector to_byte_array(std::initializer_list in_data) -{ - std::vector data; - data.resize(sizeof(T) * in_data.size()); - memcpy(data.data(), in_data.begin(), data.size()); - return data; -} - -static const ImageDesc test_images[] = { - {"16color-16bpp", video::ECF_A1R5G5B5, to_byte_array({ - 0xb6df, 0xb6df, 0xb6df, 0xb6df, 0xc23f, 0xc23f, 0xd61f, 0xd61f, 0xea3f, 0xea3f, 0xfe5e, 0xfe5e, 0xfe7c, 0xfe7a, 0xfe7a, 0xfe97, 0xfeb5, 0xfeb5, 0xff16, - 0xb6df, 0xb6df, 0xff3f, 0xff3f, 0xc23f, 0xf2df, 0xf2df, 0xf2df, 0xea3f, 0xda7f, 0xda7f, 0xfe5e, 0xfe7a, 0xc23f, 0xbe7f, 0xbe7f, 0xfeb5, 0xfeb5, 0xfb76, - 0xb6df, 0xff9e, 0xc23f, 0xc23f, 0xc23f, 0xf2df, 0xd61f, 0xf2df, 0xea3f, 0xda7f, 0xfe5e, 0xda7f, 0xfe7a, 0xc23f, 0xfe97, 0xfeb5, 0xfeb5, 0xff16, 0xfb76, - 0xb6df, 0xff9e, 0xbe7f, 0xc23f, 0xd61f, 0xfe7c, 0xd61f, 0xf2df, 0xfe5e, 0xf2df, 0xfe7c, 0xda7f, 0xfe7a, 0xda7f, 0xbe7f, 0xfeb5, 0xff16, 0xff16, 0xfb76, - 0xb6df, 0xff9e, 0xc23f, 0xc23f, 0xd61f, 0xff3f, 0xd61f, 0xf2df, 0xfe5e, 0xda7f, 0xfe7c, 0xda7f, 0xfe7a, 0xc23f, 0xfeb5, 0xfeb5, 0xff16, 0xff16, 0xfb76, - 0xb6df, 0xbe7f, 0xff9e, 0xff3f, 0xd61f, 0xff3f, 0xf2df, 0xf2df, 0xfe5e, 0xf2df, 0xda7f, 0xfe97, 0xfe97, 0xda7f, 0xc23f, 0xda7f, 0xfb76, 0xfb76, 0xfb76, - 0xbe7f, 0xc23f, 0xc23f, 0xd61f, 0xd61f, 0xea3f, 0xea3f, 0xfe5e, 0xfe5e, 0xfe7c, 0xfe7c, 0xfe7a, 0xfe97, 0xfeb5, 0xfeb5, 0xfeb5, 0xfb76, 0xfb76, 0xfb76, - 0xbe7f, 0xc23f, 0xd61f, 0xd61f, 0xd61f, 0xea3f, 0xea3f, 0xfe5e, 0xfe5e, 0xfe7c, 0xfe97, 0xfe97, 0xfe97, 0xfeb5, 0xff16, 0xff16, 0xfb76, 0xfb76, 0xfb76, - 0xc23f, 0xff9e, 0xc23f, 0xd61f, 0xff3f, 0xea3f, 0xfe5e, 0xff3f, 0xfe7c, 0xfe7c, 0xf2df, 0xfe97, 0xfeb5, 0xfeb5, 0xda7f, 0xff16, 0xc23f, 0xc23f, 0xbe7f, - 0xc23f, 0xff9e, 0xff9e, 0xd61f, 0xff9e, 0xea3f, 0xff3f, 0xfe5e, 0xff3f, 0xfe7a, 0xf2df, 0xf2df, 0xfeb5, 0xf2df, 0xda7f, 0xfb76, 0xc23f, 0xfb76, 0xfb76, - 0xc23f, 0xff9e, 0xd61f, 0xff9e, 0xff9e, 0xfe5e, 0xff3f, 0xff3f, 0xff3f, 0xfe7a, 0xff3f, 0xfeb5, 0xf2df, 0xff16, 0xda7f, 0xfb76, 0xda7f, 0xda7f, 0xfb76, - 0xc23f, 0xff9e, 0xea3f, 0xea3f, 0xff9e, 0xfe5e, 0xff9e, 0xfe7c, 0xff3f, 0xfe97, 0xf2df, 0xfeb5, 0xfeb5, 0xff16, 0xf2df, 0xfb76, 0xda7f, 0xfb76, 0xfb76, - 0xd61f, 0xff9e, 0xd61f, 0xea3f, 0xff9e, 0xfe5e, 0xff9e, 0xfe7c, 0xff3f, 0xfe97, 0xff3f, 0xfeb5, 0xff16, 0xfb76, 0xda7f, 0xfb76, 0xda7f, 0xda7f, 0xc23f, - 0xd61f, 0xd61f, 0xea3f, 0xea3f, 0xea3f, 0xfe5e, 0xfe7c, 0xfe7a, 0xfe7a, 0xfe97, 0xfeb5, 0xff16, 0xff16, 0xfb76, 0xfb76, 0xfb76, 0xfb76, 0xfb76, 0xfb76, - 0xd61f, 0xd61f, 0xea3f, 0xfe5e, 0xfe5e, 0xfe7c, 0xfe7a, 0xfe7a, 0xfe97, 0xfeb5, 0xfeb5, 0xff16, 0xff16, 0xfb76, 0xfb76, 0xfb76, 0xfb76, 0xfb76, 0xfb76, - })}, - - {"30color-16bpp", video::ECF_A1R5G5B5, to_byte_array({ - 0xbabf, 0xbabf, 0xbabf, 0xbabf, 0xbe3f, 0xbdff, 0xc9ff, 0xda1f, 0xee3f, 0xee3f, 0xfa5f, 0xfe5e, 0xfe7c, 0xfe7b, 0xfe79, 0xfe97, 0xfeb5, 0xfed5, 0xff16, - 0xbabf, 0xbabf, 0xff1f, 0xff1f, 0xbdff, 0xfaff, 0xf2df, 0xeabf, 0xee3f, 0xe27f, 0xda7f, 0xfe5e, 0xfe7b, 0xc25f, 0xbe7f, 0xbe7f, 0xfeb5, 0xfed5, 0xff56, - 0xbabf, 0xff7e, 0xbe7f, 0xc25f, 0xbdff, 0xfaff, 0xda1f, 0xf2df, 0xee3f, 0xda7f, 0xfe5e, 0xce5f, 0xfe79, 0xce5f, 0xfe97, 0xfeb5, 0xfed5, 0xff16, 0xff56, - 0xbabf, 0xff7e, 0xbe7f, 0xbdff, 0xc9ff, 0xfaff, 0xda1f, 0xf2df, 0xfa5f, 0xeabf, 0xfe5e, 0xda7f, 0xfe79, 0xce5f, 0xc25f, 0xfeb5, 0xff16, 0xff16, 0xff76, - 0xbabf, 0xff7e, 0xc25f, 0xbdff, 0xc9ff, 0xff1f, 0xda1f, 0xf2df, 0xfa5f, 0xeabf, 0xfe7c, 0xda7f, 0xfe79, 0xce5f, 0xfeb5, 0xfed5, 0xff16, 0xff56, 0xff97, - 0xbabf, 0xbe7f, 0xff7e, 0xff5e, 0xda1f, 0xff1f, 0xfaff, 0xfaff, 0xfa5f, 0xf2df, 0xeabf, 0xfe79, 0xfe97, 0xda7f, 0xce5f, 0xce5f, 0xff56, 0xff76, 0xff97, - 0xbe7f, 0xc25f, 0xbdff, 0xc9ff, 0xda1f, 0xda1f, 0xee3f, 0xfa5f, 0xfa5f, 0xfe7c, 0xfe7b, 0xfe79, 0xfe97, 0xfeb5, 0xfed5, 0xfed5, 0xff76, 0xff76, 0xff97, - 0xbe7f, 0xbe3f, 0xc9ff, 0xc9ff, 0xda1f, 0xee3f, 0xee3f, 0xfa5f, 0xfe5e, 0xfe7c, 0xfe79, 0xfe97, 0xfe97, 0xfeb5, 0xff16, 0xff16, 0xff76, 0xff97, 0xff97, - 0xbe3f, 0xffbe, 0xc9ff, 0xda1f, 0xff5e, 0xee3f, 0xfa5f, 0xff1f, 0xfe7c, 0xfe7b, 0xf2df, 0xfe97, 0xfeb5, 0xfeb5, 0xda7f, 0xff76, 0xce5f, 0xbe3f, 0xc25f, - 0xbe3f, 0xffbe, 0xffbe, 0xda1f, 0xff7e, 0xfa5f, 0xff5e, 0xfe5e, 0xff1f, 0xfe79, 0xf2df, 0xf2df, 0xfeb5, 0xeabf, 0xda7f, 0xff76, 0xce5f, 0xff97, 0xff97, - 0xbdff, 0xffbe, 0xda1f, 0xff7e, 0xff7e, 0xfa5f, 0xff5e, 0xff1f, 0xff1f, 0xfe79, 0xfaff, 0xfeb5, 0xf2df, 0xff16, 0xe27f, 0xff97, 0xda7f, 0xce5f, 0xff97, - 0xbdff, 0xffbe, 0xda1f, 0xee3f, 0xffbe, 0xfa5f, 0xff7e, 0xfe7b, 0xff1f, 0xfe97, 0xfaff, 0xfeb5, 0xfed5, 0xff56, 0xeabf, 0xff97, 0xda7f, 0xff97, 0xff97, - 0xc9ff, 0xffbe, 0xda1f, 0xee3f, 0xff7e, 0xfa5f, 0xff7e, 0xfe7c, 0xff5e, 0xfe97, 0xfaff, 0xfed5, 0xff16, 0xff56, 0xeabf, 0xff97, 0xda7f, 0xda7f, 0xce5f, - 0xda1f, 0xda1f, 0xee3f, 0xee3f, 0xfa5f, 0xfe5e, 0xfe7c, 0xfe79, 0xfe79, 0xfe97, 0xfeb5, 0xfed5, 0xff16, 0xff56, 0xff97, 0xff97, 0xff97, 0xff97, 0xff97, - 0xda1f, 0xda1f, 0xee3f, 0xfa5f, 0xfe5e, 0xfe7c, 0xfe7b, 0xfe79, 0xfe97, 0xfeb5, 0xfed5, 0xff16, 0xff56, 0xff97, 0xff97, 0xff97, 0xff97, 0xff97, 0xff97, - })}, - - {"30color-24bpp", video::ECF_R8G8B8, { - 0x71, 0xaf, 0xff, 0x71, 0xaf, 0xff, 0x71, 0xaf, 0xff, 0x71, 0xaf, 0xff, 0x7b, 0x8b, 0xff, 0x7a, 0x7f, 0xff, 0x90, 0x7f, 0xff, 0xb6, 0x85, 0xff, 0xd9, 0x8c, 0xff, 0xd9, 0x8c, 0xff, 0xf4, 0x92, 0xfe, 0xfe, 0x96, 0xf0, 0xfd, 0x99, 0xe3, 0xfd, 0x9b, 0xda, 0xfc, 0x9f, 0xca, 0xfc, 0xa4, 0xbc, 0xfb, 0xa9, 0xab, 0xfa, 0xb6, 0xad, 0xf9, 0xc6, 0xb1, - 0x71, 0xaf, 0xff, 0x71, 0xaf, 0xff, 0xff, 0xc6, 0xfc, 0xff, 0xc6, 0xfc, 0x7a, 0x7f, 0xff, 0xf7, 0xbe, 0xff, 0xe4, 0xb2, 0xfe, 0xd4, 0xa9, 0xff, 0xd9, 0x8c, 0xff, 0xc3, 0x98, 0xff, 0xb2, 0x9a, 0xff, 0xfe, 0x96, 0xf0, 0xfd, 0x9b, 0xda, 0x86, 0x93, 0xfe, 0x78, 0x9b, 0xff, 0x78, 0x9b, 0xff, 0xfb, 0xa9, 0xab, 0xfa, 0xb6, 0xad, 0xf8, 0xd2, 0xb3, - 0x71, 0xaf, 0xff, 0xfe, 0xdc, 0xf3, 0x78, 0x9b, 0xff, 0x86, 0x93, 0xfe, 0x7a, 0x7f, 0xff, 0xf7, 0xbe, 0xff, 0xb6, 0x85, 0xff, 0xe4, 0xb2, 0xfe, 0xd9, 0x8c, 0xff, 0xb2, 0x9a, 0xff, 0xfe, 0x96, 0xf0, 0x9a, 0x91, 0xff, 0xfc, 0x9f, 0xca, 0x9a, 0x91, 0xff, 0xfc, 0xa4, 0xbc, 0xfb, 0xa9, 0xab, 0xfa, 0xb6, 0xad, 0xf9, 0xc6, 0xb1, 0xf8, 0xd2, 0xb3, - 0x71, 0xaf, 0xff, 0xfe, 0xdc, 0xf3, 0x78, 0x9b, 0xff, 0x7a, 0x7f, 0xff, 0x90, 0x7f, 0xff, 0xf7, 0xbe, 0xff, 0xb6, 0x85, 0xff, 0xe4, 0xb2, 0xfe, 0xf4, 0x92, 0xfe, 0xd4, 0xa9, 0xff, 0xfe, 0x96, 0xf0, 0xb2, 0x9a, 0xff, 0xfc, 0x9f, 0xca, 0x9a, 0x91, 0xff, 0x86, 0x93, 0xfe, 0xfb, 0xa9, 0xab, 0xf9, 0xc6, 0xb1, 0xf9, 0xc6, 0xb1, 0xf8, 0xd8, 0xb5, - 0x71, 0xaf, 0xff, 0xfe, 0xdc, 0xf3, 0x86, 0x93, 0xfe, 0x7a, 0x7f, 0xff, 0x90, 0x7f, 0xff, 0xff, 0xc6, 0xfc, 0xb6, 0x85, 0xff, 0xe4, 0xb2, 0xfe, 0xf4, 0x92, 0xfe, 0xd4, 0xa9, 0xff, 0xfd, 0x99, 0xe3, 0xb2, 0x9a, 0xff, 0xfc, 0x9f, 0xca, 0x9a, 0x91, 0xff, 0xfb, 0xa9, 0xab, 0xfa, 0xb6, 0xad, 0xf9, 0xc6, 0xb1, 0xf8, 0xd2, 0xb3, 0xf8, 0xe4, 0xb9, - 0x71, 0xaf, 0xff, 0x78, 0x9b, 0xff, 0xfe, 0xdc, 0xf3, 0xff, 0xd0, 0xf7, 0xb6, 0x85, 0xff, 0xff, 0xc6, 0xfc, 0xf7, 0xbe, 0xff, 0xf7, 0xbe, 0xff, 0xf4, 0x92, 0xfe, 0xe4, 0xb2, 0xfe, 0xd4, 0xa9, 0xff, 0xfc, 0x9f, 0xca, 0xfc, 0xa4, 0xbc, 0xb2, 0x9a, 0xff, 0x9a, 0x91, 0xff, 0x9a, 0x91, 0xff, 0xf8, 0xd2, 0xb3, 0xf8, 0xd8, 0xb5, 0xf8, 0xe4, 0xb9, - 0x78, 0x9b, 0xff, 0x86, 0x93, 0xfe, 0x7a, 0x7f, 0xff, 0x90, 0x7f, 0xff, 0xb6, 0x85, 0xff, 0xb6, 0x85, 0xff, 0xd9, 0x8c, 0xff, 0xf4, 0x92, 0xfe, 0xf4, 0x92, 0xfe, 0xfd, 0x99, 0xe3, 0xfd, 0x9b, 0xda, 0xfc, 0x9f, 0xca, 0xfc, 0xa4, 0xbc, 0xfb, 0xa9, 0xab, 0xfa, 0xb6, 0xad, 0xfa, 0xb6, 0xad, 0xf8, 0xd8, 0xb5, 0xf8, 0xd8, 0xb5, 0xf8, 0xe4, 0xb9, - 0x78, 0x9b, 0xff, 0x7b, 0x8b, 0xff, 0x90, 0x7f, 0xff, 0x90, 0x7f, 0xff, 0xb6, 0x85, 0xff, 0xd9, 0x8c, 0xff, 0xd9, 0x8c, 0xff, 0xf4, 0x92, 0xfe, 0xfe, 0x96, 0xf0, 0xfd, 0x99, 0xe3, 0xfc, 0x9f, 0xca, 0xfc, 0xa4, 0xbc, 0xfc, 0xa4, 0xbc, 0xfb, 0xa9, 0xab, 0xf9, 0xc6, 0xb1, 0xf9, 0xc6, 0xb1, 0xf8, 0xd8, 0xb5, 0xf8, 0xe4, 0xb9, 0xf8, 0xe4, 0xb9, - 0x7b, 0x8b, 0xff, 0xff, 0xeb, 0xf2, 0x90, 0x7f, 0xff, 0xb6, 0x85, 0xff, 0xff, 0xd0, 0xf7, 0xd9, 0x8c, 0xff, 0xf4, 0x92, 0xfe, 0xff, 0xc6, 0xfc, 0xfd, 0x99, 0xe3, 0xfd, 0x9b, 0xda, 0xe4, 0xb2, 0xfe, 0xfc, 0xa4, 0xbc, 0xfb, 0xa9, 0xab, 0xfb, 0xa9, 0xab, 0xb2, 0x9a, 0xff, 0xf8, 0xd8, 0xb5, 0x9a, 0x91, 0xff, 0x7b, 0x8b, 0xff, 0x86, 0x93, 0xfe, - 0x7b, 0x8b, 0xff, 0xff, 0xeb, 0xf2, 0xff, 0xeb, 0xf2, 0xb6, 0x85, 0xff, 0xfe, 0xdc, 0xf3, 0xf4, 0x92, 0xfe, 0xff, 0xd0, 0xf7, 0xfe, 0x96, 0xf0, 0xff, 0xc6, 0xfc, 0xfc, 0x9f, 0xca, 0xe4, 0xb2, 0xfe, 0xe4, 0xb2, 0xfe, 0xfb, 0xa9, 0xab, 0xd4, 0xa9, 0xff, 0xb2, 0x9a, 0xff, 0xf8, 0xd8, 0xb5, 0x9a, 0x91, 0xff, 0xf8, 0xe4, 0xb9, 0xf8, 0xe4, 0xb9, - 0x7a, 0x7f, 0xff, 0xff, 0xeb, 0xf2, 0xb6, 0x85, 0xff, 0xfe, 0xdc, 0xf3, 0xfe, 0xdc, 0xf3, 0xf4, 0x92, 0xfe, 0xff, 0xd0, 0xf7, 0xff, 0xc6, 0xfc, 0xff, 0xc6, 0xfc, 0xfc, 0x9f, 0xca, 0xf7, 0xbe, 0xff, 0xfb, 0xa9, 0xab, 0xe4, 0xb2, 0xfe, 0xf9, 0xc6, 0xb1, 0xc3, 0x98, 0xff, 0xf8, 0xe4, 0xb9, 0xb2, 0x9a, 0xff, 0x9a, 0x91, 0xff, 0xf8, 0xe4, 0xb9, - 0x7a, 0x7f, 0xff, 0xff, 0xeb, 0xf2, 0xb6, 0x85, 0xff, 0xd9, 0x8c, 0xff, 0xff, 0xeb, 0xf2, 0xf4, 0x92, 0xfe, 0xfe, 0xdc, 0xf3, 0xfd, 0x9b, 0xda, 0xff, 0xc6, 0xfc, 0xfc, 0xa4, 0xbc, 0xf7, 0xbe, 0xff, 0xfb, 0xa9, 0xab, 0xfa, 0xb6, 0xad, 0xf8, 0xd2, 0xb3, 0xd4, 0xa9, 0xff, 0xf8, 0xe4, 0xb9, 0xb2, 0x9a, 0xff, 0xf8, 0xe4, 0xb9, 0xf8, 0xe4, 0xb9, - 0x90, 0x7f, 0xff, 0xff, 0xeb, 0xf2, 0xb6, 0x85, 0xff, 0xd9, 0x8c, 0xff, 0xfe, 0xdc, 0xf3, 0xf4, 0x92, 0xfe, 0xfe, 0xdc, 0xf3, 0xfd, 0x99, 0xe3, 0xff, 0xd0, 0xf7, 0xfc, 0xa4, 0xbc, 0xf7, 0xbe, 0xff, 0xfa, 0xb6, 0xad, 0xf9, 0xc6, 0xb1, 0xf8, 0xd2, 0xb3, 0xd4, 0xa9, 0xff, 0xf8, 0xe4, 0xb9, 0xb2, 0x9a, 0xff, 0xb2, 0x9a, 0xff, 0x9a, 0x91, 0xff, - 0xb6, 0x85, 0xff, 0xb6, 0x85, 0xff, 0xd9, 0x8c, 0xff, 0xd9, 0x8c, 0xff, 0xf4, 0x92, 0xfe, 0xfe, 0x96, 0xf0, 0xfd, 0x99, 0xe3, 0xfc, 0x9f, 0xca, 0xfc, 0x9f, 0xca, 0xfc, 0xa4, 0xbc, 0xfb, 0xa9, 0xab, 0xfa, 0xb6, 0xad, 0xf9, 0xc6, 0xb1, 0xf8, 0xd2, 0xb3, 0xf8, 0xe4, 0xb9, 0xf8, 0xe4, 0xb9, 0xf8, 0xe4, 0xb9, 0xf8, 0xe4, 0xb9, 0xf8, 0xe4, 0xb9, - 0xb6, 0x85, 0xff, 0xb6, 0x85, 0xff, 0xd9, 0x8c, 0xff, 0xf4, 0x92, 0xfe, 0xfe, 0x96, 0xf0, 0xfd, 0x99, 0xe3, 0xfd, 0x9b, 0xda, 0xfc, 0x9f, 0xca, 0xfc, 0xa4, 0xbc, 0xfb, 0xa9, 0xab, 0xfa, 0xb6, 0xad, 0xf9, 0xc6, 0xb1, 0xf8, 0xd2, 0xb3, 0xf8, 0xe4, 0xb9, 0xf8, 0xe4, 0xb9, 0xf8, 0xe4, 0xb9, 0xf8, 0xe4, 0xb9, 0xf8, 0xe4, 0xb9, 0xf8, 0xe4, 0xb9, - }}, - - {"30color-32bpp", video::ECF_A8R8G8B8, to_byte_array({ - 0xff71afff, 0xff71afff, 0xff71afff, 0xff71afff, 0xff7b8bff, 0xff7a7fff, 0xff907fff, 0xffb685ff, 0xffd98cff, 0xffd98cff, 0xfff492fe, 0xfffe96f0, 0xfffd99e3, 0xfffd9bda, 0xfffc9fca, 0xfffca4bc, 0xfffba9ab, 0xfffab6ad, 0xfff9c6b1, - 0xff71afff, 0xff71afff, 0xffffc6fc, 0xffffc6fc, 0xff7a7fff, 0xfff7beff, 0xffe4b2fe, 0xffd4a9ff, 0xffd98cff, 0xffc398ff, 0xffb29aff, 0xfffe96f0, 0xfffd9bda, 0xff8693fe, 0xff789bff, 0xff789bff, 0xfffba9ab, 0xfffab6ad, 0xfff8d2b3, - 0xff71afff, 0xfffedcf3, 0xff789bff, 0xff8693fe, 0xff7a7fff, 0xfff7beff, 0xffb685ff, 0xffe4b2fe, 0xffd98cff, 0xffb29aff, 0xfffe96f0, 0xff9a91ff, 0xfffc9fca, 0xff9a91ff, 0xfffca4bc, 0xfffba9ab, 0xfffab6ad, 0xfff9c6b1, 0xfff8d2b3, - 0xff71afff, 0xfffedcf3, 0xff789bff, 0xff7a7fff, 0xff907fff, 0xfff7beff, 0xffb685ff, 0xffe4b2fe, 0xfff492fe, 0xffd4a9ff, 0xfffe96f0, 0xffb29aff, 0xfffc9fca, 0xff9a91ff, 0xff8693fe, 0xfffba9ab, 0xfff9c6b1, 0xfff9c6b1, 0xfff8d8b5, - 0xff71afff, 0xfffedcf3, 0xff8693fe, 0xff7a7fff, 0xff907fff, 0xffffc6fc, 0xffb685ff, 0xffe4b2fe, 0xfff492fe, 0xffd4a9ff, 0xfffd99e3, 0xffb29aff, 0xfffc9fca, 0xff9a91ff, 0xfffba9ab, 0xfffab6ad, 0xfff9c6b1, 0xfff8d2b3, 0xfff8e4b9, - 0xff71afff, 0xff789bff, 0xfffedcf3, 0xffffd0f7, 0xffb685ff, 0xffffc6fc, 0xfff7beff, 0xfff7beff, 0xfff492fe, 0xffe4b2fe, 0xffd4a9ff, 0xfffc9fca, 0xfffca4bc, 0xffb29aff, 0xff9a91ff, 0xff9a91ff, 0xfff8d2b3, 0xfff8d8b5, 0xfff8e4b9, - 0xff789bff, 0xff8693fe, 0xff7a7fff, 0xff907fff, 0xffb685ff, 0xffb685ff, 0xffd98cff, 0xfff492fe, 0xfff492fe, 0xfffd99e3, 0xfffd9bda, 0xfffc9fca, 0xfffca4bc, 0xfffba9ab, 0xfffab6ad, 0xfffab6ad, 0xfff8d8b5, 0xfff8d8b5, 0xfff8e4b9, - 0xff789bff, 0xff7b8bff, 0xff907fff, 0xff907fff, 0xffb685ff, 0xffd98cff, 0xffd98cff, 0xfff492fe, 0xfffe96f0, 0xfffd99e3, 0xfffc9fca, 0xfffca4bc, 0xfffca4bc, 0xfffba9ab, 0xfff9c6b1, 0xfff9c6b1, 0xfff8d8b5, 0xfff8e4b9, 0xfff8e4b9, - 0xff7b8bff, 0xffffebf2, 0xff907fff, 0xffb685ff, 0xffffd0f7, 0xffd98cff, 0xfff492fe, 0xffffc6fc, 0xfffd99e3, 0xfffd9bda, 0xffe4b2fe, 0xfffca4bc, 0xfffba9ab, 0xfffba9ab, 0xffb29aff, 0xfff8d8b5, 0xff9a91ff, 0xff7b8bff, 0xff8693fe, - 0xff7b8bff, 0xffffebf2, 0xffffebf2, 0xffb685ff, 0xfffedcf3, 0xfff492fe, 0xffffd0f7, 0xfffe96f0, 0xffffc6fc, 0xfffc9fca, 0xffe4b2fe, 0xffe4b2fe, 0xfffba9ab, 0xffd4a9ff, 0xffb29aff, 0xfff8d8b5, 0xff9a91ff, 0xfff8e4b9, 0xfff8e4b9, - 0xff7a7fff, 0xffffebf2, 0xffb685ff, 0xfffedcf3, 0xfffedcf3, 0xfff492fe, 0xffffd0f7, 0xffffc6fc, 0xffffc6fc, 0xfffc9fca, 0xfff7beff, 0xfffba9ab, 0xffe4b2fe, 0xfff9c6b1, 0xffc398ff, 0xfff8e4b9, 0xffb29aff, 0xff9a91ff, 0xfff8e4b9, - 0xff7a7fff, 0xffffebf2, 0xffb685ff, 0xffd98cff, 0xffffebf2, 0xfff492fe, 0xfffedcf3, 0xfffd9bda, 0xffffc6fc, 0xfffca4bc, 0xfff7beff, 0xfffba9ab, 0xfffab6ad, 0xfff8d2b3, 0xffd4a9ff, 0xfff8e4b9, 0xffb29aff, 0xfff8e4b9, 0xfff8e4b9, - 0xff907fff, 0xffffebf2, 0xffb685ff, 0xffd98cff, 0xfffedcf3, 0xfff492fe, 0xfffedcf3, 0xfffd99e3, 0xffffd0f7, 0xfffca4bc, 0xfff7beff, 0xfffab6ad, 0xfff9c6b1, 0xfff8d2b3, 0xffd4a9ff, 0xfff8e4b9, 0xffb29aff, 0xffb29aff, 0xff9a91ff, - 0xffb685ff, 0xffb685ff, 0xffd98cff, 0xffd98cff, 0xfff492fe, 0xfffe96f0, 0xfffd99e3, 0xfffc9fca, 0xfffc9fca, 0xfffca4bc, 0xfffba9ab, 0xfffab6ad, 0xfff9c6b1, 0xfff8d2b3, 0xfff8e4b9, 0xfff8e4b9, 0xfff8e4b9, 0xfff8e4b9, 0xfff8e4b9, - 0xffb685ff, 0xffb685ff, 0xffd98cff, 0xfff492fe, 0xfffe96f0, 0xfffd99e3, 0xfffd9bda, 0xfffc9fca, 0xfffca4bc, 0xfffba9ab, 0xfffab6ad, 0xfff9c6b1, 0xfff8d2b3, 0xfff8e4b9, 0xfff8e4b9, 0xfff8e4b9, 0xfff8e4b9, 0xfff8e4b9, 0xfff8e4b9, - })}, - -}; - -void printImageBytes(const video::IImage *img) -{ - const auto *data = (u8 *)img->getData(); - const auto w = img->getPitch(); - const auto h = img->getDimension().Height; - for (int y = 0; y < h; y++) { - for (int k = 0; k < w; k++) { - std::printf("0x%02x, ", *data++); - } - std::printf("\n"); - } -} - -int main(int argc, char *argv[]) -try { - if (argc != 3) - throw std::runtime_error("Invalid arguments. Expected sample ID and image file name"); - - const ImageDesc *sample = nullptr; - for (auto &&image : test_images) { - if (strcmp(argv[1], image.name) == 0) - sample = ℑ - } - if (!sample) - throw std::runtime_error("Sample not found"); - - SIrrlichtCreationParameters p; - p.DriverType = video::EDT_NULL; - p.WindowSize = core::dimension2du(640, 480); - p.LoggingLevel = ELL_DEBUG; - - auto *device = createDeviceEx(p); - if (!device) - throw std::runtime_error("Failed to create device"); - - auto *driver = device->getVideoDriver(); - - auto *img = driver->createImageFromFile(argv[2]); - if (!img) - throw std::runtime_error("Failed to load image"); - - if (img->getDimension() != core::dimension2du{19, 15}) - throw std::runtime_error("Wrong image dimensions"); - - if (img->getColorFormat() != sample->format) - throw std::runtime_error("Wrong image format"); - - if (img->getImageDataSizeInBytes() != sample->data.size()) - throw std::logic_error("Image data size not equal to sample size"); - - if (memcmp(img->getData(), sample->data.data(), sample->data.size()) != 0) { - printImageBytes(img); - throw std::runtime_error("Wrong image contents"); - } - - img->drop(); - device->drop(); - - return 0; -} catch (const std::exception &e) { - std::printf("Test failed: %s\n", e.what()); - return 1; -} diff --git a/lib/gmp/mini-gmp.c b/lib/gmp/mini-gmp.c index 69a72bfd4..ef9010be2 100644 --- a/lib/gmp/mini-gmp.c +++ b/lib/gmp/mini-gmp.c @@ -55,7 +55,7 @@ see https://www.gnu.org/licenses/. */ #include #endif - + /* Macros */ #define GMP_LIMB_BITS (sizeof(mp_limb_t) * CHAR_BIT) @@ -283,7 +283,7 @@ see https://www.gnu.org/licenses/. */ const int mp_bits_per_limb = GMP_LIMB_BITS; - + /* Memory allocation and other helper functions. */ static void gmp_die (const char *msg) @@ -384,7 +384,7 @@ gmp_free_limbs (mp_ptr old, mp_size_t size) gmp_free (old, size * sizeof (mp_limb_t)); } - + /* MPN interface */ void @@ -777,7 +777,7 @@ mpn_neg (mp_ptr rp, mp_srcptr up, mp_size_t n) return 1; } - + /* MPN division interface. */ /* The 3/2 inverse is defined as @@ -1169,7 +1169,7 @@ mpn_div_qr (mp_ptr qp, mp_ptr np, mp_size_t nn, mp_srcptr dp, mp_size_t dn) gmp_free_limbs (tp, dn); } - + /* MPN base conversion. */ static unsigned mpn_base_power_of_two_p (unsigned b) @@ -1425,7 +1425,7 @@ mpn_set_str (mp_ptr rp, const unsigned char *sp, size_t sn, int base) } } - + /* MPZ interface */ void mpz_init (mpz_t r) @@ -1480,7 +1480,7 @@ mpz_realloc (mpz_t r, mp_size_t size) #define MPZ_REALLOC(z,n) ((n) > (z)->_mp_alloc \ ? mpz_realloc(z,n) \ : (z)->_mp_d) - + /* MPZ assignment and basic conversions. */ void mpz_set_si (mpz_t r, signed long int x) @@ -1704,7 +1704,7 @@ mpz_roinit_n (mpz_t x, mp_srcptr xp, mp_size_t xs) return x; } - + /* Conversions and comparison to double. */ void mpz_set_d (mpz_t r, double x) @@ -1862,7 +1862,7 @@ mpz_cmp_d (const mpz_t x, double d) } } - + /* MPZ comparisons and the like. */ int mpz_sgn (const mpz_t u) @@ -1950,7 +1950,7 @@ mpz_swap (mpz_t u, mpz_t v) MPN_PTR_SWAP (u->_mp_d, u->_mp_size, v->_mp_d, v->_mp_size); } - + /* MPZ addition and subtraction */ @@ -2050,7 +2050,7 @@ mpz_sub (mpz_t r, const mpz_t a, const mpz_t b) r->_mp_size = a->_mp_size >= 0 ? rn : - rn; } - + /* MPZ multiplication */ void mpz_mul_si (mpz_t r, const mpz_t u, long int v) @@ -2186,7 +2186,7 @@ mpz_submul (mpz_t r, const mpz_t u, const mpz_t v) mpz_clear (t); } - + /* MPZ division */ enum mpz_div_round_mode { GMP_DIV_FLOOR, GMP_DIV_CEIL, GMP_DIV_TRUNC }; @@ -2661,7 +2661,7 @@ mpz_divisible_ui_p (const mpz_t n, unsigned long d) return mpz_div_qr_ui (NULL, NULL, n, d, GMP_DIV_TRUNC) == 0; } - + /* GCD */ static mp_limb_t mpn_gcd_11 (mp_limb_t u, mp_limb_t v) @@ -3054,7 +3054,7 @@ mpz_invert (mpz_t r, const mpz_t u, const mpz_t m) return invertible; } - + /* Higher level operations (sqrt, pow and root) */ void @@ -3334,7 +3334,7 @@ mpn_sqrtrem (mp_ptr sp, mp_ptr rp, mp_srcptr p, mp_size_t n) mpz_clear (r); return res; } - + /* Combinatorics */ void @@ -3378,7 +3378,7 @@ mpz_bin_uiui (mpz_t r, unsigned long n, unsigned long k) mpz_clear (t); } - + /* Primality testing */ /* Computes Kronecker (a/b) with odd b, a!=0 and GCD(a,b) = 1 */ @@ -3646,7 +3646,7 @@ mpz_probab_prime_p (const mpz_t n, int reps) return is_prime; } - + /* Logical operations and bit manipulation. */ /* Numbers are treated as if represented in two's complement (and @@ -4183,7 +4183,7 @@ mpz_scan0 (const mpz_t u, mp_bitcnt_t starting_bit) return mpn_common_scan (limb, i, up, un, ux); } - + /* MPZ base conversion. */ size_t @@ -4443,7 +4443,7 @@ mpz_out_str (FILE *stream, int base, const mpz_t x) return n; } - + static int gmp_detect_endian (void) { diff --git a/lib/lua/CMakeLists.txt b/lib/lua/CMakeLists.txt index 2de4840cb..869a3c320 100644 --- a/lib/lua/CMakeLists.txt +++ b/lib/lua/CMakeLists.txt @@ -22,6 +22,10 @@ else() set(DEFAULT_ANSI TRUE) endif() +if(MSVC) + set(COMMON_CFLAGS "${COMMON_CFLAGS} -D_CRT_SECURE_NO_WARNINGS") +endif() + if(CMAKE_SYSTEM_NAME STREQUAL "Linux") set(COMMON_LDFLAGS "${COMMON_LDFLAGS} -Wl,-E -lm") set(DEFAULT_DLOPEN ON) diff --git a/lib/lua/README.md b/lib/lua/README.md new file mode 100644 index 000000000..b82e4a652 --- /dev/null +++ b/lib/lua/README.md @@ -0,0 +1,6 @@ +## Lua 5.1.5 source + +This copy has been patched with Minetest-specific changes (`lua_atccall`) +so it is *not* interchangeable with upstream PUC Lua. + +A patch for CVE-2014-5461 has been applied. diff --git a/lib/lua/src/lbaselib.c b/lib/lua/src/lbaselib.c index 2ab550bd4..ed293ebdc 100644 --- a/lib/lua/src/lbaselib.c +++ b/lib/lua/src/lbaselib.c @@ -340,13 +340,14 @@ static int luaB_assert (lua_State *L) { static int luaB_unpack (lua_State *L) { - int i, e, n; + int i, e; + unsigned int n; luaL_checktype(L, 1, LUA_TTABLE); i = luaL_optint(L, 2, 1); e = luaL_opt(L, luaL_checkint, 3, luaL_getn(L, 1)); if (i > e) return 0; /* empty range */ - n = e - i + 1; /* number of elements */ - if (n <= 0 || !lua_checkstack(L, n)) /* n <= 0 means arith. overflow */ + n = (unsigned int)e - (unsigned int)i; /* number of elements minus 1 */ + if (n > (INT_MAX - 10) || !lua_checkstack(L, ++n)) return luaL_error(L, "too many results to unpack"); lua_rawgeti(L, 1, i); /* push arg[i] (avoiding overflow problems) */ while (i++ < e) /* push arg[i + 1...e] */ diff --git a/lib/lua/src/ldblib.c b/lib/lua/src/ldblib.c index 628a6c458..2c55edcda 100644 --- a/lib/lua/src/ldblib.c +++ b/lib/lua/src/ldblib.c @@ -101,6 +101,7 @@ static int db_getinfo (lua_State *L) { int arg; lua_State *L1 = getthread(L, &arg); const char *options = luaL_optstring(L, arg+2, "flnSu"); + luaL_argcheck(L, options[0] != '>', arg + 2, "invalid option '>'"); if (lua_isnumber(L, arg+1)) { if (!lua_getstack(L1, (int)lua_tointeger(L, arg+1), &ar)) { lua_pushnil(L); /* level out of range */ diff --git a/lib/lua/src/ldo.c b/lib/lua/src/ldo.c index 7eeea636c..37a7660fd 100644 --- a/lib/lua/src/ldo.c +++ b/lib/lua/src/ldo.c @@ -274,7 +274,7 @@ int luaD_precall (lua_State *L, StkId func, int nresults) { CallInfo *ci; StkId st, base; Proto *p = cl->p; - luaD_checkstack(L, p->maxstacksize); + luaD_checkstack(L, p->maxstacksize + p->numparams); func = restorestack(L, funcr); if (!p->is_vararg) { /* no varargs? */ base = func + 1; diff --git a/lib/lua/src/llex.c b/lib/lua/src/llex.c index d1b179670..5affe7c16 100644 --- a/lib/lua/src/llex.c +++ b/lib/lua/src/llex.c @@ -133,7 +133,7 @@ static void inclinenumber (LexState *ls) { if (currIsNewline(ls) && ls->current != old) next(ls); /* skip `\n\r' or `\r\n' */ if (++ls->linenumber >= MAX_INT) - luaX_syntaxerror(ls, "chunk has too many lines"); + luaX_lexerror(ls, "chunk has too many lines", 0); } diff --git a/lib/lua/src/lvm.c b/lib/lua/src/lvm.c index a438d7805..60a715a6d 100644 --- a/lib/lua/src/lvm.c +++ b/lib/lua/src/lvm.c @@ -209,14 +209,15 @@ static int l_strcmp (const TString *ls, const TString *rs) { int temp = strcoll(l, r); if (temp != 0) return temp; else { /* strings are equal up to a `\0' */ - size_t len = strlen(l); /* index of first `\0' in both strings */ - if (len == lr) /* r is finished? */ - return (len == ll) ? 0 : 1; - else if (len == ll) /* l is finished? */ - return -1; /* l is smaller than r (because r is not finished) */ - /* both strings longer than `len'; go on comparing (after the `\0') */ - len++; - l += len; ll -= len; r += len; lr -= len; + size_t zl1 = strlen(l); /* index of first '\0' in 'l' */ + size_t zl2 = strlen(r); /* index of first '\0' in 'r' */ + if (zl2 == lr) /* 'r' is finished? */ + return (zl1 == ll) ? 0 : 1; /* check 'l' */ + else if (zl1 == ll) /* 'l' is finished? */ + return -1; /* 'l' is less than 'r' ('r' is not finished) */ + /* both strings longer than 'zl'; go on comparing after the '\0' */ + zl1++; zl2++; + l += zl1; ll -= zl1; r += zl2; lr -= zl2; } } } diff --git a/lib/tiniergltf/.gitignore b/lib/tiniergltf/.gitignore new file mode 100644 index 000000000..6d105f52b --- /dev/null +++ b/lib/tiniergltf/.gitignore @@ -0,0 +1,6 @@ +cmake +CMakeCache.txt +CMakeFiles +.cache +compile_commands.json +build \ No newline at end of file diff --git a/lib/tiniergltf/CMakeLists.txt b/lib/tiniergltf/CMakeLists.txt new file mode 100644 index 000000000..889203e49 --- /dev/null +++ b/lib/tiniergltf/CMakeLists.txt @@ -0,0 +1,22 @@ +cmake_minimum_required(VERSION 3.12) + +project(tiniergltf + VERSION 1.0.0 + LANGUAGES CXX +) + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +add_library(tiniergltf OBJECT tiniergltf.hpp) +add_library(tiniergltf::tiniergltf ALIAS tiniergltf) +set_target_properties(tiniergltf PROPERTIES LINKER_LANGUAGE CXX) + +target_include_directories(tiniergltf + INTERFACE + "$" + "${JSON_INCLUDE_DIR}" # Set in FindJson.cmake + "${CMAKE_SOURCE_DIR}/src" # util/base64.h +) + +target_link_libraries(tiniergltf) diff --git a/lib/tiniergltf/Readme.md b/lib/tiniergltf/Readme.md new file mode 100644 index 000000000..a8cc65c93 --- /dev/null +++ b/lib/tiniergltf/Readme.md @@ -0,0 +1,39 @@ +# TinierGLTF + +A safe, modern, tiny glTF loader for C++ 17. + +What this is: + +* A tiny glTF deserializer which maps JSON objects to appropriate C++ structures. +* Intended to be safe for loading untrusted input. +* Slightly tailored to the needs of [Minetest](https://github.com/minetest/minetest). + +What this doesn't and shouldn't do: + +* Serialization +* Loading images +* Resolving resources +* Support glTF extensions + +## TODOs + +- [ ] Add GLB support. +- [ ] Add further checks according to the specification. + - Everything in the JSON schema (+ indices and misc. stuff) is already validated. + Much of the code was generated by a Lua script from the JSON schemata. + +## License + +`tiniergltf.hpp` was written by Lars Müller and is licensed under the MIT license: + +> Copyright 2024 Lars Müller +> +> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +## Bug Bounty + +I offer a reward of one (1) virtual headpat per valid bug report. diff --git a/lib/tiniergltf/tiniergltf.hpp b/lib/tiniergltf/tiniergltf.hpp new file mode 100644 index 000000000..6a861556e --- /dev/null +++ b/lib/tiniergltf/tiniergltf.hpp @@ -0,0 +1,1357 @@ +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "util/base64.h" + +namespace tiniergltf { + +static inline void check(bool cond) { + if (!cond) + throw std::runtime_error("invalid glTF"); +} + +template +static inline void checkIndex(const std::optional> &vec, + const std::optional &i) { + if (!i.has_value()) return; + check(vec.has_value()); + check(i < vec->size()); +} + +template +static inline void checkIndex(const std::vector &vec, + const std::optional &i) { + if (!i.has_value()) return; + check(i < vec.size()); +} + +template +static inline void checkForall(const std::optional> &vec, const F &cond) { + if (!vec.has_value()) + return; + for (const T &v : vec.value()) + cond(v); +} + +template +static inline void checkDuplicateFree(const std::vector &vec) { + check(std::unordered_set(vec.begin(), vec.end()).size() == vec.size()); +} + +template +static inline T as(const Json::Value &o); + +template<> +bool as(const Json::Value &o) { + check(o.isBool()); + return o.asBool(); +} + +template<> +double as (const Json::Value &o) { + check(o.isDouble()); + return o.asDouble(); +} + +template<> +std::size_t as(const Json::Value &o) { + check(o.isUInt64()); + auto u = o.asUInt64(); + check(u <= std::numeric_limits::max()); + return u; +} + +template<> +std::string as(const Json::Value &o) { + check(o.isString()); + return o.asString(); +} + +template +std::vector asVec(const Json::Value &o) { + check(o.isArray()); + std::vector res; + res.reserve(o.size()); + for (Json::ArrayIndex i = 0; i < o.size(); ++i) { + res.push_back(as(o[i])); + } + return res; +} + +template +std::array asArr(const Json::Value &o) { + check(o.isArray()); + check(o.size() == n); + std::array res; + for (Json::ArrayIndex i = 0; i < n; ++i) { + res[i] = as(o[i]); + } + return res; +} + +struct AccessorSparseIndices { + std::size_t bufferView; + std::size_t byteOffset; + // as defined in the glTF specification + enum class ComponentType { + UNSIGNED_BYTE, + UNSIGNED_SHORT, + UNSIGNED_INT, + }; + ComponentType componentType; + std::size_t componentSize() const { + switch (componentType) { + case ComponentType::UNSIGNED_BYTE: + return 1; + case ComponentType::UNSIGNED_SHORT: + return 2; + case ComponentType::UNSIGNED_INT: + return 4; + } + throw std::logic_error("invalid component type"); + } + std::size_t elementSize() const { + return componentSize(); + } + AccessorSparseIndices(const Json::Value &o) + : bufferView(as(o["bufferView"])) + , byteOffset(0) + { + check(o.isObject()); + if (o.isMember("byteOffset")) { + byteOffset = as(o["byteOffset"]); + check(byteOffset >= 0); + } + { + static std::unordered_map map = { + {5121, ComponentType::UNSIGNED_BYTE}, + {5123, ComponentType::UNSIGNED_SHORT}, + {5125, ComponentType::UNSIGNED_INT}, + }; + const auto &v = o["componentType"]; check(v.isUInt64()); + componentType = map.at(v.asUInt64()); + } + } +}; +template<> AccessorSparseIndices as(const Json::Value &o) { return o; } + +struct AccessorSparseValues { + std::size_t bufferView; + std::size_t byteOffset; + AccessorSparseValues(const Json::Value &o) + : bufferView(as(o["bufferView"])) + , byteOffset(0) + { + check(o.isObject()); + if (o.isMember("byteOffset")) { + byteOffset = as(o["byteOffset"]); + check(byteOffset >= 0); + } + } +}; +template<> AccessorSparseValues as(const Json::Value &o) { return o; } + +struct AccessorSparse { + std::size_t count; + AccessorSparseIndices indices; + AccessorSparseValues values; + AccessorSparse(const Json::Value &o) + : count(as(o["count"])) + , indices(as(o["indices"])) + , values(as(o["values"])) + { + check(o.isObject()); + check(count >= 1); + } +}; +template<> AccessorSparse as(const Json::Value &o) { return o; } + +struct Accessor { + std::optional bufferView; + std::size_t byteOffset; + // as defined in the glTF specification + enum class ComponentType { + BYTE, + UNSIGNED_BYTE, + SHORT, + UNSIGNED_SHORT, + UNSIGNED_INT, + FLOAT, + }; + ComponentType componentType; + std::size_t componentSize() const { + switch (componentType) { + case ComponentType::BYTE: + case ComponentType::UNSIGNED_BYTE: + return 1; + case ComponentType::SHORT: + case ComponentType::UNSIGNED_SHORT: + return 2; + case ComponentType::UNSIGNED_INT: + case ComponentType::FLOAT: + return 4; + } + throw std::logic_error("invalid component type"); + } + std::size_t count; + std::optional> max; + std::optional> min; + std::optional name; + bool normalized; + std::optional sparse; + enum class Type { + MAT2, + MAT3, + MAT4, + SCALAR, + VEC2, + VEC3, + VEC4, + }; + std::size_t typeCount() const { + switch (type) { + case Type::SCALAR: + return 1; + case Type::VEC2: + return 2; + case Type::VEC3: + return 3; + case Type::MAT2: + case Type::VEC4: + return 4; + case Type::MAT3: + return 9; + case Type::MAT4: + return 16; + } + throw std::logic_error("invalid type"); + } + Type type; + std::size_t elementSize() const { + return componentSize() * typeCount(); + } + Accessor(const Json::Value &o) + : byteOffset(0) + , count(as(o["count"])) + , normalized(false) + { + check(o.isObject()); + if (o.isMember("bufferView")) { + bufferView = as(o["bufferView"]); + } + { + static std::unordered_map map = { + {5120, ComponentType::BYTE}, + {5121, ComponentType::UNSIGNED_BYTE}, + {5122, ComponentType::SHORT}, + {5123, ComponentType::UNSIGNED_SHORT}, + {5125, ComponentType::UNSIGNED_INT}, + {5126, ComponentType::FLOAT}, + }; + const auto &v = o["componentType"]; check(v.isUInt64()); + componentType = map.at(v.asUInt64()); + } + if (o.isMember("byteOffset")) { + byteOffset = as(o["byteOffset"]); + check(byteOffset >= 0); + check(byteOffset % componentSize() == 0); + } + check(count >= 1); + if (o.isMember("name")) { + name = as(o["name"]); + } + if (o.isMember("normalized")) { + normalized = as(o["normalized"]); + } + if (o.isMember("sparse")) { + sparse = as(o["sparse"]); + } + { + static std::unordered_map map = { + {"MAT2", Type::MAT2}, + {"MAT3", Type::MAT3}, + {"MAT4", Type::MAT4}, + {"SCALAR", Type::SCALAR}, + {"VEC2", Type::VEC2}, + {"VEC3", Type::VEC3}, + {"VEC4", Type::VEC4}, + }; + const auto &v = o["type"]; check(v.isString()); + type = map.at(v.asString()); + } + if (o.isMember("max")) { + max = asVec(o["max"]); + check(max->size() == typeCount()); + } + if (o.isMember("min")) { + min = asVec(o["min"]); + check(min->size() == typeCount()); + } + } +}; +template<> Accessor as(const Json::Value &o) { return o; } + +struct AnimationChannelTarget { + std::optional node; + enum class Path { + ROTATION, + SCALE, + TRANSLATION, + WEIGHTS, + }; + Path path; + AnimationChannelTarget(const Json::Value &o) + { + check(o.isObject()); + if (o.isMember("node")) { + node = as(o["node"]); + } + { + static std::unordered_map map = { + {"rotation", Path::ROTATION}, + {"scale", Path::SCALE}, + {"translation", Path::TRANSLATION}, + {"weights", Path::WEIGHTS}, + }; + const auto &v = o["path"]; check(v.isString()); + path = map.at(v.asString()); + } + } +}; +template<> AnimationChannelTarget as(const Json::Value &o) { return o; } + +struct AnimationChannel { + std::size_t sampler; + AnimationChannelTarget target; + AnimationChannel(const Json::Value &o) + : sampler(as(o["sampler"])) + , target(as(o["target"])) + { + check(o.isObject()); + } +}; +template<> AnimationChannel as(const Json::Value &o) { return o; } + +struct AnimationSampler { + std::size_t input; + enum class Interpolation { + CUBICSPLINE, + LINEAR, + STEP, + }; + Interpolation interpolation; + std::size_t output; + AnimationSampler(const Json::Value &o) + : input(as(o["input"])) + , interpolation(Interpolation::LINEAR) + , output(as(o["output"])) + { + check(o.isObject()); + if (o.isMember("interpolation")) { + static std::unordered_map map = { + {"CUBICSPLINE", Interpolation::CUBICSPLINE}, + {"LINEAR", Interpolation::LINEAR}, + {"STEP", Interpolation::STEP}, + }; + const auto &v = o["interpolation"]; check(v.isString()); + interpolation = map.at(v.asString()); + } + } +}; +template<> AnimationSampler as(const Json::Value &o) { return o; } + +struct Animation { + std::vector channels; + std::optional name; + std::vector samplers; + Animation(const Json::Value &o) + : channels(asVec(o["channels"])) + , samplers(asVec(o["samplers"])) + { + check(o.isObject()); + check(channels.size() >= 1); + if (o.isMember("name")) { + name = as(o["name"]); + } + check(samplers.size() >= 1); + } +}; +template<> Animation as(const Json::Value &o) { return o; } + +struct Asset { + std::optional copyright; + std::optional generator; + std::optional minVersion; + std::string version; + Asset(const Json::Value &o) + : version(as(o["version"])) + { + check(o.isObject()); + if (o.isMember("copyright")) { + copyright = as(o["copyright"]); + } + if (o.isMember("generator")) { + generator = as(o["generator"]); + } + if (o.isMember("minVersion")) { + minVersion = as(o["minVersion"]); + } + } +}; +template<> Asset as(const Json::Value &o) { return o; } + +struct BufferView { + std::size_t buffer; + std::size_t byteLength; + std::size_t byteOffset; + std::optional byteStride; + std::optional name; + enum class Target { + ARRAY_BUFFER, + ELEMENT_ARRAY_BUFFER, + }; + std::optional target; + BufferView(const Json::Value &o) + : buffer(as(o["buffer"])) + , byteLength(as(o["byteLength"])) + , byteOffset(0) + { + check(o.isObject()); + check(byteLength >= 1); + if (o.isMember("byteOffset")) { + byteOffset = as(o["byteOffset"]); + check(byteOffset >= 0); + } + if (o.isMember("byteStride")) { + byteStride = as(o["byteStride"]); + check(byteStride.value() >= 4); + check(byteStride.value() <= 252); + check(byteStride.value() % 4 == 0); + } + if (o.isMember("name")) { + name = as(o["name"]); + } + if (o.isMember("target")) { + static std::unordered_map map = { + {34962, Target::ARRAY_BUFFER}, + {34963, Target::ELEMENT_ARRAY_BUFFER}, + }; + const auto &v = o["target"]; check(v.isUInt64()); + target = map.at(v.asUInt64()); + } + } +}; +template<> BufferView as(const Json::Value &o) { return o; } + +struct Buffer { + std::size_t byteLength; + std::optional name; + std::string data; + Buffer(const Json::Value &o, + const std::function &resolveURI) + : byteLength(as(o["byteLength"])) + { + check(o.isObject()); + check(byteLength >= 1); + if (o.isMember("name")) { + name = as(o["name"]); + } + check(o.isMember("uri")); + bool dataURI = false; + const std::string uri = as(o["uri"]); + for (auto &prefix : std::array { + "data:application/octet-stream;base64,", + "data:application/gltf-buffer;base64," + }) { + if (std::string_view(uri).substr(0, prefix.length()) == prefix) { + auto view = std::string_view(uri).substr(prefix.length()); + check(base64_is_valid(view)); + data = base64_decode(view); + dataURI = true; + break; + } + } + if (!dataURI) + data = resolveURI(uri); + check(data.size() >= byteLength); + data.resize(byteLength); + } +}; + +struct CameraOrthographic { + double xmag; + double ymag; + double zfar; + double znear; + CameraOrthographic(const Json::Value &o) + : xmag(as(o["xmag"])) + , ymag(as(o["ymag"])) + , zfar(as(o["zfar"])) + , znear(as(o["znear"])) + { + check(o.isObject()); + check(zfar > 0); + check(znear >= 0); + } +}; +template<> CameraOrthographic as(const Json::Value &o) { return o; } + +struct CameraPerspective { + std::optional aspectRatio; + double yfov; + std::optional zfar; + double znear; + CameraPerspective(const Json::Value &o) + : yfov(as(o["yfov"])) + , znear(as(o["znear"])) + { + check(o.isObject()); + if (o.isMember("aspectRatio")) { + aspectRatio = as(o["aspectRatio"]); + check(aspectRatio.value() > 0); + } + check(yfov > 0); + if (o.isMember("zfar")) { + zfar = as(o["zfar"]); + check(zfar.value() > 0); + } + check(znear > 0); + } +}; +template<> CameraPerspective as(const Json::Value &o) { return o; } + +struct Camera { + std::optional name; + std::optional orthographic; + std::optional perspective; + enum class Type { + ORTHOGRAPHIC, + PERSPECTIVE, + }; + Type type; + Camera(const Json::Value &o) + { + check(o.isObject()); + if (o.isMember("name")) { + name = as(o["name"]); + } + if (o.isMember("orthographic")) { + orthographic = as(o["orthographic"]); + } + if (o.isMember("perspective")) { + perspective = as(o["perspective"]); + } + { + static std::unordered_map map = { + {"orthographic", Type::ORTHOGRAPHIC}, + {"perspective", Type::PERSPECTIVE}, + }; + const auto &v = o["type"]; check(v.isString()); + type = map.at(v.asString()); + } + } +}; +template<> Camera as(const Json::Value &o) { return o; } + +struct Image { + std::optional bufferView; + enum class MimeType { + IMAGE_JPEG, + IMAGE_PNG, + }; + std::optional mimeType; + std::optional name; + std::optional uri; + Image(const Json::Value &o) + { + check(o.isObject()); + if (o.isMember("bufferView")) { + bufferView = as(o["bufferView"]); + } + if (o.isMember("mimeType")) { + static std::unordered_map map = { + {"image/jpeg", MimeType::IMAGE_JPEG}, + {"image/png", MimeType::IMAGE_PNG}, + }; + const auto &v = o["mimeType"]; check(v.isString()); + mimeType = map.at(v.asString()); + } + if (o.isMember("name")) { + name = as(o["name"]); + } + if (o.isMember("uri")) { + uri = as(o["uri"]); + } + } +}; +template<> Image as(const Json::Value &o) { return o; } + +struct TextureInfo { + std::size_t index; + std::size_t texCoord; + TextureInfo(const Json::Value &o) + : index(as(o["index"])) + , texCoord(0) + { + check(o.isObject()); + if (o.isMember("texCoord")) { + texCoord = as(o["texCoord"]); + check(texCoord >= 0); + } + } +}; +template<> TextureInfo as(const Json::Value &o) { return o; } + +struct MaterialNormalTextureInfo { + std::size_t index; + double scale; + std::size_t texCoord; + MaterialNormalTextureInfo(const Json::Value &o) + : index(as(o["index"])) + , scale(1) + , texCoord(0) + { + check(o.isObject()); + if (o.isMember("scale")) { + scale = as(o["scale"]); + } + if (o.isMember("texCoord")) { + texCoord = as(o["texCoord"]); + } + } +}; +template<> MaterialNormalTextureInfo as(const Json::Value &o) { return o; } + +struct MaterialOcclusionTextureInfo { + std::size_t index; + double strength; + std::size_t texCoord; + MaterialOcclusionTextureInfo(const Json::Value &o) + : index(as(o["index"])) + , strength(1) + , texCoord(0) + { + check(o.isObject()); + if (o.isMember("strength")) { + strength = as(o["strength"]); + check(strength >= 0); + check(strength <= 1); + } + if (o.isMember("texCoord")) { + texCoord = as(o["texCoord"]); + } + } +}; +template<> MaterialOcclusionTextureInfo as(const Json::Value &o) { return o; } + +struct MaterialPbrMetallicRoughness { + std::array baseColorFactor; + std::optional baseColorTexture; + double metallicFactor; + std::optional metallicRoughnessTexture; + double roughnessFactor; + MaterialPbrMetallicRoughness(const Json::Value &o) + : baseColorFactor{1, 1, 1, 1} + , metallicFactor(1) + , roughnessFactor(1) + { + check(o.isObject()); + if (o.isMember("baseColorFactor")) { + baseColorFactor = asArr(o["baseColorFactor"]); + for (auto v: baseColorFactor) { + check(v >= 0); + check(v <= 1); + } + } + if (o.isMember("baseColorTexture")) { + baseColorTexture = as(o["baseColorTexture"]); + } + if (o.isMember("metallicFactor")) { + metallicFactor = as(o["metallicFactor"]); + check(metallicFactor >= 0); + check(metallicFactor <= 1); + } + if (o.isMember("metallicRoughnessTexture")) { + metallicRoughnessTexture = as(o["metallicRoughnessTexture"]); + } + if (o.isMember("roughnessFactor")) { + roughnessFactor = as(o["roughnessFactor"]); + check(roughnessFactor >= 0); + check(roughnessFactor <= 1); + } + } +}; +template<> MaterialPbrMetallicRoughness as(const Json::Value &o) { return o; } + +struct Material { + double alphaCutoff; + enum class AlphaMode { + BLEND, + MASK, + OPAQUE, + }; + AlphaMode alphaMode; + bool doubleSided; + std::array emissiveFactor; + std::optional emissiveTexture; + std::optional name; + std::optional normalTexture; + std::optional occlusionTexture; + std::optional pbrMetallicRoughness; + Material(const Json::Value &o) + : alphaCutoff(0.5) + , alphaMode(AlphaMode::OPAQUE) + , doubleSided(false) + , emissiveFactor{0, 0, 0} + { + check(o.isObject()); + if (o.isMember("alphaCutoff")) { + alphaCutoff = as(o["alphaCutoff"]); + check(alphaCutoff >= 0); + } + if (o.isMember("alphaMode")){ + static std::unordered_map map = { + {"BLEND", AlphaMode::BLEND}, + {"MASK", AlphaMode::MASK}, + {"OPAQUE", AlphaMode::OPAQUE}, + }; + const auto &v = o["alphaMode"]; check(v.isString()); + alphaMode = map.at(v.asString()); + } + if (o.isMember("doubleSided")) { + doubleSided = as(o["doubleSided"]); + } + if (o.isMember("emissiveFactor")) { + emissiveFactor = asArr(o["emissiveFactor"]); + for (const auto &v: emissiveFactor) { + check(v >= 0); + check(v <= 1); + } + } + if (o.isMember("emissiveTexture")) { + emissiveTexture = as(o["emissiveTexture"]); + } + if (o.isMember("name")) { + name = as(o["name"]); + } + if (o.isMember("normalTexture")) { + normalTexture = as(o["normalTexture"]); + } + if (o.isMember("occlusionTexture")) { + occlusionTexture = as(o["occlusionTexture"]); + } + if (o.isMember("pbrMetallicRoughness")) { + pbrMetallicRoughness = as(o["pbrMetallicRoughness"]); + } + } +}; +template<> Material as(const Json::Value &o) { return o; } + +struct MeshPrimitive { + static void enumeratedProps(const Json::Value &o, const std::string &name, std::optional> &attr) { + for (std::size_t i = 0;; ++i) { + const std::string s = name + "_" + std::to_string(i); + if (!o.isMember(s)) break; + if (i == 0) { + attr = std::vector(); + } + attr->push_back(as(o[s])); + } + } + struct Attributes { + std::optional position, normal, tangent; + std::optional> texcoord, color, joints, weights; + Attributes(const Json::Value &o) { + if (o.isMember("POSITION")) + position = as(o["POSITION"]); + if (o.isMember("NORMAL")) + normal = as(o["NORMAL"]); + if (o.isMember("TANGENT")) + tangent = as(o["TANGENT"]); + enumeratedProps(o, "TEXCOORD", texcoord); + enumeratedProps(o, "COLOR", color); + enumeratedProps(o, "JOINTS", joints); + enumeratedProps(o, "WEIGHTS", weights); + check(joints.has_value() == weights.has_value()); + if (joints.has_value()) { + check(joints->size() == weights->size()); + } + check(position.has_value() + || normal.has_value() + || tangent.has_value() + || texcoord.has_value() + || color.has_value() + || joints.has_value() + || weights.has_value()); + } + }; + Attributes attributes; + std::optional indices; + std::optional material; + enum class Mode { + POINTS, + LINES, + LINE_LOOP, + LINE_STRIP, + TRIANGLES, + TRIANGLE_STRIP, + TRIANGLE_FAN, + }; + Mode mode; + struct MorphTargets { + std::optional position, normal, tangent; + std::optional> texcoord, color; + MorphTargets(const Json::Value &o) { + if (o.isMember("POSITION")) + position = as(o["POSITION"]); + if (o.isMember("NORMAL")) + normal = as(o["NORMAL"]); + if (o.isMember("TANGENT")) + tangent = as(o["TANGENT"]); + enumeratedProps(o, "TEXCOORD", texcoord); + enumeratedProps(o, "COLOR", color); + check(position.has_value() + || normal.has_value() + || tangent.has_value() + || texcoord.has_value() + || color.has_value()); + } + }; + std::optional> targets; + MeshPrimitive(const Json::Value &o) + : attributes(Attributes(o["attributes"])) + , mode(Mode::TRIANGLES) + { + check(o.isObject()); + if (o.isMember("indices")) { + indices = as(o["indices"]); + } + if (o.isMember("material")) { + material = as(o["material"]); + } + if (o.isMember("mode")) { + static std::unordered_map map = { + {0, Mode::POINTS}, + {1, Mode::LINES}, + {2, Mode::LINE_LOOP}, + {3, Mode::LINE_STRIP}, + {4, Mode::TRIANGLES}, + {5, Mode::TRIANGLE_STRIP}, + {6, Mode::TRIANGLE_FAN}, + }; + const auto &v = o["mode"]; check(v.isUInt64()); + mode = map.at(v.asUInt64()); + } + if (o.isMember("targets")) { + targets = asVec(o["targets"]); + check(targets->size() >= 1); + } + } +}; +template<> MeshPrimitive::MorphTargets as(const Json::Value &o) { return o; } +template<> MeshPrimitive as(const Json::Value &o) { return o; } + +struct Mesh { + std::optional name; + std::vector primitives; + std::optional> weights; + Mesh(const Json::Value &o) + : primitives(asVec(o["primitives"])) + { + check(o.isObject()); + if (o.isMember("name")) { + name = as(o["name"]); + } + check(primitives.size() >= 1); + if (o.isMember("weights")) { + weights = asVec(o["weights"]); + check(weights->size() >= 1); + } + } +}; +template<> Mesh as(const Json::Value &o) { return o; } + +struct Node { + std::optional camera; + std::optional> children; + typedef std::array Matrix; + struct TRS { + std::array translation = {0, 0, 0}; + std::array rotation = {0, 0, 0, 1}; + std::array scale = {1, 1, 1}; + }; + std::variant transform; + std::optional mesh; + std::optional name; + std::optional skin; + std::optional> weights; + Node(const Json::Value &o) + : transform(Matrix { + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1 + }) + { + check(o.isObject()); + if (o.isMember("camera")) { + camera = as(o["camera"]); + } + if (o.isMember("children")) { + children = asVec(o["children"]); + check(children->size() >= 1); + checkDuplicateFree(*children); + } + bool hasTRS = o.isMember("translation") || o.isMember("rotation") || o.isMember("scale"); + if (o.isMember("matrix")) { + check(!hasTRS); + transform = asArr(o["matrix"]); + } else if (hasTRS) { + TRS trs; + if (o.isMember("translation")) { + trs.translation = asArr(o["translation"]); + } + if (o.isMember("rotation")) { + trs.rotation = asArr(o["rotation"]); + for (auto v: trs.rotation) { + check(v >= -1); + check(v <= 1); + } + } + if (o.isMember("scale")) { + trs.scale = asArr(o["scale"]); + } + transform = trs; + } + if (o.isMember("mesh")) { + mesh = as(o["mesh"]); + } + if (o.isMember("name")) { + name = as(o["name"]); + } + if (o.isMember("skin")) { + check(mesh.has_value()); + skin = as(o["skin"]); + } + if (o.isMember("weights")) { + weights = asVec(o["weights"]); + check(weights->size() >= 1); + } + } +}; +template<> Node as(const Json::Value &o) { return o; } + +struct Sampler { + enum class MagFilter { + NEAREST, + LINEAR, + }; + std::optional magFilter; + enum class MinFilter { + NEAREST, + LINEAR, + NEAREST_MIPMAP_NEAREST, + LINEAR_MIPMAP_NEAREST, + NEAREST_MIPMAP_LINEAR, + LINEAR_MIPMAP_LINEAR, + }; + std::optional minFilter; + std::optional name; + enum class WrapS { + REPEAT, + CLAMP_TO_EDGE, + MIRRORED_REPEAT, + }; + WrapS wrapS; + enum class WrapT { + REPEAT, + CLAMP_TO_EDGE, + MIRRORED_REPEAT, + }; + WrapT wrapT; + Sampler(const Json::Value &o) + : wrapS(WrapS::REPEAT) + , wrapT(WrapT::REPEAT) + { + check(o.isObject()); + if (o.isMember("magFilter")) { + static std::unordered_map map = { + {9728, MagFilter::NEAREST}, + {9729, MagFilter::LINEAR}, + }; + const auto &v = o["magFilter"]; check(v.isUInt64()); + magFilter = map.at(v.asUInt64()); + } + if (o.isMember("minFilter")) { + static std::unordered_map map = { + {9728, MinFilter::NEAREST}, + {9729, MinFilter::LINEAR}, + {9984, MinFilter::NEAREST_MIPMAP_NEAREST}, + {9985, MinFilter::LINEAR_MIPMAP_NEAREST}, + {9986, MinFilter::NEAREST_MIPMAP_LINEAR}, + {9987, MinFilter::LINEAR_MIPMAP_LINEAR}, + }; + const auto &v = o["minFilter"]; check(v.isUInt64()); + minFilter = map.at(v.asUInt64()); + } + if (o.isMember("name")) { + name = as(o["name"]); + } + if (o.isMember("wrapS")) { + static std::unordered_map map = { + {10497, WrapS::REPEAT}, + {33071, WrapS::CLAMP_TO_EDGE}, + {33648, WrapS::MIRRORED_REPEAT}, + }; + const auto &v = o["wrapS"]; check(v.isUInt64()); + wrapS = map.at(v.asUInt64()); + } + if (o.isMember("wrapT")) { + static std::unordered_map map = { + {10497, WrapT::REPEAT}, + {33071, WrapT::CLAMP_TO_EDGE}, + {33648, WrapT::MIRRORED_REPEAT}, + }; + const auto &v = o["wrapT"]; check(v.isUInt64()); + wrapT = map.at(v.asUInt64()); + } + } +}; +template<> Sampler as(const Json::Value &o) { return o; } + +struct Scene { + std::optional name; + std::optional> nodes; + Scene(const Json::Value &o) + { + check(o.isObject()); + if (o.isMember("name")) { + name = as(o["name"]); + } + if (o.isMember("nodes")) { + nodes = asVec(o["nodes"]); + check(nodes->size() >= 1); + checkDuplicateFree(*nodes); + } + } +}; +template<> Scene as(const Json::Value &o) { return o; } + +struct Skin { + std::optional inverseBindMatrices; + std::vector joints; + std::optional name; + std::optional skeleton; + Skin(const Json::Value &o) + : joints(asVec(o["joints"])) + { + check(o.isObject()); + if (o.isMember("inverseBindMatrices")) { + inverseBindMatrices = as(o["inverseBindMatrices"]); + } + check(joints.size() >= 1); + checkDuplicateFree(joints); + if (o.isMember("name")) { + name = as(o["name"]); + } + if (o.isMember("skeleton")) { + skeleton = as(o["skeleton"]); + } + } +}; +template<> Skin as(const Json::Value &o) { return o; } + +struct Texture { + std::optional name; + std::optional sampler; + std::optional source; + Texture(const Json::Value &o) + { + check(o.isObject()); + if (o.isMember("name")) { + name = as(o["name"]); + } + if (o.isMember("sampler")) { + sampler = as(o["sampler"]); + } + if (o.isMember("source")) { + source = as(o["source"]); + } + } +}; +template<> Texture as(const Json::Value &o) { return o; } + +struct GlTF { + std::optional> accessors; + std::optional> animations; + Asset asset; + std::optional> bufferViews; + std::optional> buffers; + std::optional> cameras; + std::optional> extensionsRequired; + std::optional> extensionsUsed; + std::optional> images; + std::optional> materials; + std::optional> meshes; + std::optional> nodes; + std::optional> samplers; + std::optional scene; + std::optional> scenes; + std::optional> skins; + std::optional> textures; + static std::string uriError(const std::string &uri) { + // only base64 data URI support by default + throw std::runtime_error("unsupported URI: " + uri); + } + GlTF(const Json::Value &o, + const std::function &resolveURI = uriError) + : asset(as(o["asset"])) + { + check(o.isObject()); + if (o.isMember("accessors")) { + accessors = asVec(o["accessors"]); + check(accessors->size() >= 1); + } + if (o.isMember("animations")) { + animations = asVec(o["animations"]); + check(animations->size() >= 1); + } + if (o.isMember("bufferViews")) { + bufferViews = asVec(o["bufferViews"]); + check(bufferViews->size() >= 1); + } + if (o.isMember("buffers")) { + auto b = o["buffers"]; + check(b.isArray()); + std::vector bufs; + bufs.reserve(b.size()); + for (Json::ArrayIndex i = 0; i < b.size(); ++i) { + bufs.emplace_back(b[i], resolveURI); + } + check(bufs.size() >= 1); + buffers = std::move(bufs); + } + if (o.isMember("cameras")) { + cameras = asVec(o["cameras"]); + check(cameras->size() >= 1); + } + if (o.isMember("extensionsRequired")) { + extensionsRequired = asVec(o["extensionsRequired"]); + check(extensionsRequired->size() >= 1); + checkDuplicateFree(*extensionsRequired); + } + if (o.isMember("extensionsUsed")) { + extensionsUsed = asVec(o["extensionsUsed"]); + check(extensionsUsed->size() >= 1); + checkDuplicateFree(*extensionsUsed); + } + if (o.isMember("images")) { + images = asVec(o["images"]); + check(images->size() >= 1); + } + if (o.isMember("materials")) { + materials = asVec(o["materials"]); + check(materials->size() >= 1); + } + if (o.isMember("meshes")) { + meshes = asVec(o["meshes"]); + check(meshes->size() >= 1); + } + if (o.isMember("nodes")) { + nodes = asVec(o["nodes"]); + check(nodes->size() >= 1); + // Nodes must be a forest: + // 1. Each node should have indegree 0 or 1: + std::vector indeg(nodes->size()); + for (std::size_t i = 0; i < nodes->size(); ++i) { + auto children = nodes->at(i).children; + if (!children.has_value()) continue; + for (auto child : children.value()) { + ++indeg.at(child); + } + } + for (const auto deg : indeg) { + check(deg <= 1); + } + // 2. There should be no cycles: + std::vector visited(nodes->size()); + std::stack> toVisit; + for (std::size_t i = 0; i < nodes->size(); ++i) { + // Only start DFS in roots. + if (indeg[i] > 0) + continue; + + toVisit.push(i); + do { + std::size_t j = toVisit.top(); + check(!visited.at(j)); + visited[j] = true; + toVisit.pop(); + auto children = nodes->at(j).children; + if (!children.has_value()) + continue; + for (auto child : *children) { + toVisit.push(child); + } + } while (!toVisit.empty()); + } + } + if (o.isMember("samplers")) { + samplers = asVec(o["samplers"]); + check(samplers->size() >= 1); + } + if (o.isMember("scene")) { + scene = as(o["scene"]); + } + if (o.isMember("scenes")) { + scenes = asVec(o["scenes"]); + check(scenes->size() >= 1); + } + if (o.isMember("skins")) { + skins = asVec(o["skins"]); + check(skins->size() >= 1); + } + if (o.isMember("textures")) { + textures = asVec(o["textures"]); + check(textures->size() >= 1); + } + + // Validation + + checkForall(bufferViews, [&](const BufferView &view) { + check(buffers.has_value()); + const Buffer &buf = buffers->at(view.buffer); + // Be careful because of possible integer overflows. + check(view.byteOffset < buf.byteLength); + check(view.byteLength <= buf.byteLength); + check(view.byteOffset <= buf.byteLength - view.byteLength); + }); + + const auto checkAccessor = [&](const auto &accessor, + std::size_t bufferView, std::size_t byteOffset, std::size_t count) { + const BufferView &view = bufferViews->at(bufferView); + if (view.byteStride.has_value()) + check(*view.byteStride % accessor.componentSize() == 0); + check(byteOffset < view.byteLength); + // Use division to avoid overflows. + const auto effective_byte_stride = view.byteStride.value_or(accessor.elementSize()); + check(count <= (view.byteLength - byteOffset) / effective_byte_stride); + }; + checkForall(accessors, [&](const Accessor &accessor) { + if (accessor.bufferView.has_value()) + checkAccessor(accessor, *accessor.bufferView, accessor.byteOffset, accessor.count); + if (accessor.sparse.has_value()) { + const auto &indices = accessor.sparse->indices; + checkAccessor(indices, indices.bufferView, indices.byteOffset, accessor.sparse->count); + const auto &values = accessor.sparse->values; + checkAccessor(accessor, values.bufferView, values.byteOffset, accessor.sparse->count); + } + }); + + checkForall(images, [&](const Image &image) { + checkIndex(bufferViews, image.bufferView); + }); + + checkForall(meshes, [&](const Mesh &mesh) { + for (const auto &primitive : mesh.primitives) { + checkIndex(accessors, primitive.indices); + checkIndex(materials, primitive.material); + checkIndex(accessors, primitive.attributes.normal); + checkIndex(accessors, primitive.attributes.position); + checkIndex(accessors, primitive.attributes.tangent); + checkForall(primitive.attributes.texcoord, [&](const std::size_t &i) { + checkIndex(accessors, i); + }); + checkForall(primitive.attributes.color, [&](const std::size_t &i) { + checkIndex(accessors, i); + }); + checkForall(primitive.attributes.joints, [&](const std::size_t &i) { + checkIndex(accessors, i); + }); + checkForall(primitive.attributes.weights, [&](const std::size_t &i) { + checkIndex(accessors, i); + }); + if (primitive.material.has_value()) { + const Material &material = materials->at(primitive.material.value()); + if (material.emissiveTexture.has_value()) { + check(primitive.attributes.texcoord.has_value()); + check(material.emissiveTexture->texCoord < primitive.attributes.texcoord->size()); + } + if (material.normalTexture.has_value()) { + check(primitive.attributes.texcoord.has_value()); + check(material.normalTexture->texCoord < primitive.attributes.texcoord->size()); + } + if (material.occlusionTexture.has_value()) { + check(primitive.attributes.texcoord.has_value()); + check(material.occlusionTexture->texCoord < primitive.attributes.texcoord->size()); + } + } + checkForall(primitive.targets, [&](const MeshPrimitive::MorphTargets &target) { + checkIndex(accessors, target.normal); + checkIndex(accessors, target.position); + checkIndex(accessors, target.tangent); + checkForall(target.texcoord, [&](const std::size_t &i) { + checkIndex(accessors, i); + }); + checkForall(target.color, [&](const std::size_t &i) { + checkIndex(accessors, i); + }); + }); + } + }); + + checkForall(nodes, [&](const Node &node) { + checkIndex(cameras, node.camera); + checkIndex(meshes, node.mesh); + checkIndex(skins, node.skin); + }); + + checkForall(scenes, [&](const Scene &scene) { + checkForall(scene.nodes, [&](const size_t &i) { + checkIndex(nodes, i); + }); + }); + + checkForall(skins, [&](const Skin &skin) { + checkIndex(accessors, skin.inverseBindMatrices); + for (const std::size_t &i : skin.joints) + checkIndex(nodes, i); + checkIndex(nodes, skin.skeleton); + }); + + checkForall(textures, [&](const Texture &texture) { + checkIndex(samplers, texture.sampler); + checkIndex(images, texture.source); + }); + + checkForall(animations, [&](const Animation &animation) { + for (const auto &sampler : animation.samplers) { + checkIndex(accessors, sampler.input); + const auto &accessor = accessors->at(sampler.input); + check(accessor.type == Accessor::Type::SCALAR); + check(accessor.componentType == Accessor::ComponentType::FLOAT); + checkIndex(accessors, sampler.output); + } + for (const auto &channel : animation.channels) { + checkIndex(nodes, channel.target.node); + checkIndex(animation.samplers, channel.sampler); + } + }); + + checkIndex(scenes, scene); + } +}; + +} diff --git a/minetest.conf.example b/minetest.conf.example index 72b3d2046..efe9c19bd 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -50,6 +50,11 @@ # type: float min: 0.16 max: 2 # repeat_place_time = 0.25 +# The minimum time in seconds it takes between digging nodes when holding +# the dig button. +# type: float min: 0 max: 2 +# repeat_dig_time = 0.0 + # Automatically jump up single-node obstacles. # type: bool # autojump = false @@ -80,14 +85,22 @@ ## Touchscreen -# The length in pixels it takes for touchscreen interaction to start. -# type: int min: 0 max: 100 -# touchscreen_threshold = 20 +# Enables touchscreen mode, allowing you to play the game with a touchscreen. +# type: bool +# enable_touch = true # Touchscreen sensitivity multiplier. # type: float min: 0.001 max: 10 # touchscreen_sensitivity = 0.2 +# The length in pixels after which a touch interaction is considered movement. +# type: int min: 0 max: 100 +# touchscreen_threshold = 20 + +# The delay in milliseconds after which a touch interaction is considered a long tap. +# type: int min: 100 max: 1000 +# touch_long_tap_delay = 400 + # Use crosshair to select object instead of whole screen. # If enabled, a crosshair will be shown and will be used for selecting object. # type: bool @@ -103,6 +116,18 @@ # type: bool # virtual_joystick_triggers_aux1 = false +# The gesture for punching players/entities. +# This can be overridden by games and mods. +# +# * short_tap +# Easy to use and well-known from other games that shall not be named. +# +# * long_tap +# Known from the classic Minetest mobile controls. +# Combat is more or less impossible. +# type: enum values: short_tap, long_tap +# touch_punch_gesture = short_tap + # # Graphics and Audio # @@ -167,9 +192,9 @@ ### Graphics Effects -# Makes all liquids opaque +# Allows liquids to be translucent. # type: bool -# opaque_water = false +# translucent_liquids = true # Leaves style: # - Fancy: all faces visible @@ -348,7 +373,8 @@ # # * None - No antialiasing (default) # -# * FSAA - Hardware-provided full-screen antialiasing (incompatible with shaders) +# * FSAA - Hardware-provided full-screen antialiasing +# (incompatible with Post Processing and Undersampling) # A.K.A multi-sample antialiasing (MSAA) # Smoothens out block edges but does not affect the insides of textures. # A restart is required to change this option. @@ -389,7 +415,6 @@ # Shaders allow advanced visual effects and may increase performance on some video # cards. -# This only works with the OpenGL video backend. # type: bool # enable_shaders = true @@ -488,6 +513,10 @@ ### Post Processing +# Enables the post processing pipeline. +# type: bool +# enable_post_processing = true + # Enables Hable's 'Uncharted 2' filmic tone mapping. # Simulates the tone curve of photographic film and how this approximates the # appearance of high dynamic range images. Mid-range contrast is slightly @@ -508,6 +537,16 @@ # type: float min: -1 max: 1 # exposure_compensation = 0.0 +# Apply dithering to reduce color banding artifacts. +# Dithering significantly increases the size of losslessly-compressed +# screenshots and it works incorrectly if the display or operating system +# performs additional dithering or if the color channels are not quantized +# to 8 bits. +# With OpenGL ES, dithering only works if the shader supports high +# floating-point precision and it may have a higher performance impact. +# type: bool +# debanding = true + ### Bloom # Set to true to enable bloom effect. @@ -539,6 +578,10 @@ # 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 + ## Audio # Volume of all sounds. @@ -546,6 +589,10 @@ # type: float min: 0 max: 1 # sound_volume = 0.8 +# Volume multiplier when the window is unfocused. +# type: float min: 0 max: 1 +# sound_volume_unfocused = 0.3 + # Whether to mute sounds. You can unmute sounds at any time, unless the # sound system is disabled (enable_sound=false). # In-game, you can toggle the mute state with the mute key or by using the @@ -555,7 +602,7 @@ ## User Interfaces -# Set the language. Leave empty to use the system language. +# Set the language. By default, the system language is used. # A restart is required after changing this. # type: enum values: , be, bg, ca, cs, da, de, el, en, eo, es, et, eu, fi, fr, gd, gl, hu, id, it, ja, jbo, kk, ko, lt, lv, ms, nb, nl, nn, pl, pt, pt_BR, ro, ru, sk, sl, sr_Cyrl, sr_Latn, sv, sw, tr, uk, vi, zh_CN, zh_TW # language = @@ -660,6 +707,11 @@ # type: string # contentdb_url = https://content.minetest.net +# If enabled and you have ContentDB packages installed, Minetest may contact ContentDB to +# check for package updates when opening the mainmenu. +# type: bool +# contentdb_enable_updates_indicator = true + # Comma-separated list of flags to hide in the content repository. # "nonfree" can be used to hide packages which do not qualify as 'free software', # as defined by the Free Software Foundation. @@ -693,7 +745,8 @@ # 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 Minetest release. +# If this is empty the engine will never check for updates. # type: string # update_information_url = https://www.minetest.net/release_info.json @@ -763,8 +816,8 @@ # Define the oldest clients allowed to connect. # 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 more fine-grained control than strict_protocol_version_checking. -# Minetest may still enforce its own internal minimum, and enabling +# This allows for more fine-grained control than strict_protocol_version_checking. +# Minetest 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 @@ -1186,8 +1239,9 @@ # The 'snowbiomes' flag enables the new 5 biome system. # When the 'snowbiomes' flag is enabled jungles are automatically enabled and # the 'jungles' flag is ignored. -# type: flags possible values: jungles, biomeblend, mudflow, snowbiomes, flat, trees, nojungles, nobiomeblend, nomudflow, nosnowbiomes, noflat, notrees -# mgv6_spflags = jungles,biomeblend,mudflow,snowbiomes,noflat,trees +# 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 +# mgv6_spflags = jungles,biomeblend,mudflow,snowbiomes,noflat,trees,temples # Deserts occur when np_biome exceeds this value. # When the 'snowbiomes' flag is enabled, this is ignored. @@ -2591,6 +2645,10 @@ # type: bool # random_input = false +# Enable random mod loading (mainly used for testing). +# type: bool +# random_mod_load_order = false + # Enable mod channels support. # type: bool # enable_mod_channels = false @@ -2673,8 +2731,8 @@ # 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 OpenGL and OGLES2 (experimental). -# type: enum values: , opengl, ogles1, ogles2 +# Shaders are supported by everything but OGLES1. +# type: enum values: , opengl, opengl3, ogles1, ogles2 # video_driver = # Distance in nodes at which transparency depth sorting is enabled @@ -2682,11 +2740,6 @@ # type: int min: 0 max: 128 # transparency_sorting_distance = 16 -# Enable vertex buffer objects. -# This should greatly improve graphics performance. -# type: bool -# enable_vbo = true - # Radius of cloud area stated in number of 64 node cloud squares. # Values larger than 26 will start to produce sharp cutoffs at cloud area corners. # type: int min: 1 max: 62 @@ -2710,12 +2763,6 @@ # type: int min: 0 max: 8 # mesh_generation_threads = 0 -# Size of the MapBlock cache of the mesh generator. Increasing this will -# increase the cache hit %, reducing the data being copied from the main -# thread, thus reducing jitter. -# type: int min: 0 max: 1000 -# meshgen_block_cache_size = 20 - # True = 256 # False = 128 # Usable to make minimap smoother on slower machines. @@ -2759,6 +2806,17 @@ # type: int min: 1 max: 16 # client_mesh_chunk = 1 +# Enables debug and error-checking in the OpenGL driver. +# type: bool +# opengl_debug = false + +### Sound + +# Comma-separated list of AL and ALC extensions that should not be used. +# Useful for testing. See al_extensions.[h,cpp] for details. +# type: string +# sound_extensions_blacklist = + ### Font # type: bool @@ -2937,9 +2995,10 @@ ### Server/Env Performance -# Length of a server tick and the interval at which objects are generally updated over -# network, stated in seconds. -# type: float min: 0 +# 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. +# type: float min: 0 max: 1 # dedicated_server_step = 0.09 # Whether players are shown to clients without any range limit. @@ -3027,12 +3086,11 @@ # At this distance the server will aggressively optimize which blocks are sent to # clients. # Small values potentially improve performance a lot, at the expense of visible -# rendering glitches (some blocks will not be rendered under water and in caves, -# as well as sometimes on land). +# rendering glitches (some blocks might not be rendered correctly in caves). # Setting this to a value greater than max_block_send_distance disables this # optimization. -# Stated in mapblocks (16 nodes). -# type: int min: 2 max: 32767 +# Stated in MapBlocks (16 nodes). +# type: int min: 2 max: 2047 # block_send_optimize_distance = 4 # If enabled, the server will perform map block occlusion culling based on @@ -3042,6 +3100,14 @@ # type: bool # server_side_occlusion_culling = true +# At this distance the server will perform a simpler and cheaper occlusion check. +# Smaller values potentially improve performance, at the expense of temporarily visible +# rendering glitches (missing blocks). +# This is especially useful for very large viewing range (upwards of 500). +# Stated in MapBlocks (16 nodes). +# type: int min: 2 max: 2047 +# block_cull_optimize_distance = 25 + ### Mapgen # Size of mapchunks generated by mapgen, stated in mapblocks (16 nodes). @@ -3104,10 +3170,6 @@ ### Miscellaneous -# Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k screens. -# type: int min: 1 -# screen_dpi = 72 - # Adjust the detected display density, used for scaling UI elements. # type: float min: 0.5 max: 5 # display_density_factor = 1 @@ -3261,23 +3323,6 @@ # type: bool # enable_sound = true -# Unix timestamp (integer) of when the client last checked for an update -# Set this value to "disabled" to never check for updates. -# type: string -# update_last_checked = - -# Version number which was last seen during an update check. -# -# Representation: MMMIIIPPP, where M=Major, I=Minor, P=Patch -# Ex: 5.5.0 is 005005000 -# type: int -# update_last_known = 0 - -# If this is set to true, the user will never (again) be shown the -# "reinstall Minetest Game" notification. -# type: bool -# no_mtg_notification = false - # Key for moving the player forward. # See https://github.com/minetest/irrlicht/blob/master/include/Keycodes.h # type: key @@ -3417,6 +3462,11 @@ # type: key # keymap_screenshot = KEY_F12 +# Key for toggling fullscreen mode. +# See https://github.com/minetest/irrlicht/blob/master/include/Keycodes.h +# type: key +# keymap_fullscreen = KEY_F11 + # Key for dropping the currently selected item. # See https://github.com/minetest/irrlicht/blob/master/include/Keycodes.h # type: key @@ -3605,9 +3655,9 @@ # Key for toggling the display of fog. # See https://github.com/minetest/irrlicht/blob/master/include/Keycodes.h # type: key -# keymap_toggle_force_fog_off = KEY_F3 +# keymap_toggle_fog = KEY_F3 -# Key for toggling the camera update. Only used for development +# Key for toggling the camera update. Only usable with 'debug' privilege. # See https://github.com/minetest/irrlicht/blob/master/include/Keycodes.h # type: key # keymap_toggle_update_camera = @@ -3622,6 +3672,11 @@ # type: key # keymap_toggle_profiler = KEY_F6 +# Key for toggling the display of mapblock boundaries. +# See https://github.com/minetest/irrlicht/blob/master/include/Keycodes.h +# type: key +# keymap_toggle_block_bounds = + # Key for switching between first- and third-person camera. # See https://github.com/minetest/irrlicht/blob/master/include/Keycodes.h # type: key @@ -3636,3 +3691,4 @@ # See https://github.com/minetest/irrlicht/blob/master/include/Keycodes.h # type: key # keymap_decrease_viewing_range_min = - + diff --git a/misc/minetest.exe.manifest b/misc/minetest.exe.manifest index ff5469250..1b8c3ba7b 100644 --- a/misc/minetest.exe.manifest +++ b/misc/minetest.exe.manifest @@ -10,7 +10,9 @@ + true + PerMonitorV2 UTF-8 SegmentHeap diff --git a/misc/net.minetest.minetest.appdata.xml b/misc/net.minetest.minetest.appdata.xml deleted file mode 100644 index c9b88b37a..000000000 --- a/misc/net.minetest.minetest.appdata.xml +++ /dev/null @@ -1,87 +0,0 @@ - - - net.minetest.minetest.desktop - CC0-1.0 - LGPL-2.1+ and CC-BY-SA-3.0 and MIT and Apache-2.0 - - mild - mild - intense - mild - - Minetest - Multiplayer infinite-world block sandbox game - Mehrspieler-Sandkastenspiel mit unendlichen Blockwelten - -

- Minetest is an infinite-world block sandbox game and game engine. -

- Minetest ist ein Sandkastenspiel und eine Spielengine mit unendlichen Welten. -

- Players can create and destroy various types of blocks in a - three-dimensional open world. This allows forming structures in - every possible creation, on multiplayer servers or in singleplayer. -

- Spieler können in einer offenen 3D-Welt viele verschiedene Arten von - Blöcken platzieren und abbauen. Dies erlaubt das Bauen von vielfältigen - Strukturen im Einzelspieler oder auf Mehrspielerservern. -

- Minetest 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. - Es ist leichtgewichtig genug, um auf relativ alter Hardware zu laufen. -

- Minetest has many features, including: -

- Minetest besitzt viele Features, unter anderem: -

-
    -
  • Ability to walk around, dig, and build in a near-infinite voxel world
  • -
  • Die Möglichkeit, in einer nahezu unendlichen Voxel-Welt herumzulaufen, zu graben und zu bauen
  • -
  • Crafting of items from raw materials
  • -
  • Fertigen von Items aus Rohmaterialien
  • -
  • Fast and able to run on old and slow hardware
  • -
  • Gute Performance selbst auf älterer und langsamer Hardware
  • -
  • A simple modding API that supports many additions and modifications to the game
  • -
  • Eine einfache Modding-API, die viele Ergänzungen und Änderungen am Spiel unterstützt
  • -
  • Multiplayer support via servers hosted by users
  • -
  • Mehrspieler auf selber gehosteten Servern
  • -
  • Beautiful lightning-fast map generator
  • -
  • Wunderschöner, blitzschneller Kartengenerator
  • -
-
- - - http://www.minetest.net/media/gallery/1.jpg - - - http://www.minetest.net/media/gallery/3.jpg - - - http://www.minetest.net/media/gallery/5.jpg - - - - sandbox - world - mining - multiplayer - - https://www.minetest.net - https://www.minetest.net/development/#reporting-issues - https://dev.minetest.net/Translation - https://www.minetest.net/development/#donate - https://wiki.minetest.net/FAQ - https://wiki.minetest.net - https://github.com/minetest/minetest - https://www.minetest.net/get-involved/ - - minetest - - minetest - sfan5@live.de - - - -
diff --git a/misc/net.minetest.minetest.desktop b/misc/net.minetest.minetest.desktop index a94dbab1b..312e70f40 100644 --- a/misc/net.minetest.minetest.desktop +++ b/misc/net.minetest.minetest.desktop @@ -1,13 +1,9 @@ [Desktop Entry] Name=Minetest GenericName=Minetest -Comment=Multiplayer infinite-world block sandbox -Comment[de]=Mehrspieler-Sandkastenspiel mit unendlichen Blockwelten -Comment[es]=Juego sandbox multijugador con mundos infinitos -Comment[fr]=Jeu multijoueurs de type bac à sable avec des mondes infinis -Comment[ja]=マルチプレイに対応した、無限の世界のブロック型サンドボックスゲームです -Comment[ru]=Игра-песочница с безграничным миром, состоящим из блоков -Comment[tr]=Tek-Çok oyuncuyla küplerden sonsuz dünyalar inşa et +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 Terminal=false diff --git a/misc/net.minetest.minetest.metainfo.xml b/misc/net.minetest.minetest.metainfo.xml new file mode 100644 index 000000000..4045b8f23 --- /dev/null +++ b/misc/net.minetest.minetest.metainfo.xml @@ -0,0 +1,154 @@ + + + net.minetest.minetest + + Minetest + Block-based multiplayer game platform + Blockbasierte Mehrspieler-Spieleplattform + Plate-forme de jeu multijoueurs à base de blocs + + CC0-1.0 + LGPL-2.1+ AND CC-BY-SA-3.0 AND MIT AND Apache-2.0 + + + Minetest Team + + + + pointing + keyboard + touch + offline-only + + + + 360 + + + + mild + mild + intense + mild + + + +

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

+

+ Minetest ist eine blockbasierte Sandbox-Spielplattform. +

+

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

+

+ Players can create and destroy various types of blocks in a + three-dimensional open world. This allows forming structures in + every possible creation, on multiplayer servers or in singleplayer. +

+

+ Spieler können in einer offenen 3D-Welt viele verschiedene Arten von + Blöcken platzieren und abbauen. Dies erlaubt das Bauen von vielfältigen + Strukturen im Einzelspieler oder auf Mehrspielerservern. +

+

+ Les joueurs peuvent créer et détruire différents types de blocs dans un + monde ouvert tridimensionnel. Cela permet de créer des structures de toutes les + formes possibles, sur des serveurs multijoueurs ou en solo. +

+

+ Minetest 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. + Es ist leichtgewichtig genug, um auf relativ alter Hardware zu laufen. +

+

+ Minetest 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: +

+

+ Minetest besitzt viele Features, unter anderem: +

+

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

+
    +
  • Ability to walk around, dig, and build in a near-infinite voxel world
  • +
  • Die Möglichkeit, in einer nahezu unendlichen Voxel-Welt herumzulaufen, zu graben und zu + bauen +
  • +
  • La possibilité de se promener, de creuser et de construire dans un monde voxel quasi-infini +
  • +
  • Crafting of items from raw materials
  • +
  • Fertigen von Items aus Rohmaterialien
  • +
  • Fabrication d'objets à partir de matières premières
  • +
  • A simple modding API that supports many additions and modifications to the game
  • +
  • Eine einfache Modding-API, die viele Ergänzungen und Änderungen am Spiel unterstützt
  • +
  • Une API de modding simple qui permet de nombreux ajouts et modifications au jeu
  • +
  • Multiplayer support via servers hosted by users
  • +
  • Mehrspieler auf selber gehosteten Servern
  • +
  • Prise en charge du multijoueur via des serveurs hébergés par les utilisateurs
  • +
  • Beautiful lightning-fast map generator
  • +
  • Wunderschöner, blitzschneller Kartengenerator
  • +
  • Générateur de cartes très rapide
  • +
+
+ + net.minetest.minetest.desktop + + + https://www.minetest.net/media/gallery/1.jpg + + + https://www.minetest.net/media/gallery/3.jpg + + + https://www.minetest.net/media/gallery/5.jpg + + + + minetest + + + Game + Simulation + + + + sandbox + world + mining + crafting + blocks + nodes + multiplayer + roleplaying + + + https://www.minetest.net + https://www.minetest.net/get-involved/#reporting-issues + https://dev.minetest.net/Translation + https://www.minetest.net/get-involved/#donate + https://wiki.minetest.net/FAQ + https://wiki.minetest.net + https://github.com/minetest/minetest + https://www.minetest.net/get-involved + + + minetest + + + minetest + + celeron55@gmail.com + + + + +
diff --git a/po/ar/minetest.po b/po/ar/minetest.po index 64eeda5b1..547f726a6 100644 --- a/po/ar/minetest.po +++ b/po/ar/minetest.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" -"PO-Revision-Date: 2023-01-26 12:51+0000\n" -"Last-Translator: Ghurir \n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" +"PO-Revision-Date: 2024-05-21 09:01+0000\n" +"Last-Translator: Jamil Mohamad Alhussein \n" "Language-Team: Arabic \n" "Language: ar\n" @@ -13,7 +13,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " "&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n" -"X-Generator: Weblate 4.16-dev\n" +"X-Generator: Weblate 5.6-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -33,7 +33,7 @@ msgstr "أمر غير صالح: " #: builtin/client/chatcommands.lua msgid "Issued command: " -msgstr "" +msgstr "امر صادر : " #: builtin/client/chatcommands.lua msgid "List online players" @@ -57,7 +57,7 @@ msgstr "أعِد الإحياء" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "You died" -msgstr "مِت" +msgstr "لقد مُتْ" #: builtin/common/chatcommands.lua msgid "Available commands:" @@ -68,12 +68,12 @@ msgid "Available commands: " msgstr "الأوامر المتاحة: " #: builtin/common/chatcommands.lua -#, fuzzy msgid "Command not available: " -msgstr "الأوامر غير المتاحة: " +msgstr "الأمر غير متاح: " #: builtin/common/chatcommands.lua -msgid "Get help for commands" +#, fuzzy +msgid "Get help for commands (-t: output in chat)" msgstr "احصل على تعليمات الأوامر" #: builtin/common/chatcommands.lua @@ -83,13 +83,10 @@ msgstr "" "استخدم '.help ' للحصول على مزيد من المعلومات أو '.help all' لعرض كل شيء." #: builtin/common/chatcommands.lua -msgid "[all | ]" +#, fuzzy +msgid "[all | ] [-t]" msgstr "[all | ]" -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" -msgstr "موافق" - #: builtin/fstk/ui.lua msgid "" msgstr "<ليس متاحًا>" @@ -106,6 +103,10 @@ msgstr "حدث خطأ:" msgid "Main menu" msgstr "القائمة الرئيسية" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "موافق" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "أعد الإتصال" @@ -134,19 +135,26 @@ msgstr "نحن ندعم نسخة الميفاق $1فقط." msgid "We support protocol versions between version $1 and $2." msgstr "نحن ندعم نسخ الميفاق ما بين $1 و $2." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "\"$1\" موجود مسبقًا. هل تريد الكتابة عليه؟" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" +msgstr "خطأ في تثبيت \"1$\" : 2$" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." -msgstr "الاعتماديتان \"$1\" و $2 ستثبتان." +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download \"$1\"" +msgstr "فشل تحميل \"$1\"" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" -msgstr "$1 بواسطة $2" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr "فشل تحميل $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "التثبيت: نوع الملف غير مدعوم أو أرشيف تالف" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" @@ -154,158 +162,158 @@ msgstr "" "يُنزل $1،\n" "$2 في الطابور" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." msgstr "ينزل $1..." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "يحتاج $1 لكن لم يُعثر عليها." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "$1 سيُثبت، واعتماديات $1 ستُتجاهل." - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "كل الحزم" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "مثبت مسبقا" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "عُد للقائمة الرئيسة" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "لا يمكن استخدام ContentDB عند بناء Minetest بدون cURL" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "يحمل..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "الألعاب" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +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 "Mods" +msgstr "التعديلات" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "تعذر استيراد الحزم" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "بدون نتائج" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "لا توجد تحديثات" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "في الطابور" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "حِزم الإكساء" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "لم يتم العثور على الحزمة 1$." + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "أزل" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "حدِث" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "حدِّث الكل [$1]" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "View more information in a web browser" +msgstr "اعرض مزيدًا من المعلومات عبر المتصفح" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#, fuzzy +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\" و $2 ستثبتان." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "$1 بواسطة $2" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "يحتاج $1 لكن لم يُعثر عليها." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "$1 سيُثبت، واعتماديات $1 ستُتجاهل." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "مثبت مسبقا" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "اللعبة القاعدية :" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "ألغِ" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "لا يمكن استخدام ContentDB عند بناء Minetest بدون cURL" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "الإعتماديات:" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "يحمل..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to download \"$1\"" -msgstr "فشل تحميل $1" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "فشل تحميل $1" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "التثبيت: نوع الملف غير مدعوم أو هو أرشيف تالف" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "الألعاب" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "ثبت" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "ثبت $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "ثبت الإعتماديات المفقودة" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "يحمل..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "التعديلات" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "تعذر استيراد الحزم" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "بدون نتائج" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "لا توجد تحديثات" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "لم يُعثر عليه" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "اكتب عليه" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "تحقق من صحة اللعبة القاعدية." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" -msgstr "في الطابور" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" +msgstr "\"$1\" موجود مسبقًا. هل تريد الكتابة عليه؟" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "حِزم الإكساء" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "أزل" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "حدِث" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "حدِّث الكل [$1]" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "اعرض مزيدًا من المعلومات عبر المتصفح" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" -msgstr "" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" +msgstr "اكتب عليه" #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" @@ -320,14 +328,12 @@ msgid "Failed to install $1 to $2" msgstr "فشل تثبيت $1 في $2" #: builtin/mainmenu/content/pkgmgr.lua -#, fuzzy msgid "Install: Unable to find suitable folder name for $1" -msgstr "تثبيت تعديل: لا يمكن العصور على اسم مجلد مناسب لحزمة التعديلات $1" +msgstr "تنزيل: لا يمكن العثور على اسم مجلد مناسب لحزمة التعديلات $1" #: builtin/mainmenu/content/pkgmgr.lua -#, fuzzy msgid "Unable to find a valid mod, modpack, or game" -msgstr "فشل إيجاد تعديل أو حزمة تعديلات صالحة" +msgstr "فشل إيجاد تعديل, حزمة تعديلات أو لعبة صالحة" #: builtin/mainmenu/content/pkgmgr.lua #, fuzzy @@ -340,11 +346,11 @@ msgstr "فشل تثبيت $1 كحزمة إكساء" #: builtin/mainmenu/dlg_config_world.lua msgid "(Enabled, has error)" -msgstr "" +msgstr "(مفعل، به خطأ)" #: builtin/mainmenu/dlg_config_world.lua msgid "(Unsatisfied)" -msgstr "" +msgstr "(غير محقق)" #: builtin/mainmenu/dlg_config_world.lua msgid "Disable all" @@ -456,10 +462,20 @@ msgstr "أنشئ" msgid "Decorations" msgstr "تزيينات" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." msgstr "\"Development Test\" مُوَجّه للمطورين." +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "الزنزانات" @@ -626,7 +642,7 @@ msgstr "أكد كلمة المرور" #: builtin/mainmenu/dlg_register.lua msgid "Joining $1" -msgstr "" +msgstr "انضمام 1$" #: builtin/mainmenu/dlg_register.lua msgid "Missing name" @@ -635,7 +651,7 @@ msgstr "الاسم مفقود" #: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua #: builtin/mainmenu/tab_online.lua msgid "Name" -msgstr "الاسم" +msgstr "اسم" #: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua #: builtin/mainmenu/tab_online.lua @@ -652,7 +668,7 @@ msgstr "سجل" #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "Dismiss" -msgstr "" +msgstr "رفض" #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "" @@ -660,16 +676,20 @@ msgid "" "\"Minetest Game\". Since Minetest 5.8.0, Minetest ships without a default " "game." msgstr "" +"لفترة طويلة، كان محرك Minetest مزودًا بلعبة افتراضية تسمى \"Minetest Game\". " +"منذ Minetest 5.8.0، يتم شحن Minetest بدون لعبة افتراضية." #: 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 "" +"إذا كنت تريد الاستمرار في اللعب في عوالم Minetest Game، فأنت بحاجة إلى إعادة " +"تثبيت Minetest Game." #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "Minetest Game is no longer installed by default" -msgstr "" +msgstr "لم تعد لعبة Minetest مثبتة بشكل افتراضي" #: builtin/mainmenu/dlg_reinstall_mtg.lua #, fuzzy @@ -693,7 +713,7 @@ msgstr "" #: builtin/mainmenu/dlg_version_info.lua msgid "A new $1 version is available" -msgstr "" +msgstr "إصدار جديد ل 1$ متوفر" #: builtin/mainmenu/dlg_version_info.lua msgid "" @@ -702,6 +722,10 @@ msgid "" "Visit $3 to find out how to get the newest version and stay up to date with " "features and bugfixes." msgstr "" +"الأصدار المثبت: 1$\n" +"الأصدار الجديد: 2$\n" +"زر 3$ لمعرفة كيفية الحصول على الإصدار الأحدث والبقاء على اطلاع بالميزات " +"وإصلاحات الأخطاء." #: builtin/mainmenu/dlg_version_info.lua msgid "Later" @@ -817,20 +841,16 @@ 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 msgid "Back" msgstr "عُد" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "غيِر المفاتيح" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -840,17 +860,18 @@ msgstr "دردشة" msgid "Clear" msgstr "امسح" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "التحكم" #: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp msgid "General" -msgstr "" +msgstr "عام" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Movement" -msgstr "" +msgstr "حركة" #: builtin/mainmenu/settings/dlg_settings.lua #, fuzzy @@ -859,7 +880,7 @@ 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" @@ -867,7 +888,7 @@ msgstr "إبحث" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Show advanced settings" -msgstr "" +msgstr "أظهر الاعدادات المتقدمة" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Show technical names" @@ -888,11 +909,11 @@ 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" @@ -942,7 +963,7 @@ msgstr "المطورون الرئيسيون" #: builtin/mainmenu/tab_about.lua msgid "Core Team" -msgstr "" +msgstr "الفريق الأساسي" #: builtin/mainmenu/tab_about.lua msgid "Irrlicht device:" @@ -970,7 +991,7 @@ msgstr "المطورون الرئيسيون السابقون" #: builtin/mainmenu/tab_about.lua msgid "Share debug log" -msgstr "" +msgstr "مشاركة سجل التصحيح" #: builtin/mainmenu/tab_content.lua msgid "Browse online content" @@ -1052,6 +1073,17 @@ msgstr "ثبت لعبة" msgid "Install games from ContentDB" msgstr "ثبت العابا من ContentDB" +#: builtin/mainmenu/tab_local.lua +#, fuzzy +msgid "Minetest doesn't come with a game by default." +msgstr "لم تعد لعبة Minetest مثبتة بشكل افتراضي" + +#: builtin/mainmenu/tab_local.lua +msgid "" +"Minetest is a game-creation platform that allows you to play many different " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "جديد" @@ -1085,8 +1117,9 @@ msgid "Start Game" msgstr "ابدأ اللعبة" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." -msgstr "ليس لديك لعبة مثبتت." +#, fuzzy +msgid "You need to install a game before you can create a world." +msgstr "يجب عليك تنزيل اللعبة قبل إضافة التعديلات" #: builtin/mainmenu/tab_online.lua msgid "Address" @@ -1166,18 +1199,10 @@ msgstr "يحمل الإكساء..." msgid "Rebuilding shaders..." msgstr "يعيد بناء المظلِلات..." -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "خطأ في الاتصال (انتهاء المهلة؟)" - #: src/client/clientlauncher.cpp msgid "Could not find or load game: " msgstr "تعذر العثور على اللعبة أو تحميلها " -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "مواصفات اللعبة غير صالحة." - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "القائمة الرئيسية" @@ -1202,7 +1227,11 @@ msgstr "فشل فتح ملف كلمة المرور المدخل: " msgid "Provided world path doesn't exist: " msgstr "مسار العالم المدخل غير موجود: " -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "وسائط…" + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp msgid "" "\n" "Check debug.txt for details." @@ -1210,18 +1239,10 @@ msgstr "" "\n" "راجع debug.txt لمزيد من التفاصيل." -#: src/client/game.cpp -msgid "- Address: " -msgstr "- العنوان: " - #: src/client/game.cpp msgid "- Mode: " msgstr "- النمط: " -#: src/client/game.cpp -msgid "- Port: " -msgstr "- المنفذ: " - #: src/client/game.cpp msgid "- Public: " msgstr "- عام: " @@ -1257,10 +1278,6 @@ msgstr "المشي التلقائي ممكن" msgid "Block bounds hidden" msgstr "حدود الكتل مخفية" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "حدود كل الكتل ظاهرة" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "حدود الكتلة الحالية ظاهرة" @@ -1306,6 +1323,10 @@ msgstr "البرمجة النصية معطلة من جانب العميل" msgid "Connecting to server..." msgstr "يتصل بالخادوم…" +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "خطأ في الاتصال (انتهاء المهلة؟)" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "فشل الاتصال لسبب مجهول" @@ -1314,47 +1335,14 @@ msgstr "فشل الاتصال لسبب مجهول" msgid "Continue" msgstr "تابع" -#: src/client/game.cpp -#, fuzzy, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" -"أزرار التحكم:\n" -"- %s: سر للأمام\n" -"- %s: سر للخلف\n" -"- %s: سر يسارا\n" -"- %s: سر يمينا\n" -"- %s: اقفز/تسلق\n" -"- %s: احفر/الكم\n" -"- %s: ضع/استخدم\n" -"- %s: ازحف/انزل\n" -"- %s: ارمي عنصر\n" -"- %s: افتح المخزن\n" -"- تحريك الفأرة: دوران\n" -"- عجلة الفأرة: غيير العنصر\n" -"- -%s: دردشة\n" - #: src/client/game.cpp #, fuzzy msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1399,7 +1387,7 @@ msgstr "معلومات التنقيح مرئية" #: src/client/game.cpp msgid "Debug info, profiler graph, and wireframe hidden" -msgstr "" +msgstr "معلومات التصحيح ، الرسم البياني لملف التعريف ، والإطار السلكي مخفي" #: src/client/game.cpp #, fuzzy, c-format @@ -1446,6 +1434,11 @@ msgstr "الضباب معطل" msgid "Fog enabled" msgstr "الضباب مفعل" +#: src/client/game.cpp +#, fuzzy +msgid "Fog enabled by game or mod" +msgstr "التكبير معطل من قبل لعبة أو تعديل" + #: src/client/game.cpp msgid "Game info:" msgstr "معلومات اللعبة:" @@ -1466,10 +1459,6 @@ msgstr "تعريف العنصر…" msgid "KiB/s" msgstr "كب\\ثا" -#: src/client/game.cpp -msgid "Media..." -msgstr "وسائط…" - #: src/client/game.cpp msgid "MiB/s" msgstr "مب\\ثا" @@ -1492,7 +1481,7 @@ msgstr "وضع القبات معطل" #: src/client/game.cpp msgid "Noclip mode enabled (note: no 'noclip' privilege)" -msgstr "" +msgstr "تم تمكين وضع Noclip (ملاحظة: لا يوجد امتياز \"noclip\")" #: src/client/game.cpp msgid "Node definitions..." @@ -1567,7 +1556,7 @@ msgstr "تعذر الاتصال بـ %s لأن IPv6 معطلة" #: src/client/game.cpp #, c-format msgid "Unable to listen on %s because IPv6 is disabled" -msgstr "" +msgstr "غير قادر على الاستماع إلى %s لأن IPv6 معطل" #: src/client/game.cpp #, fuzzy @@ -1580,8 +1569,9 @@ msgid "Unlimited viewing range enabled" msgstr "مدى الرؤية غير المحدود مفعل" #: src/client/game.cpp +#, fuzzy msgid "Unlimited viewing range enabled, but forbidden by game or mod" -msgstr "" +msgstr "تم تمكين نطاق عرض غير محدود، ولكنه محظور بواسطة اللعبة أو التعديلة" #: src/client/game.cpp #, fuzzy, c-format @@ -1589,9 +1579,11 @@ msgid "Viewing changed to %d (the minimum)" msgstr "مدى الرؤية في أدنى حد: %d" #: src/client/game.cpp -#, c-format +#, fuzzy, c-format msgid "Viewing changed to %d (the minimum), but limited to %d by game or mod" msgstr "" +"تم تغيير العرض إلى %d (الحد الأدنى)، ولكنه يقتصر على %d حسب اللعبة أو " +"التعديلة" #: src/client/game.cpp #, c-format @@ -1604,10 +1596,12 @@ msgid "Viewing range changed to %d (the maximum)" msgstr "غُيرَ مدى الرؤية الى %d" #: src/client/game.cpp -#, c-format +#, fuzzy, c-format msgid "" "Viewing range changed to %d (the maximum), but limited to %d by game or mod" msgstr "" +"تم تغيير نطاق العرض إلى %d (الحد الأقصى)، ولكنه يقتصر على %d حسب اللعبة أو " +"التعديلة" #: src/client/game.cpp #, fuzzy, c-format @@ -1627,10 +1621,6 @@ msgstr "تم إظهار الإطار السلكي" msgid "Zoom currently disabled by game or mod" msgstr "التكبير معطل من قبل لعبة أو تعديل" -#: src/client/game.cpp -msgid "ok" -msgstr "موافق" - #: src/client/gameui.cpp #, fuzzy msgid "Chat currently disabled by game or mod" @@ -1672,7 +1662,7 @@ msgstr "Backspace" #. ~ Usually paired with the Pause key #: src/client/keycode.cpp msgid "Break Key" -msgstr "" +msgstr "مفتاح الكسر" #: src/client/keycode.cpp msgid "Caps Lock" @@ -1694,8 +1684,9 @@ msgid "Delete Key" msgstr "إحذف" #: src/client/keycode.cpp +#, fuzzy msgid "Down Arrow" -msgstr "" +msgstr "السهم لأسفل" #: src/client/keycode.cpp msgid "End" @@ -1703,7 +1694,7 @@ msgstr "End" #: src/client/keycode.cpp msgid "Erase EOF" -msgstr "" +msgstr "مسح EOF" #: src/client/keycode.cpp msgid "Execute" @@ -1801,8 +1792,9 @@ msgid "Numpad +" msgstr "Numpad +" #: src/client/keycode.cpp +#, fuzzy msgid "Numpad -" -msgstr "" +msgstr "لوحة الأرقام -" #: src/client/keycode.cpp #, fuzzy @@ -1908,7 +1900,7 @@ msgstr "Right Control" #: src/client/keycode.cpp msgid "Right Button" -msgstr "" +msgstr "الزر الايمن" #: src/client/keycode.cpp #, fuzzy @@ -1958,7 +1950,7 @@ msgstr "Snapshot" #: src/client/keycode.cpp msgid "Space" -msgstr "" +msgstr "مسافة" #: src/client/keycode.cpp #, fuzzy @@ -1966,8 +1958,9 @@ msgid "Tab" msgstr "Tab" #: src/client/keycode.cpp +#, fuzzy msgid "Up Arrow" -msgstr "" +msgstr "سهم للاعلى" #: src/client/keycode.cpp #, fuzzy @@ -2002,22 +1995,36 @@ msgstr "الخريطة المصغرة في وضع الأسطح، تكبير x%d" msgid "Minimap in texture mode" msgstr "الخريطة المصغرة في وضع الاكساء" +#: src/client/shader.cpp +#, fuzzy, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "فشل فتح صفحة الويب" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +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 "" +msgstr "%s مفقود:" #: src/content/mod_configuration.cpp msgid "" "Install and enable the required mods, or disable the mods causing errors." msgstr "" +"قم بتثبيت التعديلات المطلوبة وتمكينها، أو قم بتعطيل التعديلات التي تسبب " +"الأخطاء." #: src/content/mod_configuration.cpp +#, fuzzy msgid "" "Note: this may be caused by a dependency cycle, in which case try updating " "the mods." msgstr "" +"ملاحظة: قد يكون السبب في ذلك هو دورة التبعية، وفي هذه الحالة حاول تحديث " +"التعديلات." #: src/content/mod_configuration.cpp #, fuzzy @@ -2070,7 +2077,7 @@ msgstr "الأوامر" #: src/gui/guiKeyChangeMenu.cpp msgid "Console" -msgstr "" +msgstr "وحدة التحكم" #: src/gui/guiKeyChangeMenu.cpp msgid "Dec. range" @@ -2114,7 +2121,7 @@ msgstr "المفتاح مستخدم مسبقا" #: src/gui/guiKeyChangeMenu.cpp msgid "Keybindings." -msgstr "" +msgstr "روابط المفاتيح." #: src/gui/guiKeyChangeMenu.cpp msgid "Left" @@ -2122,7 +2129,7 @@ msgstr "يسار" #: src/gui/guiKeyChangeMenu.cpp msgid "Local command" -msgstr "" +msgstr "الأمر المحلي" #: src/gui/guiKeyChangeMenu.cpp msgid "Mute" @@ -2193,6 +2200,19 @@ msgstr "كبِر" msgid "press key" msgstr "اضغط على زر" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +#, fuzzy +msgid "Unable to open URL" +msgstr "فشل فتح صفحة الويب" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "غيِّر" @@ -2226,13 +2246,14 @@ msgstr "حجم الصوت: %d%%" #. 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 "ar" #: src/network/clientpackethandler.cpp msgid "" "Name is not registered. To create an account on this server, click 'Register'" -msgstr "" +msgstr "الاسم غير مسجل. لإنشاء حساب على هذا الخادم، انقر فوق \"تسجيل\"" #: src/network/clientpackethandler.cpp #, fuzzy @@ -2382,11 +2403,11 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Absolute limit of queued blocks to emerge" -msgstr "" +msgstr "الحد المطلق للكتل في قائمة الانتظار في الظهور" #: src/settings_translation_file.cpp msgid "Acceleration in air" -msgstr "تسارع الطيران" +msgstr "تسارع في الهواء" #: src/settings_translation_file.cpp msgid "Acceleration of gravity, in nodes per second per second." @@ -2410,17 +2431,11 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Adds particles when digging a node." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" +msgstr "يضيف جزيئات عند حفر العقدة." #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." -msgstr "" +msgstr "اضبط كثافة العرض المكتشفة المستخدمة لقياس عناصر واجهة المستخدم." #: src/settings_translation_file.cpp #, c-format @@ -2431,6 +2446,12 @@ msgid "" "Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n" "to be sure) creates a solid floatland layer." msgstr "" +"يضبط كثافة طبقة الأرض العائمة.\n" +"زيادة القيمة لزيادة الكثافة. يمكن أن تكون إيجابية أو سلبية.\n" +"القيمة = 0.0: 50% من الحجم عبارة عن أرض عائمة.\n" +"القيمة = 2.0 (يمكن أن تكون أعلى اعتمادًا على \"mgv7_np_floatland\"،اختبار " +"دائما\n" +" لتكون متأكداً) ينشئ طبقة صلبة من الأراضي العائمة." #: src/settings_translation_file.cpp #, fuzzy @@ -2441,6 +2462,10 @@ msgstr "ضمّن اسم العنصر" msgid "Advanced" msgstr "متقدم" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp #, fuzzy msgid "" @@ -2458,7 +2483,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Always fly fast" -msgstr "" +msgstr "دائما طِرْ بسرعة" #: src/settings_translation_file.cpp msgid "Ambient occlusion gamma" @@ -2470,7 +2495,7 @@ msgstr "تضخيم الوديان." #: src/settings_translation_file.cpp msgid "Anisotropic filtering" -msgstr "" +msgstr "التصنيف متباين الخواص" #: src/settings_translation_file.cpp msgid "Announce server" @@ -2502,6 +2527,17 @@ msgstr "" msgid "Apple trees noise" 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 "Arm inertia" msgstr "" @@ -2523,17 +2559,26 @@ msgid "" "clients.\n" "Small values potentially improve performance a lot, at the expense of " "visible\n" -"rendering glitches (some blocks will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +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 "Audio" -msgstr "" +msgstr "الصوت" #: src/settings_translation_file.cpp msgid "Automatically jump up single-node obstacles." @@ -2541,7 +2586,7 @@ msgstr "قفز تلقائي فوق العوائق التي ارتفاعها كت #: src/settings_translation_file.cpp msgid "Automatically report to the serverlist." -msgstr "" +msgstr "الإبلاغ تلقائيا إلى قائمة الخوادم." #: src/settings_translation_file.cpp msgid "Autoscaling mode" @@ -2582,7 +2627,7 @@ msgstr "ترشيح خطي ثنائي" #: src/settings_translation_file.cpp msgid "Bind address" -msgstr "" +msgstr "ربط العنوان" #: src/settings_translation_file.cpp #, fuzzy @@ -2593,6 +2638,10 @@ msgstr "مواطن بيئية" msgid "Biome noise" msgstr "" +#: src/settings_translation_file.cpp +msgid "Block cull optimize distance" +msgstr "" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "" @@ -2704,6 +2753,8 @@ msgid "" "Center of light curve boost range.\n" "Where 0.0 is minimum light level, 1.0 is maximum light level." msgstr "" +"مركز نطاق تعزيز منحنى الضوء.\n" +"حيث 0.0 هو الحد الأدنى لمستوى الضوء، 1.0 هو الحد الأقصى لمستوى الضوء." #: src/settings_translation_file.cpp msgid "Chat command time message threshold" @@ -2720,7 +2771,7 @@ msgstr "حجم خط المحادثة" #: src/settings_translation_file.cpp msgid "Chat log level" -msgstr "" +msgstr "مستوى سجل الدردشة" #: src/settings_translation_file.cpp msgid "Chat message count limit" @@ -2768,19 +2819,19 @@ msgstr "عميل وخادم" #: src/settings_translation_file.cpp msgid "Client modding" -msgstr "" +msgstr "تعديل العميل" #: src/settings_translation_file.cpp msgid "Client side modding restrictions" -msgstr "" +msgstr "قيود التعديل من جانب العميل" #: src/settings_translation_file.cpp msgid "Client-side Modding" -msgstr "" +msgstr "التعديل من جانب العميل" #: src/settings_translation_file.cpp msgid "Client-side node lookup range restriction" -msgstr "" +msgstr "تقييد نطاق البحث عن العقدة من جانب العميل" #: src/settings_translation_file.cpp msgid "Climbing speed" @@ -2796,7 +2847,7 @@ msgstr "سحاب" #: src/settings_translation_file.cpp msgid "Clouds are a client-side effect." -msgstr "" +msgstr "الغيوم هي تأثير من جانب العميل." #: src/settings_translation_file.cpp msgid "Clouds in menu" @@ -2810,6 +2861,12 @@ msgstr "ضباب ملون" msgid "Colored shadows" 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -2826,6 +2883,9 @@ 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 "" +"القائمة المفصولة بالفواصل من التعديلات المسموح لها بالوصول إلى واجهات برمجة " +"تطبيقات HTTP، والذي\n" +" يسمح لهم بتحميل وتنزيل البيانات من/إلى الإنترنت." #: src/settings_translation_file.cpp msgid "" @@ -2875,7 +2935,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Console color" -msgstr "" +msgstr "لون وحدة التحكم" #: src/settings_translation_file.cpp msgid "Console height" @@ -2883,15 +2943,15 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Content Repository" -msgstr "" +msgstr "مخزن المحتوى" #: src/settings_translation_file.cpp msgid "ContentDB Flag Blacklist" -msgstr "" +msgstr "قائمة المحتوى السوداء الخاصة بقاعدة بيانات ContentDB" #: src/settings_translation_file.cpp msgid "ContentDB Max Concurrent Downloads" -msgstr "" +msgstr "الحد الأقصى للتنزيلات المتزامنة لContentDB" #: src/settings_translation_file.cpp msgid "ContentDB URL" @@ -2912,14 +2972,16 @@ msgid "" "Controls sinking speed in liquid when idling. Negative values will cause\n" "you to rise instead." msgstr "" +"يتحكم في سرعة الغرق في السائل عند الخمول. سوف تسبب\n" +"القيم السلبية لك أن ترتفع بدلا من ذلك." #: src/settings_translation_file.cpp msgid "Controls steepness/depth of lake depressions." -msgstr "" +msgstr "يتحكم في الانحدار/عمق منخفضات البحيرة." #: src/settings_translation_file.cpp msgid "Controls steepness/height of hills." -msgstr "" +msgstr "يتحكم في انحدار/ارتفاع التلال." #: src/settings_translation_file.cpp msgid "" @@ -2952,10 +3014,6 @@ msgid "" "Also controls the object crosshair color" msgstr "" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "" @@ -3005,6 +3063,19 @@ msgid "" "but also uses more resources." 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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "يحدد المناطق التي تتواجد بها أشجار التفاح." @@ -3192,6 +3263,11 @@ msgstr "فعِل الكل" msgid "Enable Bloom Debug" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Debanding" +msgstr "مكن الضرر" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3211,6 +3287,10 @@ msgid "" "filtering." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable Post Processing" +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "" @@ -3253,6 +3333,10 @@ msgstr "" msgid "Enable mouse wheel (scroll) for item selection in hotbar." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable random mod loading (mainly used for testing)." +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3276,6 +3360,10 @@ msgid "" "expecting." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable touchscreen" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3284,12 +3372,6 @@ msgid "" "when connecting to the server." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3319,6 +3401,19 @@ msgstr "" msgid "Enables caching of facedir rotated meshes." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -4143,9 +4238,10 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" #: src/settings_translation_file.cpp @@ -4292,10 +4388,6 @@ msgid "" "Make fog and sky colors depend on daytime (dawn/sunset) and view direction." msgstr "" -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "" @@ -4344,7 +4436,9 @@ 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." +"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 @@ -4379,10 +4473,6 @@ msgstr "" msgid "Mapblock mesh generation threads" msgstr "" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "" @@ -4625,6 +4715,10 @@ msgstr "" msgid "Minimap scan height" msgstr "" +#: src/settings_translation_file.cpp +msgid "Minimum dig repetition interval" +msgstr "" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "" @@ -4693,6 +4787,11 @@ msgstr "" msgid "Mouse sensitivity multiplier." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Movement threshold" +msgstr "حساسية اللمس (بكسل):" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "" @@ -4803,10 +4902,6 @@ msgstr "" msgid "Occlusion Culling" msgstr "" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -4819,6 +4914,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "OpenGL debug" +msgstr "" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "" @@ -4928,6 +5027,15 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Protocol version minimum" +msgstr "لا تتطابق نسخ الميفاق. " + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -4943,6 +5051,10 @@ msgstr "" msgid "Random input" msgstr "" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "" @@ -5107,9 +5219,8 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Screenshots" -msgstr "صوّر الشاشة" +msgstr "لقطات الشاشة" #: src/settings_translation_file.cpp msgid "Seabed noise" @@ -5133,8 +5244,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5256,7 +5367,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" @@ -5289,6 +5400,10 @@ msgid "" "Bright colors will bleed over the neighboring objects." 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 "Set to true to enable waving leaves." msgstr "" @@ -5328,8 +5443,7 @@ msgstr "مُظللات" msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" #: src/settings_translation_file.cpp @@ -5400,13 +5514,6 @@ msgid "" "recommended." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "" @@ -5442,7 +5549,7 @@ 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 Change Keys." +"cinematic mode by using the key set in Controls." msgstr "" #: src/settings_translation_file.cpp @@ -5463,6 +5570,16 @@ msgstr "" msgid "Soft shadow radius" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sound" +msgstr "الصوت مكتوم" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sound Extensions Blacklist" +msgstr "قائمة المحتوى السوداء الخاصة بقاعدة بيانات ContentDB" + #: src/settings_translation_file.cpp msgid "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -5619,17 +5736,37 @@ msgid "" "when calling `/profiler save [format]` without format." 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 "" "The file path relative to your world path in which profiles will be saved to." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "" #: src/settings_translation_file.cpp -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" #: src/settings_translation_file.cpp @@ -5640,6 +5777,12 @@ msgid "" "Default is 1.0 (1/2 node)." 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 "The network interface that the server listens on." msgstr "" @@ -5666,7 +5809,7 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" #: src/settings_translation_file.cpp @@ -5723,6 +5866,10 @@ msgstr "" msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "" +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -5770,12 +5917,11 @@ msgid "Touchscreen sensitivity multiplier." msgstr "" #: src/settings_translation_file.cpp -#, fuzzy -msgid "Touchscreen threshold" -msgstr "حساسية اللمس (بكسل):" +msgid "Tradeoffs for performance" +msgstr "" #: src/settings_translation_file.cpp -msgid "Tradeoffs for performance" +msgid "Translucent liquids" msgstr "" #: src/settings_translation_file.cpp @@ -5813,7 +5959,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 "" #: src/settings_translation_file.cpp @@ -5911,10 +6059,6 @@ msgstr "" msgid "User Interfaces" msgstr "" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "" @@ -6001,12 +6145,25 @@ msgstr "" msgid "Volume" msgstr "" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +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 +#, fuzzy +msgid "Volumetric lighting" +msgstr "إبراز العقد" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6243,12 +6400,18 @@ msgstr "" msgid "cURL parallel limit" msgstr "" +#~ msgid "- Address: " +#~ msgstr "- العنوان: " + #~ msgid "- Creative Mode: " #~ msgstr "- النمط الإبداعي: " #~ msgid "- Damage: " #~ msgstr "- التضرر: " +#~ msgid "- Port: " +#~ msgstr "- المنفذ: " + #~ msgid "2x" #~ msgstr "2x" @@ -6277,6 +6440,13 @@ msgstr "" #~ "أدرك أن هذه القيمة ستُتجاوز إذا كان حقل العنوان في القائمة الرئيسية يحوي " #~ "عنوانًا." +#~ msgid "" +#~ "Adjust dpi configuration to your screen (non X11/Android only) e.g. for " +#~ "4k screens." +#~ msgstr "" +#~ "اضبط تكوين النقطة في البوصة على شاشتك (الغير X11/Android فقط) على سبيل " +#~ "المثال. لشاشات 4K." + #~ msgid "All Settings" #~ msgstr "كل الإعدادات" @@ -6298,9 +6468,15 @@ msgstr "" #~ msgid "Bilinear Filter" #~ msgstr "مرشح خطي ثنائي" +#~ msgid "Block bounds shown for all blocks" +#~ msgstr "حدود كل الكتل ظاهرة" + #~ msgid "Bump Mapping" #~ msgstr "خريطة النتوءات" +#~ msgid "Change Keys" +#~ msgstr "غيِر المفاتيح" + #, fuzzy #~ msgid "Change keys" #~ msgstr "غيِر المفاتيح" @@ -6326,6 +6502,38 @@ msgstr "" #~ msgid "Connected Glass" #~ msgstr "زجاج متصل" +#, fuzzy, c-format +#~ msgid "" +#~ "Controls:\n" +#~ "- %s: move forwards\n" +#~ "- %s: move backwards\n" +#~ "- %s: move left\n" +#~ "- %s: move right\n" +#~ "- %s: jump/climb up\n" +#~ "- %s: dig/punch/use\n" +#~ "- %s: place/use\n" +#~ "- %s: sneak/climb down\n" +#~ "- %s: drop item\n" +#~ "- %s: inventory\n" +#~ "- Mouse: turn/look\n" +#~ "- Mouse wheel: select item\n" +#~ "- %s: chat\n" +#~ msgstr "" +#~ "أزرار التحكم:\n" +#~ "- %s: سر للأمام\n" +#~ "- %s: سر للخلف\n" +#~ "- %s: سر يسارا\n" +#~ "- %s: سر يمينا\n" +#~ "- %s: اقفز/تسلق\n" +#~ "- %s: احفر/الكم\n" +#~ "- %s: ضع/استخدم\n" +#~ "- %s: ازحف/انزل\n" +#~ "- %s: ارمي عنصر\n" +#~ "- %s: افتح المخزن\n" +#~ "- تحريك الفأرة: دوران\n" +#~ "- عجلة الفأرة: غيير العنصر\n" +#~ "- -%s: دردشة\n" + #~ msgid "Creative" #~ msgstr "إبداعي" @@ -6508,6 +6716,9 @@ msgstr "" #~ msgid "Install: file: \"$1\"" #~ msgstr "ثبت: الملف: \"$1\"" +#~ msgid "Invalid gamespec." +#~ msgstr "مواصفات اللعبة غير صالحة." + #~ msgid "Main" #~ msgstr "الرئيسية" @@ -6541,9 +6752,6 @@ msgstr "" #~ msgid "No Mipmap" #~ msgstr "بدون خريطة MIP" -#~ msgid "Node Highlighting" -#~ msgstr "إبراز العقد" - #~ msgid "Node Outlining" #~ msgstr "اقتضاب العقد" @@ -6664,8 +6872,14 @@ msgstr "" #~ msgid "You died." #~ msgstr "مِت" +#~ msgid "You have no games installed." +#~ msgstr "ليس لديك لعبة مثبتت." + #~ msgid "Z" #~ msgstr "Z" #~ msgid "needs_fallback_font" #~ msgstr "yes" + +#~ msgid "ok" +#~ msgstr "موافق" diff --git a/po/be/minetest.po b/po/be/minetest.po index 07290621e..bbc247061 100644 --- a/po/be/minetest.po +++ b/po/be/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Belarusian (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" "PO-Revision-Date: 2019-11-19 23:04+0000\n" "Last-Translator: Viktar Vauchkevich \n" "Language-Team: Belarusian ]" -msgstr "" - -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" +msgid "[all | ] [-t]" msgstr "" #: builtin/fstk/ui.lua @@ -112,6 +108,10 @@ msgstr "Адбылася памылка:" msgid "Main menu" msgstr "Галоўнае меню" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Перазлучыцца" @@ -140,183 +140,190 @@ msgstr "Мы падтрымліваем толькі $1 версію прата msgid "We support protocol versions between version $1 and $2." msgstr "Мы падтрымліваем версіі пратакола паміж $1 і $2." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." -msgstr "" +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "Failed to download \"$1\"" +msgstr "Не атрымалася спампаваць $1" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" -msgstr "" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr "Не атрымалася спампаваць $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "Усталёўка: непадтрымліваемы файл тыпу \"$1\" або сапсаваны архіў" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua #, fuzzy msgid "$1 downloading..." msgstr "Загрузка…" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "Усе пакункі" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Back to Main Menu" +msgstr "Вярнуцца ў галоўнае меню" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#, fuzzy +msgid "Downloading..." +msgstr "Загрузка…" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "Гульні" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +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 "Mods" +msgstr "Мадыфікацыі" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "Немагчыма атрымаць пакункі" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "Вынікі адсутнічаюць" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#, fuzzy +msgid "No updates" +msgstr "Абнавіць" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "Пакункі тэкстур" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "Выдаліць" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "Абнавіць" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "" + +#: 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 "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua #, fuzzy msgid "Already installed" msgstr "Клавіша ўжо выкарыстоўваецца" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Back to Main Menu" -msgstr "Вярнуцца ў галоўнае меню" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #, fuzzy msgid "Base Game:" msgstr "Гуляць (сервер)" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "Скасаваць" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "Залежнасці:" -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Downloading..." -msgstr "Загрузка…" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to download \"$1\"" -msgstr "Не атрымалася спампаваць $1" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "Не атрымалася спампаваць $1" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "Усталёўка: непадтрымліваемы файл тыпу \"$1\" або сапсаваны архіў" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "Гульні" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "Усталяваць" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #, fuzzy msgid "Install $1" msgstr "Усталяваць" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #, fuzzy msgid "Install missing dependencies" msgstr "Неабавязковыя залежнасці:" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "Загрузка…" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "Мадыфікацыі" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "Немагчыма атрымаць пакункі" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "Вынікі адсутнічаюць" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "No updates" -msgstr "Абнавіць" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #, fuzzy msgid "Not found" msgstr "Выключыць гук" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "Пакункі тэкстур" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "Выдаліць" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "Абнавіць" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" msgstr "" #: builtin/mainmenu/content/pkgmgr.lua @@ -476,12 +483,22 @@ msgstr "Стварыць" msgid "Decorations" msgstr "Ітэрацыі" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua #, fuzzy msgid "Development Test is meant for developers." msgstr "" "Увага: \"The minimal development test\" прызначаны толькі распрацоўшчыкам." +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua #, fuzzy msgid "Dungeons" @@ -864,10 +881,6 @@ msgstr "" msgid "Back" msgstr "Назад" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "Змяніць клавішы" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -877,7 +890,8 @@ msgstr "Размова" msgid "Clear" msgstr "Ачысціць" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "Кіраванне" @@ -1093,6 +1107,16 @@ msgstr "Усталяваць" msgid "Install games from ContentDB" msgstr "" +#: builtin/mainmenu/tab_local.lua +msgid "Minetest 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 " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "Новы" @@ -1127,8 +1151,8 @@ msgid "Start Game" msgstr "Пачаць гульню" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." -msgstr "У вас няма ўсталяваных гульняў." +msgid "You need to install a game before you can create a world." +msgstr "" #: builtin/mainmenu/tab_online.lua #, fuzzy @@ -1214,19 +1238,11 @@ msgstr "Загрузка тэкстур…" msgid "Rebuilding shaders..." msgstr "Перабудова шэйдэраў…" -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "Памылка злучэння (таймаут?)" - #: src/client/clientlauncher.cpp #, fuzzy msgid "Could not find or load game: " msgstr "Немагчыма знайсці ці загрузіць гульню \"" -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "Хібная спецыфікацыя гульні." - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "Галоўнае меню" @@ -1251,7 +1267,11 @@ msgstr "Не атрымалася адкрыць пададзены файл п msgid "Provided world path doesn't exist: " msgstr "Пададзены шлях не існуе: " -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "Медыя…" + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp msgid "" "\n" "Check debug.txt for details." @@ -1259,18 +1279,10 @@ msgstr "" "\n" "Падрабязней у файле debug.txt." -#: src/client/game.cpp -msgid "- Address: " -msgstr "- Адрас: " - #: src/client/game.cpp msgid "- Mode: " msgstr "- Рэжым: " -#: src/client/game.cpp -msgid "- Port: " -msgstr "- Порт: " - #: src/client/game.cpp msgid "- Public: " msgstr "- Публічны: " @@ -1306,10 +1318,6 @@ msgstr "Аўтаматычны рух наперад уключаны" msgid "Block bounds hidden" msgstr "" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "" @@ -1356,6 +1364,10 @@ msgstr "Кліентскія мадыфікацыі выключаныя" msgid "Connecting to server..." msgstr "Злучэнне з серверам…" +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "Памылка злучэння (таймаут?)" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "" @@ -1364,47 +1376,14 @@ msgstr "" msgid "Continue" msgstr "Працягнуць" -#: src/client/game.cpp -#, fuzzy, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" -"Кіраванне:\n" -"- %s: ісці ўперад\n" -"- %s: ісці назад\n" -"- %s: ісці ўлева\n" -"- %s: ісці ўправа\n" -"- %s: скакаць/караскацца\n" -"- %s: красціся/спускацца\n" -"- %s: выкінуць прадмет\n" -"- %s: інвентар\n" -"- Mouse: круціцца/глядзець\n" -"- Mouse left: капаць/прабіваць\n" -"- Mouse right: змясціць/ужыць\n" -"- Mouse wheel: абраць прадмет\n" -"- %s: размова\n" - #: src/client/game.cpp #, fuzzy msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1496,6 +1475,11 @@ msgstr "Туман адключаны" msgid "Fog enabled" msgstr "Туман уключаны" +#: src/client/game.cpp +#, fuzzy +msgid "Fog enabled by game or mod" +msgstr "Павелічэнне зараз выключана гульнёй альбо мадыфікацыяй" + #: src/client/game.cpp msgid "Game info:" msgstr "Інфармацыя пра гульню:" @@ -1516,10 +1500,6 @@ msgstr "Апісанне прадметаў…" msgid "KiB/s" msgstr "КіБ/сек" -#: src/client/game.cpp -msgid "Media..." -msgstr "Медыя…" - #: src/client/game.cpp msgid "MiB/s" msgstr "МіБ/сек" @@ -1678,10 +1658,6 @@ msgstr "Каркас паказваецца" msgid "Zoom currently disabled by game or mod" msgstr "Павелічэнне зараз выключана гульнёй альбо мадыфікацыяй" -#: src/client/game.cpp -msgid "ok" -msgstr "добра" - #: src/client/gameui.cpp #, fuzzy msgid "Chat currently disabled by game or mod" @@ -2017,6 +1993,15 @@ msgstr "Мінімапа ў рэжыме паверхні, павелічэнн msgid "Minimap in texture mode" msgstr "Мінімальны памер тэкстуры" +#: src/client/shader.cpp +#, fuzzy, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "Не атрымалася спампаваць $1" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2209,6 +2194,19 @@ msgstr "Павялічыць" msgid "press key" msgstr "націсніце кнопку" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +#, fuzzy +msgid "Unable to open URL" +msgstr "Не атрымалася спампаваць $1" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "Змяніць" @@ -2242,6 +2240,7 @@ msgstr "Гучнасць: " #. 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 "be" @@ -2461,14 +2460,6 @@ msgstr "Адлегласць адпраўлення актыўнага аб'ек msgid "Adds particles when digging a node." msgstr "Дадае часціцы пры капанні блока." -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" -"Наладка DPI (кропак на цалю) на экране\n" -"(не толькі X11/Android), напрыклад, для 4k-экранаў." - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2492,6 +2483,10 @@ msgstr "Дадаваць назвы прадметаў" msgid "Advanced" msgstr "Пашыраныя" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2548,6 +2543,17 @@ msgstr "Дадаваць назвы прадметаў у выплыўных п msgid "Apple trees noise" 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 "Arm inertia" msgstr "Інэрцыя рукі" @@ -2565,18 +2571,38 @@ msgid "Ask to reconnect after crash" msgstr "Прапанаваць перазлучыцца пасля крушэння" #: src/settings_translation_file.cpp +#, fuzzy 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 will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +msgstr "" +"На гэтай дыстанцыі сервер будзе агрэсіўна аптымізаваць блокі, якія будзе " +"адпраўляць кліентам.\n" +"Малыя значэнні патэнцыйна палепшаць працаздольнасць за кошт бачных глюкаў " +"візуалізацыі.\n" +"(некаторыя блокі не будуць адлюстроўвацца пад вадой і ў пячорах, а таксама " +"часам на сушы)\n" +"Прызначэнне гэтага значэння на больш чым max_block_send_distance адключыць " +"аптымізацыю.\n" +"Прызначаецца ў блоках мапы (16 вузлоў)." + +#: src/settings_translation_file.cpp +#, fuzzy +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 "" "На гэтай дыстанцыі сервер будзе агрэсіўна аптымізаваць блокі, якія будзе " "адпраўляць кліентам.\n" @@ -2651,6 +2677,11 @@ msgstr "Шум біёму" msgid "Biome noise" msgstr "Шум біёму" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Block cull optimize distance" +msgstr "Аптымізаваная адлегласць адпраўлення блокаў" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "Аптымізаваная адлегласць адпраўлення блокаў" @@ -2878,6 +2909,12 @@ msgstr "Каляровы туман" msgid "Colored shadows" 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -3025,10 +3062,6 @@ msgid "" "Also controls the object crosshair color" msgstr "" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "DPI (кропак на цалю)" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "Парог памеру файла журнала адладкі" @@ -3080,6 +3113,24 @@ msgid "" "but also uses more resources." 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 " +"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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" +"Забараніць падлучэнне старых кліентаў.\n" +"Старыя кліенты — тыя, што не крушацца пры злучэнні\n" +"з новымі серверамі, але яны могуць не падтрымліваць усе новыя функцыі, што " +"чакаюцца." + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "Вызначае вобласці, дзе на дрэвах ёсць яблыкі." @@ -3276,6 +3327,11 @@ msgstr "Уключыць усё" msgid "Enable Bloom Debug" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Debanding" +msgstr "Уключыць пашкоджанні" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3297,6 +3353,11 @@ msgid "" "filtering." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Post Processing" +msgstr "Уключыць джойсцікі" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "" @@ -3339,6 +3400,11 @@ msgstr "Уключыць абарону мадыфікацый" 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 "Уключыць выпадковы карыстальніцкі ўвод (толькі для тэставання)." + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "Уключыць выпадковы карыстальніцкі ўвод (толькі для тэставання)." @@ -3368,6 +3434,11 @@ msgstr "" "з новымі серверамі, але яны могуць не падтрымліваць усе новыя функцыі, што " "чакаюцца." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable touchscreen" +msgstr "Парог сэнсарнага экрана" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3379,12 +3450,6 @@ msgstr "" "Адлеглыя серверы даюць магчымасць хутчэй спампоўваць медыяфайлы (напрыклад " "тэкстуры) пры злучэнні з серверам." -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3420,6 +3485,19 @@ msgstr "Уключае анімацыю прадметаў інвентару." msgid "Enables caching of facedir rotated meshes." msgstr "Уключае кэшаванне павернутых вонкі сетак." +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -4351,9 +4429,10 @@ msgstr "" #: src/settings_translation_file.cpp #, fuzzy msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" "Працягласць цыкла сервера і інтэрвал, па якім аб'екты, як правіла, " "абнаўляюцца па сетцы." @@ -4536,10 +4615,6 @@ msgstr "" "Зрабіць колер туману і неба залежным ад часу сутак (світанак, захад) і " "напрамку погляду." -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "Робіць усе вадкасці непразрыстымі" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "" @@ -4597,11 +4672,14 @@ msgid "Map generation attributes specific to Mapgen v5." msgstr "Атрыбуты генерацыі для генератара 5." #: 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" "When the 'snowbiomes' flag is enabled jungles are automatically enabled and\n" -"the 'jungles' flag is ignored." +"the 'jungles' flag is ignored.\n" +"The 'temples' flag disables generation of desert temples. Normal dungeons " +"will appear instead." msgstr "" "Атрыбуты генерацыі мапы для генератара мапы 6.\n" "Параметр «snowbiomes» (снежныя біёмы) ўключае новую сістэму з 5 біёмамі.\n" @@ -4645,10 +4723,6 @@ msgstr "Затрымка генерацыі сеткі блокаў мапы" msgid "Mapblock mesh generation threads" msgstr "Затрымка генерацыі сеткі блокаў мапы" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "Памер кэшу блокаў у генератары сетак у МБ" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "Таймаут выгрузкі блокаў мапы" @@ -4919,6 +4993,11 @@ msgstr "" msgid "Minimap scan height" msgstr "Вышыня сканавання мінімапы" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Minimum dig repetition interval" +msgstr "Інтэрвал паўторнай пстрычкі правай кнопкі мышы" + #: src/settings_translation_file.cpp #, fuzzy msgid "Minimum limit of random number of large caves per mapchunk." @@ -4992,6 +5071,11 @@ msgstr "Адчувальнасць мышы" msgid "Mouse sensitivity multiplier." msgstr "Множнік адчувальнасці мышы." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Movement threshold" +msgstr "Парог пячор" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "Шум бруду" @@ -5140,10 +5224,6 @@ msgstr "" msgid "Occlusion Culling" msgstr "Адсячэнне аклюзіі на баку сервера" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "Непразрыстыя вадкасці" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -5158,6 +5238,11 @@ msgstr "" "Адкрыць меню паўзы калі акно страціла фокус. Не будзе працаваць калі якое-" "небудзь меню ўжо адкрыта." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "OpenGL debug" +msgstr "Генератар мапы: адладка" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "" @@ -5281,6 +5366,15 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Protocol version minimum" +msgstr "Версіі пратакола адрозніваюцца. " + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -5298,6 +5392,10 @@ msgstr "Падымае мясцовасць, каб зрабіць поймы ў msgid "Random input" msgstr "Выпадковы ўвод" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "Надаўнія паведамленні размовы" @@ -5509,8 +5607,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5653,8 +5751,9 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" "Прызначыць мову. Пакіньце пустым, каб выкарыстаць мову сістэмы.\n" @@ -5695,6 +5794,10 @@ msgid "" "Bright colors will bleed over the neighboring objects." 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 #, fuzzy msgid "Set to true to enable waving leaves." @@ -5740,11 +5843,11 @@ msgid "Shaders" msgstr "Шэйдэры" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" "Шэйдэры дазваляюць выкарыстоўваць дадатковыя візуальныя эфекты і могуць " "павялічыць\n" @@ -5833,16 +5936,6 @@ msgstr "" "Змяняць гэтае значэнне патрэбна толькі ў асаблівых сітуацыях, а ў звычайных " "рэкамендуецца пакінуць як ёсць." -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" -"Памер кэшу блокаў у генератары сетак. Павелічэнне гэтага значэння\n" -"павялічыць адсотак пераносу ў кэш, прадухіляючы капіяванне даных\n" -"з галоўнага патоку гульні, тым самым памяншаючы дрыжанне." - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "" @@ -5879,7 +5972,7 @@ msgstr "Мяккае асвятленне" #, fuzzy msgid "" "Smooths rotation of camera when in cinematic mode, 0 to disable. Enter " -"cinematic mode by using the key set in Change Keys." +"cinematic mode by using the key set in Controls." msgstr "" "Плаўнае паварочванне камеры ў кінематаграфічным рэжыме. 0 для выключэння." @@ -5904,6 +5997,15 @@ msgstr "Хуткасць крадкоў у вузлах за секунду." msgid "Soft shadow radius" msgstr "Празрыстасць цені шрыфту" +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "Гук" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sound Extensions Blacklist" +msgstr "Чорны спіс сцяжкоў ContentDB" + #: src/settings_translation_file.cpp msgid "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -6087,6 +6189,12 @@ msgstr "" "Прадвызначаны фармат захавання профіляў,\n" "пры запуску `/profiler save [format]` без вызначэння фармату." +#: 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 #, fuzzy msgid "" @@ -6094,13 +6202,27 @@ msgid "" msgstr "" "Шлях да файла адносна каталога свету, у якім будуць захоўвацца профілі." +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "Ідэнтыфікатар джойсціка для выкарыстання" #: src/settings_translation_file.cpp #, fuzzy -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" "Адлегласць у пікселях, з якой пачынаецца ўзаемадзеянне з сэнсарных экранам." @@ -6112,6 +6234,14 @@ msgid "" "Default is 1.0 (1/2 node)." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"The minimum time in seconds it takes between digging nodes when holding\n" +"the dig button." +msgstr "" +"Час у секундах паміж паўторамі падзей пры ўтрыманні правай кнопкі мышы." + #: src/settings_translation_file.cpp msgid "The network interface that the server listens on." msgstr "Сеткавы інтэрфейс, які праслухоўвае сервер." @@ -6148,7 +6278,7 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" "Рухавік адмалёўкі для Irrlicht.\n" "Пасля змены гэтага параметра спатрэбіцца перазупуск.\n" @@ -6230,6 +6360,10 @@ msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "" "Трэці з чатырох 2D-шумоў, якія разам вызначаюць межы вышыні пагоркаў/гор." +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -6286,15 +6420,15 @@ msgstr "Адчувальнасць мышы" msgid "Touchscreen sensitivity multiplier." msgstr "Множнік адчувальнасці мышы." -#: src/settings_translation_file.cpp -#, fuzzy -msgid "Touchscreen threshold" -msgstr "Парог сэнсарнага экрана" - #: src/settings_translation_file.cpp msgid "Tradeoffs for performance" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Translucent liquids" +msgstr "Непразрыстыя вадкасці" + #: src/settings_translation_file.cpp msgid "Transparency Sorting Distance" msgstr "" @@ -6334,7 +6468,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 "" #: src/settings_translation_file.cpp @@ -6451,10 +6587,6 @@ msgstr "" msgid "User Interfaces" msgstr "" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "VBO" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "Вертыкальная сінхранізацыя" @@ -6546,6 +6678,10 @@ msgstr "Дадатковая кнопка трыгераў віртуальна msgid "Volume" msgstr "Гучнасць" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +msgstr "" + #: src/settings_translation_file.cpp #, fuzzy msgid "" @@ -6555,6 +6691,16 @@ msgstr "" "Уключае паралакснае аклюзіўнае тэкстураванне.\n" "Патрабуюцца ўключаныя шэйдэры." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volume when unfocused" +msgstr "Максімальны FPS, калі гульня прыпыненая." + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volumetric lighting" +msgstr "Мяккае асвятленне" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6841,12 +6987,18 @@ msgstr "Таймаўт cURL" msgid "cURL parallel limit" msgstr "Ліміт адначасовых злучэнняў cURL" +#~ msgid "- Address: " +#~ msgstr "- Адрас: " + #~ msgid "- Creative Mode: " #~ msgstr "- Творчы рэжым: " #~ msgid "- Damage: " #~ msgstr "- Пашкоджанні: " +#~ msgid "- Port: " +#~ msgstr "- Порт: " + #~ msgid "" #~ "0 = parallax occlusion with slope information (faster).\n" #~ "1 = relief mapping (slower, more accurate)." @@ -6882,6 +7034,13 @@ msgstr "Ліміт адначасовых злучэнняў cURL" #~ "Майце на ўвазе, што поле адраса ў галоўным меню перавызначае гэты " #~ "параметр." +#~ msgid "" +#~ "Adjust dpi configuration to your screen (non X11/Android only) e.g. for " +#~ "4k screens." +#~ msgstr "" +#~ "Наладка DPI (кропак на цалю) на экране\n" +#~ "(не толькі X11/Android), напрыклад, для 4k-экранаў." + #~ msgid "" #~ "Adjust the gamma encoding for the light tables. Higher numbers are " #~ "brighter.\n" @@ -6951,6 +7110,9 @@ msgstr "Ліміт адначасовых злучэнняў cURL" #~ msgid "Center of light curve mid-boost." #~ msgstr "Цэнтр сярэдняга ўздыму крывой святла." +#~ msgid "Change Keys" +#~ msgstr "Змяніць клавішы" + #, fuzzy #~ msgid "Change keys" #~ msgstr "Змяніць клавішы" @@ -7027,6 +7189,38 @@ msgstr "Ліміт адначасовых злучэнняў cURL" #~ msgstr "" #~ "Кіруе шырынёй тунэляў. Меншае значэнне стварае больш шырокія тунэлі." +#, fuzzy, c-format +#~ msgid "" +#~ "Controls:\n" +#~ "- %s: move forwards\n" +#~ "- %s: move backwards\n" +#~ "- %s: move left\n" +#~ "- %s: move right\n" +#~ "- %s: jump/climb up\n" +#~ "- %s: dig/punch/use\n" +#~ "- %s: place/use\n" +#~ "- %s: sneak/climb down\n" +#~ "- %s: drop item\n" +#~ "- %s: inventory\n" +#~ "- Mouse: turn/look\n" +#~ "- Mouse wheel: select item\n" +#~ "- %s: chat\n" +#~ msgstr "" +#~ "Кіраванне:\n" +#~ "- %s: ісці ўперад\n" +#~ "- %s: ісці назад\n" +#~ "- %s: ісці ўлева\n" +#~ "- %s: ісці ўправа\n" +#~ "- %s: скакаць/караскацца\n" +#~ "- %s: красціся/спускацца\n" +#~ "- %s: выкінуць прадмет\n" +#~ "- %s: інвентар\n" +#~ "- Mouse: круціцца/глядзець\n" +#~ "- Mouse left: капаць/прабіваць\n" +#~ "- Mouse right: змясціць/ужыць\n" +#~ "- Mouse wheel: абраць прадмет\n" +#~ "- %s: размова\n" + #~ msgid "Creative" #~ msgstr "Творчасць" @@ -7036,6 +7230,9 @@ msgstr "Ліміт адначасовых злучэнняў cURL" #~ msgid "Crosshair color (R,G,B)." #~ msgstr "Колер перакрыжавання (R,G,B)." +#~ msgid "DPI" +#~ msgstr "DPI (кропак на цалю)" + #~ msgid "Damage" #~ msgstr "Пашкоджанні" @@ -7432,6 +7629,9 @@ msgstr "Ліміт адначасовых злучэнняў cURL" #~ msgid "Instrumentation" #~ msgstr "Інструменты" +#~ msgid "Invalid gamespec." +#~ msgstr "Хібная спецыфікацыя гульні." + #~ msgid "Inventory key" #~ msgstr "Клавіша інвентару" @@ -8130,6 +8330,9 @@ msgstr "Ліміт адначасовых злучэнняў cURL" #~ "Прымушае DirectX працаваць з LuaJIT. Выключыце, калі гэта выклікае " #~ "праблемы." +#~ msgid "Makes all liquids opaque" +#~ msgstr "Робіць усе вадкасці непразрыстымі" + #~ msgid "" #~ "Map generation attributes specific to Mapgen Carpathian.\n" #~ "Flags that are not enabled are not modified from the default.\n" @@ -8159,6 +8362,9 @@ msgstr "Ліміт адначасовых злучэнняў cURL" #~ "Нявызначаныя параметры прадвызначана не змяняюцца.\n" #~ "Параметры, што пачынаюцца з \"no\", выкарыстоўваюцца для выключэння." +#~ msgid "Mapblock mesh generator's MapBlock cache size in MB" +#~ msgstr "Памер кэшу блокаў у генератары сетак у МБ" + #~ msgid "Menus" #~ msgstr "Меню" @@ -8379,15 +8585,21 @@ msgstr "Ліміт адначасовых злучэнняў cURL" #~ msgid "Simple Leaves" #~ msgstr "Простае лісце" +#~ msgid "" +#~ "Size of the MapBlock cache of the mesh generator. Increasing this will\n" +#~ "increase the cache hit %, reducing the data being copied from the main\n" +#~ "thread, thus reducing jitter." +#~ msgstr "" +#~ "Памер кэшу блокаў у генератары сетак. Павелічэнне гэтага значэння\n" +#~ "павялічыць адсотак пераносу ў кэш, прадухіляючы капіяванне даных\n" +#~ "з галоўнага патоку гульні, тым самым памяншаючы дрыжанне." + #~ msgid "Smooth Lighting" #~ msgstr "Мяккае асвятленне" #~ msgid "Smooths rotation of camera. 0 to disable." #~ msgstr "Плаўнае паварочванне камеры. 0 для выключэння." -#~ msgid "Sound" -#~ msgstr "Гук" - #~ msgid "Special" #~ msgstr "Адмысловая" @@ -8447,6 +8659,10 @@ msgstr "Ліміт адначасовых злучэнняў cURL" #~ msgid "Touch threshold (px):" #~ msgstr "Сэнсарны парог: (px)" +#, fuzzy +#~ msgid "Touchscreen threshold" +#~ msgstr "Парог сэнсарнага экрана" + #~ msgid "Trilinear Filter" #~ msgstr "Трылінейны фільтр" @@ -8472,6 +8688,9 @@ msgstr "Ліміт адначасовых злучэнняў cURL" #~ msgid "Use bilinear filtering when scaling textures down." #~ msgstr "Выкарыстоўваць білінейную фільтрацыю пры маштабаванні тэкстур." +#~ msgid "VBO" +#~ msgstr "VBO" + #~ msgid "Variation of hill height and lake depth on floatland smooth terrain." #~ msgstr "" #~ "Варыяцыя вышыні пагоркаў і глыбінь азёр на гладкай мясцовасці лятучых " @@ -8561,8 +8780,14 @@ msgstr "Ліміт адначасовых злучэнняў cURL" #~ msgid "You died." #~ msgstr "Вы загінулі" +#~ msgid "You have no games installed." +#~ msgstr "У вас няма ўсталяваных гульняў." + #~ msgid "Z" #~ msgstr "Z" #~ msgid "needs_fallback_font" #~ msgstr "no" + +#~ msgid "ok" +#~ msgstr "добра" diff --git a/po/bg/minetest.po b/po/bg/minetest.po index e1db16a95..f83c8e50a 100644 --- a/po/bg/minetest.po +++ b/po/bg/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" "PO-Revision-Date: 2023-10-24 20:27+0000\n" "Last-Translator: 109247019824 \n" "Language-Team: Bulgarian ]" +#, fuzzy +msgid "[all | ] [-t]" msgstr "[all | <команда>]" -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" -msgstr "Добре" - #: builtin/fstk/ui.lua msgid "" msgstr "<няма достъпни>" @@ -105,6 +103,10 @@ msgstr "Възникна грешка:" msgid "Main menu" msgstr "Главно меню" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "Добре" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Повторно свързване" @@ -133,19 +135,27 @@ msgstr "Поддържаме само издание $1 на протокола. msgid "We support protocol versions between version $1 and $2." msgstr "Поддържаме само изданията на протокола между $1 и $2." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "„$1“ вече съществува. Да бъде ли презаписан?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" +msgstr "Грешка при инсталиране на „$1“: $2" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." -msgstr "$1 и $2 зависимости ще бъдат инсталирани." +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download \"$1\"" +msgstr "Грешка при изтеглянето на „$1“" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" -msgstr "$1 от $2" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr "Грешка при изтеглянето на $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "" +"Грешка при извличане на „$1“ (неподдържан вид на файл или повреден архив)" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" @@ -153,159 +163,159 @@ msgstr "" "$1 се изтеглят,\n" "$2 изчакват" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." msgstr "$1 се изтеглят…" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "$1 задължителни зависимости не могат да бъдат намерени." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "$1 ще бъдат инсталирани, а $2 зависимости ще бъдат пропуснати." - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "Всички пакети" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "Вече инсталирано" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "Главно меню" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "" +"Съдържанието от ContentDB не е налично, когато Minetest е компилиран без cURL" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "Изтегляне…" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "Игри" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +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 "Mods" +msgstr "Модификации" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "Пакетите не могат да бъдат получени" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "Няма резултати" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "Няма обновяване" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "Изчакващи" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "Пакети с текстури" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#, fuzzy +msgid "The package $1 was not found." +msgstr "Добавката $1/$2 не е намерена." + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "Премахване" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "Обновяване" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "Обновяване всички [$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 и $2 зависимости ще бъдат инсталирани." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "$1 от $2" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "$1 задължителни зависимости не могат да бъдат намерени." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "$1 ще бъдат инсталирани, а $2 зависимости ще бъдат пропуснати." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "Вече инсталирано" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "Основна игра:" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "Отказ" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "" -"Съдържанието от ContentDB не е налично, когато Minetest е компилиран без cURL" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "Зависимости:" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "Изтегляне…" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "Грешка при инсталиране на „$1“: $2" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download \"$1\"" -msgstr "Грешка при изтеглянето на „$1“" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "Грешка при изтеглянето на $1" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "" -"Грешка при извличане на „$1“ (неподдържан вид на файл или повреден архив)" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "Игри" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "Инсталиране" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "Инсталиране $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "Инсталиране на липсващи зависимости" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "Зареждане…" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "Модификации" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "Пакетите не могат да бъдат получени" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "Няма резултати" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "Няма обновяване" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "Не е намерено" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "Презаписване" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "Уверете се, че основната игра е правилна." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" -msgstr "Изчакващи" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" +msgstr "„$1“ вече съществува. Да бъде ли презаписан?" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "Пакети с текстури" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "The package $1 was not found." -msgstr "Добавката $1/$2 не е намерена." - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "Премахване" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "Обновяване" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "Обновяване всички [$1]" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "Вижте повече в браузъра" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" -msgstr "Необходимо е да инсталирате игра преди да инсталирате модификация" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" +msgstr "Презаписване" #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" @@ -454,10 +464,20 @@ msgstr "Създаване" msgid "Decorations" msgstr "Декорации" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." msgstr "Тестът за разработка е предназначен за разработчици." +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "Подземия" @@ -834,10 +854,6 @@ msgstr "" msgid "Back" msgstr "Назад" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "Промяна на клавиши" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -847,7 +863,8 @@ msgstr "Разговори" msgid "Clear" msgstr "Изчистване" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "" @@ -1062,6 +1079,16 @@ msgstr "Инсталиране $1" msgid "Install games from ContentDB" msgstr "Инсталиране на игри от ContentDB" +#: builtin/mainmenu/tab_local.lua +msgid "Minetest 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 " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "Създаване" @@ -1095,8 +1122,9 @@ msgid "Start Game" msgstr "Създаване на игра" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." -msgstr "Няма инсталирани игри." +#, fuzzy +msgid "You need to install a game before you can create a world." +msgstr "Необходимо е да инсталирате игра преди да инсталирате модификация" #: builtin/mainmenu/tab_online.lua msgid "Address" @@ -1177,18 +1205,10 @@ msgstr "Зареждане на текстури…" msgid "Rebuilding shaders..." msgstr "" -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "Грешка при свързване (изтекло време?)" - #: src/client/clientlauncher.cpp msgid "Could not find or load game: " msgstr "Играта не може да бъде намерена или заредена: " -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "" - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "Главно меню" @@ -1213,7 +1233,11 @@ msgstr "Файлът с пароли не се отваря: " msgid "Provided world path doesn't exist: " msgstr "Зададеният път към света не съществува: " -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "Медия…" + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp msgid "" "\n" "Check debug.txt for details." @@ -1221,18 +1245,10 @@ msgstr "" "\n" "Прегледайте debug.txt за повече информация." -#: src/client/game.cpp -msgid "- Address: " -msgstr "- Адрес: " - #: src/client/game.cpp msgid "- Mode: " msgstr "- Режим: " -#: src/client/game.cpp -msgid "- Port: " -msgstr "- Порт: " - #: src/client/game.cpp msgid "- Public: " msgstr "- Обществен: " @@ -1268,10 +1284,6 @@ msgstr "Автоматичното движение напред е включе msgid "Block bounds hidden" msgstr "Контурите на блоковете са скрити" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "Контурите на всички блокове са видими" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "Контурите на текущия блок са видими" @@ -1319,6 +1331,10 @@ msgstr "Изпълняване на скриптове от страната н msgid "Connecting to server..." msgstr "Свързване със сървър…" +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "Грешка при свързване (изтекло време?)" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "Грешка във връзката поради неизвестна причина" @@ -1327,46 +1343,13 @@ msgstr "Грешка във връзката поради неизвестна msgid "Continue" msgstr "Продължаване" -#: src/client/game.cpp -#, fuzzy, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" -"Управление:\n" -"- %s: движение напред\n" -"- %s: движение назад\n" -"- %s: движение наляво\n" -"- %s: движение надясно\n" -"- %s: скачане/катерене\n" -"- %s: копаене/удар\n" -"- %s: поставяне/използване\n" -"- %s: промъкване/слизане\n" -"- %s: пускане на предмет\n" -"- %s: инвентар\n" -"- мишка: завъртане/разглеждане\n" -"- колелце мишка: избор на предмет\n" -"- %s: разговор\n" - #: src/client/game.cpp msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1446,6 +1429,11 @@ msgstr "Мъглата е изключена" msgid "Fog enabled" msgstr "Мъглата е включена" +#: src/client/game.cpp +#, fuzzy +msgid "Fog enabled by game or mod" +msgstr "Мащабирането е спряно или от играта, или от модификация" + #: src/client/game.cpp msgid "Game info:" msgstr "Информация за играта:" @@ -1466,10 +1454,6 @@ msgstr "Дефиниции на предмети…" msgid "KiB/s" msgstr "" -#: src/client/game.cpp -msgid "Media..." -msgstr "Медия…" - #: src/client/game.cpp msgid "MiB/s" msgstr "" @@ -1627,10 +1611,6 @@ msgstr "Показани са телените рамки" msgid "Zoom currently disabled by game or mod" msgstr "Мащабирането е спряно или от играта, или от модификация" -#: src/client/game.cpp -msgid "ok" -msgstr "добре" - #: src/client/gameui.cpp #, fuzzy msgid "Chat currently disabled by game or mod" @@ -1961,6 +1941,15 @@ msgstr "Картата е в режим на повърхност, мащаб x% msgid "Minimap in texture mode" msgstr "Картата е в режим на текстура" +#: src/client/shader.cpp +#, fuzzy, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "Грешка при отваряне на страница" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2151,6 +2140,19 @@ msgstr "Мащабиране" msgid "press key" msgstr "избор бутон" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +#, fuzzy +msgid "Unable to open URL" +msgstr "Грешка при отваряне на страница" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "Променяне" @@ -2184,6 +2186,7 @@ msgstr "Сила на звука: %d%%" #. 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 "bg" @@ -2370,12 +2373,6 @@ msgstr "" msgid "Adds particles when digging a node." msgstr "Добавят се отломки при копане на възел." -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2399,6 +2396,10 @@ msgstr "Име на света" msgid "Advanced" msgstr "" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2454,6 +2455,17 @@ msgstr "" msgid "Apple trees noise" 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 "Arm inertia" msgstr "" @@ -2475,12 +2487,21 @@ msgid "" "clients.\n" "Small values potentially improve performance a lot, at the expense of " "visible\n" -"rendering glitches (some blocks will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +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 @@ -2545,6 +2566,10 @@ msgstr "Биоми" msgid "Biome noise" msgstr "" +#: src/settings_translation_file.cpp +msgid "Block cull optimize distance" +msgstr "" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "" @@ -2760,6 +2785,12 @@ msgstr "" msgid "Colored shadows" 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -2895,10 +2926,6 @@ msgid "" "Also controls the object crosshair color" msgstr "" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "" @@ -2948,6 +2975,19 @@ msgid "" "but also uses more resources." 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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "" @@ -3134,6 +3174,11 @@ msgstr "Включване всички" msgid "Enable Bloom Debug" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Debanding" +msgstr "Получаване на щети" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3153,6 +3198,10 @@ msgid "" "filtering." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable Post Processing" +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "" @@ -3195,6 +3244,10 @@ msgstr "" msgid "Enable mouse wheel (scroll) for item selection in hotbar." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable random mod loading (mainly used for testing)." +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3218,6 +3271,11 @@ msgid "" "expecting." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable touchscreen" +msgstr "Сензорен екран" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3226,12 +3284,6 @@ msgid "" "when connecting to the server." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3261,6 +3313,19 @@ msgstr "" msgid "Enables caching of facedir rotated meshes." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -4058,9 +4123,10 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" #: src/settings_translation_file.cpp @@ -4207,10 +4273,6 @@ msgid "" "Make fog and sky colors depend on daytime (dawn/sunset) and view direction." msgstr "" -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "" @@ -4259,7 +4321,9 @@ 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." +"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 @@ -4294,10 +4358,6 @@ msgstr "" msgid "Mapblock mesh generation threads" msgstr "Брой нишки, създаващи мрежата от блокове" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "" @@ -4540,6 +4600,10 @@ msgstr "" msgid "Minimap scan height" msgstr "" +#: src/settings_translation_file.cpp +msgid "Minimum dig repetition interval" +msgstr "" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "" @@ -4608,6 +4672,11 @@ msgstr "Чувствителност на мишката" msgid "Mouse sensitivity multiplier." msgstr "Множител на чувствителността на мишката." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Movement threshold" +msgstr "Праг на докосване: (px)" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "" @@ -4720,10 +4789,6 @@ msgstr "" msgid "Occlusion Culling" msgstr "" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -4736,6 +4801,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "OpenGL debug" +msgstr "" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "" @@ -4845,6 +4914,15 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "Съотношението на големи пещери, съдържащи течности." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Protocol version minimum" +msgstr "Изданието на протокола не съвпада. " + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -4860,6 +4938,10 @@ msgstr "" msgid "Random input" msgstr "" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "" @@ -5050,8 +5132,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5176,7 +5258,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" @@ -5209,6 +5291,10 @@ msgid "" "Bright colors will bleed over the neighboring objects." 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 "Set to true to enable waving leaves." msgstr "" @@ -5248,8 +5334,7 @@ msgstr "" msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" #: src/settings_translation_file.cpp @@ -5319,13 +5404,6 @@ msgid "" "recommended." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "" @@ -5361,7 +5439,7 @@ 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 Change Keys." +"cinematic mode by using the key set in Controls." msgstr "" #: src/settings_translation_file.cpp @@ -5382,6 +5460,15 @@ msgstr "" msgid "Soft shadow radius" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sound" +msgstr "Звукът е заглушен" + +#: src/settings_translation_file.cpp +msgid "Sound Extensions Blacklist" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -5538,17 +5625,37 @@ msgid "" "when calling `/profiler save [format]` without format." 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 "" "The file path relative to your world path in which profiles will be saved to." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "" #: src/settings_translation_file.cpp -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" #: src/settings_translation_file.cpp @@ -5559,6 +5666,12 @@ msgid "" "Default is 1.0 (1/2 node)." 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 "The network interface that the server listens on." msgstr "" @@ -5587,7 +5700,7 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" #: src/settings_translation_file.cpp @@ -5644,6 +5757,10 @@ msgstr "" msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "" +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -5695,12 +5812,11 @@ msgid "Touchscreen sensitivity multiplier." msgstr "Множител на чувствителността на мишката." #: src/settings_translation_file.cpp -#, fuzzy -msgid "Touchscreen threshold" -msgstr "Праг на докосване: (px)" +msgid "Tradeoffs for performance" +msgstr "" #: src/settings_translation_file.cpp -msgid "Tradeoffs for performance" +msgid "Translucent liquids" msgstr "" #: src/settings_translation_file.cpp @@ -5738,7 +5854,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 "" #: src/settings_translation_file.cpp @@ -5836,10 +5954,6 @@ msgstr "" msgid "User Interfaces" msgstr "Потребителски интерфейси" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "" @@ -5926,12 +6040,25 @@ msgstr "" msgid "Volume" msgstr "" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +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 +#, fuzzy +msgid "Volumetric lighting" +msgstr "Осветяване на възел" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6168,12 +6295,18 @@ msgstr "" msgid "cURL parallel limit" msgstr "" +#~ msgid "- Address: " +#~ msgstr "- Адрес: " + #~ msgid "- Creative Mode: " #~ msgstr "- Творчески режим: " #~ msgid "- Damage: " #~ msgstr "- Щети: " +#~ msgid "- Port: " +#~ msgstr "- Порт: " + #~ msgid "3D Clouds" #~ msgstr "Тримерни облаци" @@ -6186,6 +6319,12 @@ msgstr "" #~ msgid "Autosave Screen Size" #~ msgstr "Авт. запазване на размера" +#~ msgid "Block bounds shown for all blocks" +#~ msgstr "Контурите на всички блокове са видими" + +#~ msgid "Change Keys" +#~ msgstr "Промяна на клавиши" + #, fuzzy #~ msgid "Change keys" #~ msgstr "Промяна на клавиши" @@ -6199,6 +6338,38 @@ msgstr "" #~ msgid "Controls sinking speed in liquid." #~ msgstr "Управлява скоростта на потъване в течности." +#, fuzzy, c-format +#~ msgid "" +#~ "Controls:\n" +#~ "- %s: move forwards\n" +#~ "- %s: move backwards\n" +#~ "- %s: move left\n" +#~ "- %s: move right\n" +#~ "- %s: jump/climb up\n" +#~ "- %s: dig/punch/use\n" +#~ "- %s: place/use\n" +#~ "- %s: sneak/climb down\n" +#~ "- %s: drop item\n" +#~ "- %s: inventory\n" +#~ "- Mouse: turn/look\n" +#~ "- Mouse wheel: select item\n" +#~ "- %s: chat\n" +#~ msgstr "" +#~ "Управление:\n" +#~ "- %s: движение напред\n" +#~ "- %s: движение назад\n" +#~ "- %s: движение наляво\n" +#~ "- %s: движение надясно\n" +#~ "- %s: скачане/катерене\n" +#~ "- %s: копаене/удар\n" +#~ "- %s: поставяне/използване\n" +#~ "- %s: промъкване/слизане\n" +#~ "- %s: пускане на предмет\n" +#~ "- %s: инвентар\n" +#~ "- мишка: завъртане/разглеждане\n" +#~ "- колелце мишка: избор на предмет\n" +#~ "- %s: разговор\n" + #~ msgid "Creative" #~ msgstr "Творчески" @@ -6287,9 +6458,6 @@ msgstr "" #~ msgid "No Mipmap" #~ msgstr "Без миникарта" -#~ msgid "Node Highlighting" -#~ msgstr "Осветяване на възел" - #~ msgid "Node Outlining" #~ msgstr "Ограждане на възел" @@ -6394,8 +6562,14 @@ msgstr "" #~ msgid "You died." #~ msgstr "Умряхте." +#~ msgid "You have no games installed." +#~ msgstr "Няма инсталирани игри." + #~ msgid "Z" #~ msgstr "Z" #~ msgid "needs_fallback_font" #~ msgstr "no" + +#~ msgid "ok" +#~ msgstr "добре" diff --git a/po/ca/minetest.po b/po/ca/minetest.po index a59d1a59a..05110e062 100644 --- a/po/ca/minetest.po +++ b/po/ca/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Catalan (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\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" "Language-Team: Catalan ]" +#, fuzzy +msgid "[all | ] [-t]" msgstr "[tot | ]" -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" -msgstr "D'acord" - #: builtin/fstk/ui.lua msgid "" msgstr "" @@ -106,6 +104,10 @@ msgstr "S'ha produït un error:" msgid "Main menu" msgstr "Menú principal" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "D'acord" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Torneu a connectar" @@ -135,21 +137,30 @@ msgstr "Nosaltres sols suportem la versió $1 del protocol." msgid "We support protocol versions between version $1 and $2." msgstr "Nosaltres suportem versions del protocol entre la versió $1 i la $2." -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" +msgstr "Error instal·lant \"$1\": $2" + +#: builtin/mainmenu/content/contentdb.lua #, fuzzy -msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "\"$1\" ja existeix. Vols sobreescriure-la?" +msgid "Failed to download \"$1\"" +msgstr "Error al instal·lar $1 en $2" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." -msgstr "Les dependències $1 i $2 s'instal·laran ." - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua #, fuzzy -msgid "$1 by $2" -msgstr "$1 per $2" +msgid "Failed to download $1" +msgstr "Error al instal·lar $1 en $2" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "" +"\n" +"Instal·lar mod: Format de arxiu \"$1\" no suportat o arxiu corrupte" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" @@ -157,176 +168,174 @@ msgstr "" "$1 descarregant,\n" "$2 en cua" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua #, fuzzy msgid "$1 downloading..." msgstr "Carregant ..." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "$1 dependències requerides no s'han pogut trobar." - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "s'instal·laran $1, i es saltaran $2 dependències." - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua #, fuzzy msgid "All packages" msgstr "Tots els paquets" -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Already installed" -msgstr "La tecla s'està utilitzant" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua #, fuzzy msgid "Back to Main Menu" msgstr "Menú principal" -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Base Game:" -msgstr "Ocultar Joc" - -#: builtin/mainmenu/content/dlg_contentstore.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/guiPasswordChange.cpp -msgid "Cancel" -msgstr "Cancel·lar" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "ContentDB is not available when Minetest was compiled without cURL" msgstr "ContentDB no és disponible quan Minetest s'ha compilat sense cURL" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua -msgid "Dependencies:" -msgstr "Dependències:" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua #, fuzzy msgid "Downloading..." msgstr "Carregant ..." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "Error instal·lant \"$1\": $2" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to download \"$1\"" -msgstr "Error al instal·lar $1 en $2" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to download $1" -msgstr "Error al instal·lar $1 en $2" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" msgstr "" -"\n" -"Instal·lar mod: Format de arxiu \"$1\" no suportat o arxiu corrupte" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Games" msgstr "Jocs" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install" msgstr "Instal·lar" -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Install $1" -msgstr "Instal·lar" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Install missing dependencies" -msgstr "Dependències opcionals:" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua #: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp msgid "Loading..." msgstr "Carregant ..." -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Mods" msgstr "Mods" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "No packages could be retrieved" msgstr "No s'ha pogut obtenir cap paquet" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua #: builtin/mainmenu/settings/dlg_settings.lua #, fuzzy msgid "No results" msgstr "Cap resultat" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua #, fuzzy msgid "No updates" msgstr "Cap actualització" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Not found" -msgstr "No s'ha trobat" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "Sobreescriure" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Please check that the base game is correct." -msgstr "Si us plau, comproveu que el joc base és correcte." - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Queued" msgstr "En cua" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua #, fuzzy msgid "Texture packs" msgstr "Textures" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua #, fuzzy msgid "The package $1 was not found." msgstr "El paquet $1/$2 no s'ha trobat." -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua #, fuzzy msgid "Uninstall" msgstr "Instal·lar" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua msgid "Update" msgstr "Actualitza" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Update All [$1]" msgstr "Actualització Tot [$1]" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "View more information in a web browser" msgstr "Veure més informació en un navegador web" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "You need to install a game before you can install a mod" msgstr "Heu d'instal·lar un joc abans d'instal·lar un mod" +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 and $2 dependencies will be installed." +msgstr "Les dependències $1 i $2 s'instal·laran ." + +#: builtin/mainmenu/content/dlg_install.lua +#, fuzzy +msgid "$1 by $2" +msgstr "$1 per $2" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "$1 dependències requerides no s'han pogut trobar." + +#: builtin/mainmenu/content/dlg_install.lua +#, fuzzy +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "s'instal·laran $1, i es saltaran $2 dependències." + +#: builtin/mainmenu/content/dlg_install.lua +#, fuzzy +msgid "Already installed" +msgstr "La tecla s'està utilitzant" + +#: builtin/mainmenu/content/dlg_install.lua +#, fuzzy +msgid "Base Game:" +msgstr "Ocultar Joc" + +#: 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 "Cancel·lar" + +#: builtin/mainmenu/content/dlg_install.lua +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua +msgid "Dependencies:" +msgstr "Dependències:" + +#: builtin/mainmenu/content/dlg_install.lua +#, fuzzy +msgid "Install $1" +msgstr "Instal·lar" + +#: builtin/mainmenu/content/dlg_install.lua +#, fuzzy +msgid "Install missing dependencies" +msgstr "Dependències opcionals:" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Not found" +msgstr "No s'ha trobat" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Please check that the base game is correct." +msgstr "Si us plau, comproveu que el joc base és correcte." + +#: builtin/mainmenu/content/dlg_overwrite.lua +#, fuzzy +msgid "\"$1\" already exists. Would you like to overwrite it?" +msgstr "\"$1\" ja existeix. Vols sobreescriure-la?" + +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" +msgstr "Sobreescriure" + #: builtin/mainmenu/content/pkgmgr.lua #, fuzzy msgid "$1 (Enabled)" @@ -492,6 +501,10 @@ msgstr "Crear" msgid "Decorations" msgstr "Informació del mod:" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua #, fuzzy msgid "Development Test is meant for developers." @@ -499,6 +512,12 @@ msgstr "" "Advertència: El joc \"Minimal development test\" esta dissenyat per a " "desenvolupadors." +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua #, fuzzy msgid "Dungeons" @@ -879,10 +898,6 @@ msgstr "" msgid "Back" msgstr "Enrere" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "Configurar Controls" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -892,7 +907,8 @@ msgstr "Xat" msgid "Clear" msgstr "Netejar" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "Controls" @@ -1112,6 +1128,16 @@ msgstr "Instal·lar" msgid "Install games from ContentDB" msgstr "" +#: builtin/mainmenu/tab_local.lua +msgid "Minetest 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 " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "Nou" @@ -1148,8 +1174,8 @@ msgstr "Ocultar Joc" #: builtin/mainmenu/tab_local.lua #, fuzzy -msgid "You have no games installed." -msgstr "No tens subjocs instal·lats." +msgid "You need to install a game before you can create a world." +msgstr "Heu d'instal·lar un joc abans d'instal·lar un mod" #: builtin/mainmenu/tab_online.lua #, fuzzy @@ -1236,19 +1262,11 @@ msgstr "Carregant textures ..." msgid "Rebuilding shaders..." msgstr "Reconstruint ombreig ..." -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "Error de connexió (¿temps esgotat?)" - #: src/client/clientlauncher.cpp #, fuzzy msgid "Could not find or load game: " msgstr "No es pot trobar o carregar el joc \"" -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "El Joc especificat no és vàlid." - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "Menú principal" @@ -1273,7 +1291,11 @@ msgstr "" msgid "Provided world path doesn't exist: " msgstr "La ruta del món especificat no existeix: " -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "Media ..." + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp msgid "" "\n" "Check debug.txt for details." @@ -1281,20 +1303,10 @@ msgstr "" "\n" "Comprovi debug.txt per a detalls." -#: src/client/game.cpp -#, fuzzy -msgid "- Address: " -msgstr "Adreça BIND" - #: src/client/game.cpp msgid "- Mode: " msgstr "" -#: src/client/game.cpp -#, fuzzy -msgid "- Port: " -msgstr "Port" - #: src/client/game.cpp #, fuzzy msgid "- Public: " @@ -1333,10 +1345,6 @@ msgstr "Tecla Avançar" msgid "Block bounds hidden" msgstr "" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "" @@ -1386,6 +1394,10 @@ msgstr "" msgid "Connecting to server..." msgstr "Connectant al servidor ..." +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "Error de connexió (¿temps esgotat?)" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "" @@ -1394,44 +1406,14 @@ msgstr "" msgid "Continue" msgstr "Continuar" -#: src/client/game.cpp -#, fuzzy, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" -"Controls predeterminats:\n" -"- WASD: moure\n" -"- Espai: botar / pujar\n" -"- Maj .: puntetes / baixar\n" -"- Q: deixar anar objecte\n" -"- I: inventari\n" -"- Ratolí: girar / mirar\n" -"- Ratolí esq .: excavar / colpejar\n" -"- Ratolí dre .: col·locar / utilitzar\n" -"- Roda ratolí: triar objecte\n" -"- T: xat\n" - #: src/client/game.cpp #, fuzzy msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1528,6 +1510,10 @@ msgstr "Desactivat" msgid "Fog enabled" msgstr "Activat" +#: src/client/game.cpp +msgid "Fog enabled by game or mod" +msgstr "" + #: src/client/game.cpp msgid "Game info:" msgstr "" @@ -1550,10 +1536,6 @@ msgstr "Definicions d'objectes ..." msgid "KiB/s" msgstr "KiB/s" -#: src/client/game.cpp -msgid "Media..." -msgstr "Media ..." - #: src/client/game.cpp msgid "MiB/s" msgstr "MiB/s" @@ -1714,10 +1696,6 @@ msgstr "" msgid "Zoom currently disabled by game or mod" msgstr "" -#: src/client/game.cpp -msgid "ok" -msgstr "Acceptar" - #: src/client/gameui.cpp msgid "Chat currently disabled by game or mod" msgstr "" @@ -2059,6 +2037,15 @@ msgstr "" msgid "Minimap in texture mode" msgstr "" +#: src/client/shader.cpp +#, fuzzy, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "Error al instal·lar $1 en $2" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2261,6 +2248,19 @@ msgstr "Zoom" msgid "press key" msgstr "Premsa una tecla" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +#, fuzzy +msgid "Unable to open URL" +msgstr "Error al instal·lar $1 en $2" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "Canviar" @@ -2295,6 +2295,7 @@ msgstr "Volum de so: " #. 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 "ca" @@ -2503,14 +2504,6 @@ msgstr "Rang d'enviament de l'objecte actiu" msgid "Adds particles when digging a node." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" -"Ajustar la configuració de punts per polsada (dpi) a la teva pantalla (no " -"X11/Sols Android) Ex. per a pantalles amb 4K." - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2534,6 +2527,10 @@ msgstr "Nom del món" msgid "Advanced" msgstr "Avançat" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2592,6 +2589,17 @@ msgstr "" msgid "Apple trees noise" 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 "Arm inertia" msgstr "" @@ -2613,12 +2621,21 @@ msgid "" "clients.\n" "Small values potentially improve performance a lot, at the expense of " "visible\n" -"rendering glitches (some blocks will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +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 @@ -2686,6 +2703,10 @@ msgstr "" msgid "Biome noise" msgstr "" +#: src/settings_translation_file.cpp +msgid "Block cull optimize distance" +msgstr "" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "" @@ -2916,6 +2937,12 @@ msgstr "Boira de color" msgid "Colored shadows" msgstr "Boira de color" +#: 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -3061,10 +3088,6 @@ msgid "" "Also controls the object crosshair color" msgstr "" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "DPI (punts per polsada)" - #: src/settings_translation_file.cpp #, fuzzy msgid "Debug log file size threshold" @@ -3116,6 +3139,19 @@ msgid "" "but also uses more resources." 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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "" @@ -3305,6 +3341,11 @@ msgstr "Activar tot" msgid "Enable Bloom Debug" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Debanding" +msgstr "Permetre Danys" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3324,6 +3365,10 @@ msgid "" "filtering." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable Post Processing" +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "" @@ -3366,6 +3411,11 @@ msgstr "" 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 "Habilitar l'entrada aleatòria d'usuari (només utilitzat per testing)." + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "Habilitar l'entrada aleatòria d'usuari (només utilitzat per testing)." @@ -3389,6 +3439,11 @@ msgid "" "expecting." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable touchscreen" +msgstr "Llindar tàctil (px)" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3397,12 +3452,6 @@ msgid "" "when connecting to the server." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3432,6 +3481,19 @@ msgstr "" msgid "Enables caching of facedir rotated meshes." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -4239,9 +4301,10 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" #: src/settings_translation_file.cpp @@ -4391,10 +4454,6 @@ msgid "" "Make fog and sky colors depend on daytime (dawn/sunset) and view direction." msgstr "" -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "" @@ -4443,7 +4502,9 @@ 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." +"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 @@ -4478,10 +4539,6 @@ msgstr "" msgid "Mapblock mesh generation threads" msgstr "" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "" @@ -4733,6 +4790,11 @@ msgstr "" msgid "Minimap scan height" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Minimum dig repetition interval" +msgstr "Interval de repetició del click dret" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "" @@ -4801,6 +4863,11 @@ msgstr "Sensibilitat del ratolí" msgid "Mouse sensitivity multiplier." msgstr "Multiplicador de sensibilitat del ratolí." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Movement threshold" +msgstr "Llindar tàctil (px)" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "" @@ -4910,10 +4977,6 @@ msgstr "" msgid "Occlusion Culling" msgstr "" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -4926,6 +4989,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "OpenGL debug" +msgstr "" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "" @@ -5037,6 +5104,15 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Protocol version minimum" +msgstr "Desajust de la versió del protocol. " + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -5052,6 +5128,10 @@ msgstr "" msgid "Random input" msgstr "Entrada aleatòria" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "" @@ -5246,8 +5326,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5388,7 +5468,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" @@ -5421,6 +5501,10 @@ msgid "" "Bright colors will bleed over the neighboring objects." 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 "Set to true to enable waving leaves." msgstr "" @@ -5461,8 +5545,7 @@ msgstr "Ombres" msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" #: src/settings_translation_file.cpp @@ -5532,13 +5615,6 @@ msgid "" "recommended." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "" @@ -5575,7 +5651,7 @@ msgstr "" #, fuzzy msgid "" "Smooths rotation of camera when in cinematic mode, 0 to disable. Enter " -"cinematic mode by using the key set in Change Keys." +"cinematic mode by using the key set in Controls." msgstr "" "Suavitza la rotació de la càmera en mode cinematogràfic. 0 per deshabilitar." @@ -5601,6 +5677,15 @@ msgstr "" msgid "Soft shadow radius" msgstr "Radi del núvol" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sound" +msgstr "Volum del so" + +#: src/settings_translation_file.cpp +msgid "Sound Extensions Blacklist" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -5758,17 +5843,37 @@ msgid "" "when calling `/profiler save [format]` without format." 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 "" "The file path relative to your world path in which profiles will be saved to." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "" #: src/settings_translation_file.cpp -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" #: src/settings_translation_file.cpp @@ -5779,6 +5884,15 @@ msgid "" "Default is 1.0 (1/2 node)." msgstr "" +#: 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 temps en segons que es pren entre la repetició de clicks drets quan " +"s'està mantenint el botó dret del ratolí." + #: src/settings_translation_file.cpp msgid "The network interface that the server listens on." msgstr "" @@ -5805,7 +5919,7 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" #: src/settings_translation_file.cpp @@ -5868,6 +5982,10 @@ msgstr "" msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "" +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -5917,15 +6035,15 @@ msgstr "Sensibilitat del ratolí" msgid "Touchscreen sensitivity multiplier." msgstr "Multiplicador de sensibilitat del ratolí." -#: src/settings_translation_file.cpp -#, fuzzy -msgid "Touchscreen threshold" -msgstr "Llindar tàctil (px)" - #: src/settings_translation_file.cpp msgid "Tradeoffs for performance" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Translucent liquids" +msgstr "Moviment de les Fulles" + #: src/settings_translation_file.cpp msgid "Transparency Sorting Distance" msgstr "" @@ -5961,7 +6079,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 "" #: src/settings_translation_file.cpp @@ -6060,10 +6180,6 @@ msgstr "" msgid "User Interfaces" msgstr "" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "" @@ -6151,12 +6267,25 @@ msgstr "" msgid "Volume" msgstr "" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +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 +#, fuzzy +msgid "Volumetric lighting" +msgstr "Node ressaltat" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6401,6 +6530,10 @@ msgstr "" msgid "cURL parallel limit" msgstr "" +#, fuzzy +#~ msgid "- Address: " +#~ msgstr "Adreça BIND" + #, fuzzy #~ msgid "- Creative Mode: " #~ msgstr "Mode Creatiu" @@ -6409,6 +6542,10 @@ msgstr "" #~ msgid "- Damage: " #~ msgstr "Dany" +#, fuzzy +#~ msgid "- Port: " +#~ msgstr "Port" + #~ msgid "" #~ "0 = parallax occlusion with slope information (faster).\n" #~ "1 = relief mapping (slower, more accurate)." @@ -6444,6 +6581,13 @@ msgstr "" #~ "Tingueu en compte que el camp d'adreça en el menú principal invalida " #~ "aquest paràmetre." +#~ msgid "" +#~ "Adjust dpi configuration to your screen (non X11/Android only) e.g. for " +#~ "4k screens." +#~ msgstr "" +#~ "Ajustar la configuració de punts per polsada (dpi) a la teva pantalla (no " +#~ "X11/Sols Android) Ex. per a pantalles amb 4K." + #, fuzzy #~ msgid "" #~ "Adjust the gamma encoding for the light tables. Higher numbers are " @@ -6495,6 +6639,9 @@ msgstr "" #~ msgid "Camera update toggle key" #~ msgstr "Tecla alternativa per a l'actualització de la càmera" +#~ msgid "Change Keys" +#~ msgstr "Configurar Controls" + #, fuzzy #~ msgid "Change keys" #~ msgstr "Configurar Controls" @@ -6536,6 +6683,35 @@ msgstr "" #~ msgstr "" #~ "Controla l'amplada dels túnels, un valor més petit crea túnels més amples." +#, fuzzy, c-format +#~ msgid "" +#~ "Controls:\n" +#~ "- %s: move forwards\n" +#~ "- %s: move backwards\n" +#~ "- %s: move left\n" +#~ "- %s: move right\n" +#~ "- %s: jump/climb up\n" +#~ "- %s: dig/punch/use\n" +#~ "- %s: place/use\n" +#~ "- %s: sneak/climb down\n" +#~ "- %s: drop item\n" +#~ "- %s: inventory\n" +#~ "- Mouse: turn/look\n" +#~ "- Mouse wheel: select item\n" +#~ "- %s: chat\n" +#~ msgstr "" +#~ "Controls predeterminats:\n" +#~ "- WASD: moure\n" +#~ "- Espai: botar / pujar\n" +#~ "- Maj .: puntetes / baixar\n" +#~ "- Q: deixar anar objecte\n" +#~ "- I: inventari\n" +#~ "- Ratolí: girar / mirar\n" +#~ "- Ratolí esq .: excavar / colpejar\n" +#~ "- Ratolí dre .: col·locar / utilitzar\n" +#~ "- Roda ratolí: triar objecte\n" +#~ "- T: xat\n" + #, fuzzy #~ msgid "Creative" #~ msgstr "Crear" @@ -6546,6 +6722,9 @@ msgstr "" #~ msgid "Crosshair color (R,G,B)." #~ msgstr "Color del punt de mira (R, G, B)." +#~ msgid "DPI" +#~ msgstr "DPI (punts per polsada)" + #~ msgid "Damage" #~ msgstr "Dany" @@ -6638,6 +6817,9 @@ msgstr "" #~ msgid "Install: file: \"$1\"" #~ msgstr "Instal·lar mod: Arxiu: \"$1\"" +#~ msgid "Invalid gamespec." +#~ msgstr "El Joc especificat no és vàlid." + #~ msgid "Inventory key" #~ msgstr "Tecla Inventari" @@ -7237,9 +7419,6 @@ msgstr "" #~ msgid "No Mipmap" #~ msgstr "Sense MipMap" -#~ msgid "Node Highlighting" -#~ msgstr "Node ressaltat" - #~ msgid "Node Outlining" #~ msgstr "Nodes ressaltats" @@ -7375,5 +7554,12 @@ msgstr "" #~ msgid "You died." #~ msgstr "Has mort." +#, fuzzy +#~ msgid "You have no games installed." +#~ msgstr "No tens subjocs instal·lats." + #~ msgid "needs_fallback_font" #~ msgstr "no" + +#~ msgid "ok" +#~ msgstr "Acceptar" diff --git a/po/cs/minetest.po b/po/cs/minetest.po index b8826bac3..5675eb55f 100644 --- a/po/cs/minetest.po +++ b/po/cs/minetest.po @@ -2,17 +2,17 @@ msgid "" msgstr "" "Project-Id-Version: Czech (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" -"PO-Revision-Date: 2023-06-19 10:48+0000\n" -"Last-Translator: Robinson \n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" +"PO-Revision-Date: 2024-08-02 22:09+0000\n" +"Last-Translator: Honzapkcz \n" "Language-Team: Czech \n" "Language: cs\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 4.18.1\n" +"Plural-Forms: nplurals=3; plural=((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2);\n" +"X-Generator: Weblate 5.7-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -71,7 +71,8 @@ msgid "Command not available: " msgstr "Příkaz není k dispozici: " #: builtin/common/chatcommands.lua -msgid "Get help for commands" +#, fuzzy +msgid "Get help for commands (-t: output in chat)" msgstr "Získat nápovědu pro příkazy" #: builtin/common/chatcommands.lua @@ -82,13 +83,10 @@ msgstr "" "pro celý výpis." #: builtin/common/chatcommands.lua -msgid "[all | ]" +#, fuzzy +msgid "[all | ] [-t]" msgstr "[all | ]" -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" -msgstr "Dobře" - #: builtin/fstk/ui.lua msgid "" msgstr "" @@ -105,6 +103,10 @@ msgstr "Nastala chyba:" msgid "Main menu" msgstr "Hlavní nabídka" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "Dobře" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Znovu se připojit" @@ -133,19 +135,28 @@ msgstr "Podporujeme pouze protokol verze $1." msgid "We support protocol versions between version $1 and $2." msgstr "Podporujeme verze protokolů mezi $1 a $2." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "\"$1\" již existuje. Chcete jej přepsat?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" +msgstr "Chyba při instalování $1\": $2" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." -msgstr "Nainstaluje se $1 a $2 závislostí." +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download \"$1\"" +msgstr "Selhalo stažení „$1“" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" -msgstr "$1 od $2" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr "Selhalo stažení $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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)" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" @@ -153,159 +164,158 @@ msgstr "" "$1 se stahuje,\n" "$2 čeká ve frontě" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." msgstr "$1 se stahuje..." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "$1 nutných závislostí nebylo nalezeno." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "$1 závislostí bude nainstalováno a $2 bude vynecháno." - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "Všechny balíčky" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "Již nainstalováno" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "Zpět do hlavní nabídky" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "" +"ContentDB není přístupná pokud byl Minetest kompilován bez použití cURL" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "Stahuji..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "Chyba získávání závislostí balíčku" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "Hry" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +msgstr "Instalovat" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp +msgid "Loading..." +msgstr "Načítaní..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Mods" +msgstr "Mody" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "Nelze načíst žádný balíček" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "Žádné výsledky" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "Žádné aktualizace" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "Ve frontě" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "Balíčky textur" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "Balíček $1 nebyl nalezen." + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "Odinstalovat" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "Aktualizovat" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "Aktualizovat vše [$1]" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "View more information in a web browser" +msgstr "Zobrazit více informací v prohlížeči" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "You need to install a game before you can install a mod" +msgstr "Musíš nainstalovat hru před tím než budeš moct instalovat mod" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 and $2 dependencies will be installed." +msgstr "Nainstaluje se $1 a $2 závislostí." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "$1 od $2" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "$1 nutných závislostí nebylo nalezeno." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "$1 závislostí bude nainstalováno a $2 bude vynecháno." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "Již nainstalováno" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "Základní hra:" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "Zrušit" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "" -"ContentDB není přístupná pokud byl Minetest kompilován bez použití cURL" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "Závislosti:" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "Stahuji..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "Chyba při instalování $1\": $2" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download \"$1\"" -msgstr "Selhalo stažení „$1“" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "Selhalo stažení $1" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "" -"Nepodařilo se rozbalit „$1“ (nepodporovaný typ souboru, nebo poškozený " -"archiv)" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "Hry" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "Instalovat" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "Instalovat $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "Instalovat chybějící závislosti" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "Načítaní..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "Mody" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "Nelze načíst žádný balíček" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "Žádné výsledky" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "Žádné aktualizace" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "Nenalezeno" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "Přepsat" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "Ověř prosím, zda je základní hra v pořádku." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" -msgstr "Ve frontě" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" +msgstr "\"$1\" již existuje. Chcete jej přepsat?" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "Balíčky textur" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "Odinstalovat" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "Aktualizovat" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "Aktualizovat vše [$1]" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "Zobrazit více informací v prohlížeči" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" -msgstr "" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" +msgstr "Přepsat" #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" @@ -453,10 +463,22 @@ msgstr "Vytvořit" msgid "Decorations" msgstr "Dekorace" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "Pouštní chrámy" + #: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." msgstr "Development Test je určen pro vývojáře." +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" +"Různé varianty žalářů generované v pouštních biomech (pouze když jsou žaláře " +"povoleny)" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "Žaláře" @@ -651,7 +673,7 @@ msgstr "Registrovat" #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "Dismiss" -msgstr "" +msgstr "Odmítnout" #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "" @@ -659,16 +681,20 @@ msgid "" "\"Minetest Game\". Since Minetest 5.8.0, Minetest ships without a default " "game." msgstr "" +"Po dlouhou dobu, Minetest engine byl dodáván s výchozí hrou „Minetest hra“. " +"Od verze 5.8.0 už Minetest s touto hrou dodáván není." #: 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 "" +"Pokud chceš pokračovat v hraní tvých světů Menetest Hry, tak si ji musíš " +"přeinstalovat." #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "Minetest Game is no longer installed by default" -msgstr "" +msgstr "Minetest Hra už není instalována jako výchozí" #: builtin/mainmenu/dlg_reinstall_mtg.lua #, fuzzy @@ -821,20 +847,16 @@ msgstr "vyhlazení" #: builtin/mainmenu/settings/dlg_settings.lua msgid "(Use system language)" -msgstr "" +msgstr "(Použít jazyk systému)" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Accessibility" -msgstr "" +msgstr "Přístupnost" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Back" msgstr "Zpět" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "Změnit klávesy" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -844,7 +866,8 @@ msgstr "Chat" msgid "Clear" msgstr "Vyčistit" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "Ovládání" @@ -864,7 +887,7 @@ msgstr "Obnovit výchozí" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Reset setting to default ($1)" -msgstr "" +msgstr "Vrátit nastavení do původního stavu ($1)" #: builtin/mainmenu/settings/dlg_settings.lua builtin/mainmenu/tab_online.lua msgid "Search" @@ -872,7 +895,7 @@ msgstr "Vyhledat" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Show advanced settings" -msgstr "" +msgstr "Zobrazit pokročilé nastavení" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Show technical names" @@ -892,11 +915,11 @@ msgstr "Obsah: mody" #: builtin/mainmenu/settings/shadows_component.lua msgid "(The game will need to enable shadows as well)" -msgstr "" +msgstr "(Hra bude muset také povolit stíny)" #: builtin/mainmenu/settings/shadows_component.lua msgid "Custom" -msgstr "" +msgstr "Vlastní" #: builtin/mainmenu/settings/shadows_component.lua msgid "Disabled" @@ -949,7 +972,7 @@ msgstr "Hlavní členové týmu" #: builtin/mainmenu/tab_about.lua msgid "Irrlicht device:" -msgstr "" +msgstr "Irrlicht zařízení:" #: builtin/mainmenu/tab_about.lua msgid "Open User Data Directory" @@ -1054,6 +1077,16 @@ msgstr "Instalovat hru" msgid "Install games from ContentDB" msgstr "Instalovat hry z ContentDB" +#: builtin/mainmenu/tab_local.lua +msgid "Minetest doesn't come with a game by default." +msgstr "Minetest není dodáván s výchozí hrou." + +#: builtin/mainmenu/tab_local.lua +msgid "" +"Minetest is a game-creation platform that allows you to play many different " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "Nový" @@ -1087,8 +1120,8 @@ msgid "Start Game" msgstr "Spuštění hry" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." -msgstr "Nemáte nainstalované žádné hry." +msgid "You need to install a game before you can create a world." +msgstr "Musíš si nainstalovat hru před tím než si můžeš vytvořit svět." #: builtin/mainmenu/tab_online.lua msgid "Address" @@ -1167,18 +1200,10 @@ msgstr "Načítám textury..." msgid "Rebuilding shaders..." msgstr "Sestavuji shadery..." -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "Chyba spojení (vypršel čas?)" - #: src/client/clientlauncher.cpp msgid "Could not find or load game: " msgstr "Hru nebylo možné najít nebo načíst: " -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "Neplatná specifikace hry." - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "Hlavní nabídka" @@ -1204,7 +1229,11 @@ msgstr "Soubor s heslem nebylo možné otevřít: " msgid "Provided world path doesn't exist: " msgstr "Uvedená cesta ke světu neexistuje: " -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "Média..." + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp msgid "" "\n" "Check debug.txt for details." @@ -1212,18 +1241,10 @@ msgstr "" "\n" "Detaily naleznete v souboru debug.txt." -#: src/client/game.cpp -msgid "- Address: " -msgstr "- Adresa: " - #: src/client/game.cpp msgid "- Mode: " msgstr "- Mód: " -#: src/client/game.cpp -msgid "- Port: " -msgstr "- Port: " - #: src/client/game.cpp msgid "- Public: " msgstr "- Veřejný: " @@ -1258,10 +1279,6 @@ msgstr "Automatický posun vpřed povolen" msgid "Block bounds hidden" msgstr "Ohraničení bloku skryto" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "Zobrazit hranice bloku u všech bloků" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "Zobrazit hranice bloku u aktuálního bloku" @@ -1307,6 +1324,10 @@ msgstr "Uživatelské skripty nejsou povoleny" msgid "Connecting to server..." msgstr "Připojuji se k serveru..." +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "Chyba spojení (vypršel čas?)" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "Spojení selhalo z neznámého důvodu" @@ -1315,47 +1336,14 @@ msgstr "Spojení selhalo z neznámého důvodu" msgid "Continue" msgstr "Pokračovat" -#: src/client/game.cpp -#, fuzzy, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" -"Ovládání:\n" -"- %s: pohyb dopředu\n" -"- %s: pohyb dozadu\n" -"- %s: pohyb doleva\n" -"- %s: pohyb doprava\n" -"- %s: skok/výstup\n" -"- %s: těžit/uhodit\n" -"- %s: umístit/použít\n" -"- %s: plížení/sestup\n" -"- %s: zahození předmětu\n" -"- %s: inventář\n" -"- Myš: otáčení/rozhlížení\n" -"- Kolečko myši: výběr předmětu\n" -"- %s: chat\n" - #: src/client/game.cpp #, fuzzy msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1447,6 +1435,11 @@ msgstr "Mlha je zakázána" 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" + #: src/client/game.cpp msgid "Game info:" msgstr "Informace o hře:" @@ -1467,10 +1460,6 @@ msgstr "Definice věcí..." msgid "KiB/s" msgstr "KiB/s" -#: src/client/game.cpp -msgid "Media..." -msgstr "Média..." - #: src/client/game.cpp msgid "MiB/s" msgstr "MiB/s" @@ -1628,10 +1617,6 @@ msgstr "Obrysy zobrazeny" msgid "Zoom currently disabled by game or mod" msgstr "Přiblížení je aktuálně zakázáno" -#: src/client/game.cpp -msgid "ok" -msgstr "OK" - #: src/client/gameui.cpp msgid "Chat currently disabled by game or mod" msgstr "Chat je zakázaný hrou, nebo modem" @@ -1696,7 +1681,7 @@ msgstr "Vymazat" #: src/client/keycode.cpp msgid "Down Arrow" -msgstr "" +msgstr "Šipka Dolů" #: src/client/keycode.cpp msgid "End" @@ -1932,7 +1917,7 @@ msgstr "Tabulátor" #: src/client/keycode.cpp msgid "Up Arrow" -msgstr "" +msgstr "Šipka Nahoru" #: src/client/keycode.cpp msgid "X Button 1" @@ -1965,6 +1950,15 @@ msgstr "Minimapa v režimu Povrch, Přiblížení x%d" msgid "Minimap in texture mode" msgstr "Minimapa v režimu Textura" +#: src/client/shader.cpp +#, fuzzy, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "Nepodařilo se otevřít webovou stránku" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "Shadery jsou povoleny ale GLSL není podporovaný driverem." + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2157,6 +2151,19 @@ msgstr "Přiblížení" msgid "press key" msgstr "stiskni klávesu" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "Otevřít" + +#: src/gui/guiOpenURL.cpp +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" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "Změnit" @@ -2190,6 +2197,7 @@ msgstr "Hlasitost: %d%%" #. 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 "cs" @@ -2277,7 +2285,7 @@ msgstr "2D šum, který umisťuje říční koryta a kanály." #: src/settings_translation_file.cpp msgid "3D" -msgstr "" +msgstr "3D" #: src/settings_translation_file.cpp msgid "3D clouds" @@ -2412,14 +2420,6 @@ msgstr "Odesílací rozsah aktivních bloků" msgid "Adds particles when digging a node." msgstr "Aktivuje částicové efekty při těžení bloku." -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" -"Upraví nastavení DPI pro vaši obrazovku (není pro X11/Android). Pro použití " -"například s 4k obrazovkami." - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2449,6 +2449,10 @@ msgstr "Jméno správce" msgid "Advanced" msgstr "Pokročilé" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "Povolí průhledné kapaliny." + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2509,6 +2513,17 @@ msgstr "Dodatkový název položky v popisku." msgid "Apple trees noise" msgstr "Použít stromový šum" +#: 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 "Arm inertia" msgstr "Setrvačnost ruky" @@ -2526,18 +2541,37 @@ 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" "clients.\n" "Small values potentially improve performance a lot, at the expense of " "visible\n" -"rendering glitches (some blocks will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"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" +"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" +"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 "" "V této vzdálenosti bude server razantně optimalizovat výběr bloků,\n" "které pošle klientům.\n" @@ -2610,6 +2644,11 @@ msgstr "Biomy" 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" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "Optimalizace vzdálenosti vysílání bloku" @@ -2828,6 +2867,15 @@ msgstr "Barevná mlha" msgid "Colored shadows" msgstr "Zbarvené stíny" +#: 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 "" +"Čárkou oddělený seznam všech AL a ALC rozšíření které by něměly být použity." +"\n" +"Užitečné pro testování. Podívejte se do al_extensions.[h,cpp] pro detaily." + #: src/settings_translation_file.cpp msgid "" "Comma-separated list of flags to hide in the content repository.\n" @@ -2992,10 +3040,6 @@ msgstr "" "Barva zaměřovače (R,G,B).\n" "Také určuje barvu zaměřovače" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "DPI" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "Práh velikosti souboru s ladícími informacemi" @@ -3050,6 +3094,24 @@ msgstr "" "Simuluje efekt měkkých stínů použitím PCF nebo Poissonova disku,\n" "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 " +"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" +"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" +"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." + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "Určuje oblasti, kde stromy nesou plody." @@ -3250,6 +3312,11 @@ msgstr "Zapnout shader „Bloom“" msgid "Enable Bloom Debug" msgstr "Povolit ladění shaderu „Bloom“" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Debanding" +msgstr "Povolit zranění" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3276,6 +3343,11 @@ msgstr "" "Pokud je zapnuto, využívá Poissonův disk pro generování \"měkkých stínů\". V " "opačném případě je využito filtrování PCF." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Post Processing" +msgstr "Post processing" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "Povolit „Raytraced Culling“" @@ -3325,6 +3397,11 @@ msgstr "Zapnout zabezpečení módů" 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 "Povolit náhodný uživatelský vstup (pouze pro testování)." + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "Povolit náhodný uživatelský vstup (pouze pro testování)." @@ -3354,6 +3431,11 @@ msgstr "" "serverům\n" "nehavarují, ale nemusí podporovat všechny vlastnosti, které byste očekával/a." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable touchscreen" +msgstr "Dotyková obrazovka" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3365,14 +3447,6 @@ msgstr "" "Vzdálené servery nabízejí výrazně rychlejší způsob, jak stáhnout\n" "média (např. textury) při připojování k serveru." -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" -"Zapnout objekty vyrovnávací paměti vertexů.\n" -"Toto by mělo výrazně zlepšit grafický výkon." - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3411,6 +3485,19 @@ msgstr "Povolí animaci věcí v inventáři." msgid "Enables caching of facedir rotated meshes." 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 "" + +#: 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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -4346,10 +4433,12 @@ msgstr "" "- Neprůhledné: vypne průhlednost" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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" @@ -4526,10 +4615,6 @@ msgstr "" "Barva mlhy a oblohy záleží na denní době (svítání/soumrak) a na směru " "pohledu." -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "Udělá všechny kapaliny neprůhledné" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "Úroveň komprese mapy pro pevné úložiště" @@ -4585,11 +4670,14 @@ 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" "When the 'snowbiomes' flag is enabled jungles are automatically enabled and\n" -"the 'jungles' flag is ignored." +"the 'jungles' flag is ignored.\n" +"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" @@ -4632,10 +4720,6 @@ msgstr "Prodleva generování sítě mapbloků" msgid "Mapblock mesh generation threads" msgstr "Vlákna generování sítě mapových bloků" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "Velikost cache paměti v MB Generátoru mapy pro Mapbloky" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "Časový limit pro vymazání Mapbloku z paměti" @@ -4907,6 +4991,11 @@ msgstr "Minimální úroveň logování pro zápis do chatu." msgid "Minimap scan height" msgstr "Výška skenování minimapy" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Minimum dig repetition interval" +msgstr "Interval opakování pro umísťování" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "Spodní hranice pro náhodný počet velkých jeskyní na kus mapy." @@ -4975,6 +5064,11 @@ msgstr "Citlivost myši" msgid "Mouse sensitivity multiplier." msgstr "Multiplikátor citlivosti myši." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Movement threshold" +msgstr "Práh jeskynních dutin" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "Šum bahna" @@ -5119,10 +5213,6 @@ msgstr "" msgid "Occlusion Culling" msgstr "„Side occlusion culling“ pro server" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "Neprůhledné kapaliny" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -5138,6 +5228,11 @@ msgstr "" "se, pokud je již \n" "otevřeno jiné okno (inventář, či jiný „formspec“)." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "OpenGL debug" +msgstr "Ladění Generátoru mapy" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "Volitelné přepsání barvy webových odkazů v chatu." @@ -5271,6 +5366,15 @@ msgstr "" 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. " + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -5289,6 +5393,10 @@ msgstr "Zvedne terén, aby vytvořil údolí kolem řek." msgid "Random input" msgstr "Náhodný vstup" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "Nedávné zprávy v chatu" @@ -5503,8 +5611,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5644,8 +5752,9 @@ msgstr "" "Rozsah: od -1 do 1.0" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" "Nastavte jazyk. Chcete-li použít systémový jazyk, ponechte prázdné. \n" @@ -5692,6 +5801,10 @@ msgstr "" "Chcete-li povolit efekt „bloom“, nastavte na hodnotu true. \n" "Jasné barvy budou přetékat na sousední objekty." +#: src/settings_translation_file.cpp +msgid "Set to true to enable volumetric lighting effect (a.k.a. \"Godrays\")." +msgstr "" + #: src/settings_translation_file.cpp #, fuzzy msgid "Set to true to enable waving leaves." @@ -5745,11 +5858,11 @@ 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.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" "Shadery umožňují pokročilé obrazové efekty a mohou zvýšit výkon u některých " "grafických \n" @@ -5839,17 +5952,6 @@ msgstr "" "Změna hodnoty je pro zvláštní případy, jinak je doporučeno\n" "nechat ji na výchozí hodnotě." -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" -"Velikost mezipaměti MapBlock pro generátor sítě. Zvyšování tohoto\n" -"zvýší podíl přístupů do mezipaměti, čímž se sníží množství dat kopírovaných " -"z hlavního \n" -"výpočetního vlákna, tzn. že se snižuje jitter." - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "" @@ -5886,7 +5988,7 @@ msgstr "Plynulé osvětlení" #, fuzzy msgid "" "Smooths rotation of camera when in cinematic mode, 0 to disable. Enter " -"cinematic mode by using the key set in Change Keys." +"cinematic mode by using the key set in Controls." msgstr "Zklidňuje otáčení kamery ve filmovém režimu. 0 pro deaktivaci." #: src/settings_translation_file.cpp @@ -5908,6 +6010,15 @@ msgstr "Rychlost plížení, v blocích za vteřinu." msgid "Soft shadow radius" msgstr "Poloměr měkkých stínů" +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "Zvuk (Sound)" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sound Extensions Blacklist" +msgstr "ContentDB: Černá listina" + #: src/settings_translation_file.cpp msgid "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -6118,6 +6229,12 @@ msgstr "" "Výchozí formát, ve kterém se profily ukládají, \n" "při volání `/profiler uložit [formát]` bez formátu." +#: 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 #, fuzzy msgid "" @@ -6125,13 +6242,27 @@ msgid "" msgstr "" "Cesta pro uložení profilů, uvádí se relativně k místu uložení vašeho světa." +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "Identifikátor joysticku, který se má použít" #: src/settings_translation_file.cpp #, fuzzy -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" "Délka trasy dotyku v pixelech potřebná k zahájení interakce s dotykovou " "obrazovkou." @@ -6150,6 +6281,15 @@ msgstr "" "Výchozí hodnota je 1.0 (1/2 uzlu). \n" "Vyžaduje, aby byla povoleny vlnící se kapaliny." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"The minimum time in seconds it takes between digging nodes when holding\n" +"the dig button." +msgstr "" +"Čas ve vteřinách mezi opakovaným umístěním bloku při držení \n" +"umisťovacího tlačítka." + #: src/settings_translation_file.cpp msgid "The network interface that the server listens on." msgstr "Síťové rozhraní, na kterém server naslouchá." @@ -6181,11 +6321,12 @@ msgstr "" "To by mělo být nakonfigurováno společně s 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" "Platforma pro vykreslování. \n" "Poznámka: Po změně je vyžadován restart! \n" @@ -6267,6 +6408,10 @@ msgstr "" msgid "Third of 4 2D noises that together define hill/mountain range height." 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 "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -6323,15 +6468,15 @@ msgstr "Citlivost myši" msgid "Touchscreen sensitivity multiplier." msgstr "Multiplikátor citlivosti myši." -#: src/settings_translation_file.cpp -#, fuzzy -msgid "Touchscreen threshold" -msgstr "Práh dotykové obrazovky" - #: src/settings_translation_file.cpp msgid "Tradeoffs for performance" msgstr "Ústupky za výkon" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Translucent liquids" +msgstr "Neprůhledné kapaliny" + #: src/settings_translation_file.cpp msgid "Transparency Sorting Distance" msgstr "Vzdálenost řazení průhlednosti" @@ -6369,8 +6514,11 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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" @@ -6489,10 +6637,6 @@ msgstr "" msgid "User Interfaces" msgstr "Uživatelská rozhraní" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "VBO" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "„VSync“" @@ -6583,6 +6727,10 @@ msgstr "Virtuální joystick spouští tlačítko Aux1" msgid "Volume" msgstr "Hlasitost" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Volume of all sounds.\n" @@ -6591,6 +6739,16 @@ msgstr "" "Hlasitost všech zvuků. \n" "Vyžaduje, aby byl povolen zvukový systém." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volume when unfocused" +msgstr "Snímky za sekundu (FPS) při pauze či hře běžící na pozadí" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volumetric lighting" +msgstr "Plynulé osvětlení" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6889,12 +7047,18 @@ msgstr "cURL limit paralelních stahování" #~ msgid "(game support required)" #~ msgstr "(Vyžadována podpora hry)" +#~ msgid "- Address: " +#~ msgstr "- Adresa: " + #~ msgid "- Creative Mode: " #~ msgstr "- Kreativní mód: " #~ msgid "- Damage: " #~ msgstr "- Zranění: " +#~ msgid "- Port: " +#~ msgstr "- Port: " + #~ msgid "" #~ "0 = parallax occlusion with slope information (faster).\n" #~ "1 = relief mapping (slower, more accurate)." @@ -6932,6 +7096,13 @@ msgstr "cURL limit paralelních stahování" #~ "Nechte prázdné, pokud chcete spustit místní server.\n" #~ "Poznámka: pole adresy v hlavním menu přepisuje toto nastavení." +#~ msgid "" +#~ "Adjust dpi configuration to your screen (non X11/Android only) e.g. for " +#~ "4k screens." +#~ msgstr "" +#~ "Upraví nastavení DPI pro vaši obrazovku (není pro X11/Android). Pro " +#~ "použití například s 4k obrazovkami." + #~ msgid "" #~ "Adjust the gamma encoding for the light tables. Higher numbers are " #~ "brighter.\n" @@ -6984,6 +7155,9 @@ msgstr "cURL limit paralelních stahování" #~ msgid "Bits per pixel (aka color depth) in fullscreen mode." #~ msgstr "Bitová hloubka (bity na pixel) v celoobrazovkovém režimu." +#~ msgid "Block bounds shown for all blocks" +#~ msgstr "Zobrazit hranice bloku u všech bloků" + #~ msgid "Bump Mapping" #~ msgstr "Bump mapping" @@ -7005,6 +7179,9 @@ msgstr "cURL limit paralelních stahování" #~ msgid "Camera update toggle key" #~ msgstr "Klávesa pro přepínání aktualizace pohledu" +#~ msgid "Change Keys" +#~ msgstr "Změnit klávesy" + #, fuzzy #~ msgid "Change keys" #~ msgstr "Změnit klávesy" @@ -7063,6 +7240,38 @@ msgstr "cURL limit paralelních stahování" #~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." #~ msgstr "Ovládá šířku tunelů, menší hodnota vytváří širší tunely." +#, fuzzy, c-format +#~ msgid "" +#~ "Controls:\n" +#~ "- %s: move forwards\n" +#~ "- %s: move backwards\n" +#~ "- %s: move left\n" +#~ "- %s: move right\n" +#~ "- %s: jump/climb up\n" +#~ "- %s: dig/punch/use\n" +#~ "- %s: place/use\n" +#~ "- %s: sneak/climb down\n" +#~ "- %s: drop item\n" +#~ "- %s: inventory\n" +#~ "- Mouse: turn/look\n" +#~ "- Mouse wheel: select item\n" +#~ "- %s: chat\n" +#~ msgstr "" +#~ "Ovládání:\n" +#~ "- %s: pohyb dopředu\n" +#~ "- %s: pohyb dozadu\n" +#~ "- %s: pohyb doleva\n" +#~ "- %s: pohyb doprava\n" +#~ "- %s: skok/výstup\n" +#~ "- %s: těžit/uhodit\n" +#~ "- %s: umístit/použít\n" +#~ "- %s: plížení/sestup\n" +#~ "- %s: zahození předmětu\n" +#~ "- %s: inventář\n" +#~ "- Myš: otáčení/rozhlížení\n" +#~ "- Kolečko myši: výběr předmětu\n" +#~ "- %s: chat\n" + #~ msgid "Creative" #~ msgstr "Kreativní" @@ -7072,6 +7281,9 @@ msgstr "cURL limit paralelních stahování" #~ msgid "Crosshair color (R,G,B)." #~ msgstr "Barva zaměřovače (R,G,B)." +#~ msgid "DPI" +#~ msgstr "DPI" + #~ msgid "Damage" #~ msgstr "Zranění" @@ -7154,6 +7366,13 @@ msgstr "cURL limit paralelních stahování" #~ msgid "Enable register confirmation" #~ msgstr "Zapnout potvrzení registrace" +#~ msgid "" +#~ "Enable vertex buffer objects.\n" +#~ "This should greatly improve graphics performance." +#~ msgstr "" +#~ "Zapnout objekty vyrovnávací paměti vertexů.\n" +#~ "Toto by mělo výrazně zlepšit grafický výkon." + #~ msgid "Enabled" #~ msgstr "Zapnuto" @@ -7456,6 +7675,9 @@ msgstr "cURL limit paralelních stahování" #~ msgid "Instrumentation" #~ msgstr "Instrumentace" +#~ msgid "Invalid gamespec." +#~ msgstr "Neplatná specifikace hry." + #~ msgid "Inventory key" #~ msgstr "Klávesa inventáře" @@ -7996,6 +8218,12 @@ msgstr "cURL limit paralelních stahování" #~ msgid "Main menu style" #~ msgstr "Skript hlavní nabídky" +#~ msgid "Makes all liquids opaque" +#~ msgstr "Udělá všechny kapaliny neprůhledné" + +#~ msgid "Mapblock mesh generator's MapBlock cache size in MB" +#~ msgstr "Velikost cache paměti v MB Generátoru mapy pro Mapbloky" + #~ msgid "Menus" #~ msgstr "Nabídky" @@ -8182,15 +8410,22 @@ msgstr "cURL limit paralelních stahování" #~ msgid "Simple Leaves" #~ msgstr "Jednoduché listí" +#~ msgid "" +#~ "Size of the MapBlock cache of the mesh generator. Increasing this will\n" +#~ "increase the cache hit %, reducing the data being copied from the main\n" +#~ "thread, thus reducing jitter." +#~ msgstr "" +#~ "Velikost mezipaměti MapBlock pro generátor sítě. Zvyšování tohoto\n" +#~ "zvýší podíl přístupů do mezipaměti, čímž se sníží množství dat " +#~ "kopírovaných z hlavního \n" +#~ "výpočetního vlákna, tzn. že se snižuje jitter." + #~ msgid "Smooth Lighting" #~ msgstr "Plynulé osvětlení" #~ msgid "Smooths rotation of camera. 0 to disable." #~ msgstr "Zklidňuje otáčení kamery. 0 pro deaktivaci." -#~ msgid "Sound" -#~ msgstr "Zvuk (Sound)" - #~ msgid "Special" #~ msgstr "Speciální" @@ -8241,6 +8476,10 @@ msgstr "cURL limit paralelních stahování" #~ msgid "Touch threshold (px):" #~ msgstr "Mez dotyku (px):" +#, fuzzy +#~ msgid "Touchscreen threshold" +#~ msgstr "Práh dotykové obrazovky" + #~ msgid "Trilinear Filter" #~ msgstr "Trilineární filtr" @@ -8287,6 +8526,9 @@ msgstr "cURL limit paralelních stahování" #~ "Pokud je nastaveno na 0, MSAA je zakázáno. \n" #~ "Po změně této možnosti je vyžadován restart." +#~ msgid "VBO" +#~ msgstr "VBO" + #~ msgid "" #~ "Version number which was last seen during an update check.\n" #~ "\n" @@ -8350,8 +8592,14 @@ msgstr "cURL limit paralelních stahování" #~ msgid "You died." #~ msgstr "Zemřel jsi." +#~ msgid "You have no games installed." +#~ msgstr "Nemáte nainstalované žádné hry." + #~ msgid "Z" #~ msgstr "Z" #~ msgid "needs_fallback_font" #~ msgstr "no" + +#~ msgid "ok" +#~ msgstr "OK" diff --git a/po/cy/minetest.po b/po/cy/minetest.po index 10c0ae9e0..469119626 100644 --- a/po/cy/minetest.po +++ b/po/cy/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" "PO-Revision-Date: 2023-03-17 11:44+0000\n" "Last-Translator: dreigiau \n" "Language-Team: Welsh ]" +msgid "[all | ] [-t]" msgstr "" -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" -msgstr "Iawn" - #: builtin/fstk/ui.lua msgid "" msgstr "" @@ -109,6 +105,10 @@ msgstr "" msgid "Main menu" msgstr "Prif ddewislen" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "Iawn" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Ail-gysylltu" @@ -137,174 +137,181 @@ msgstr "" msgid "We support protocol versions between version $1 and $2." msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download \"$1\"" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." msgstr "Wrthi'n lawrlwytho $1..." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "Pob pecyn" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "Wedi ei osod" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "Wrthi'n lawrlwytho..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "Gemau" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +msgstr "Gosod" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp +msgid "Loading..." +msgstr "Wrthi'n llwytho..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Mods" +msgstr "Addasiadau" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "Dim canlyniadau" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "Dim diweddariadau" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "Wedi ciwio" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "Pecynnau adnodd" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "Dadosod" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "Diweddaru" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "" + +#: 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 "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "Wedi ei osod" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "Gêm Sylfaenol:" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "Canslo" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "Wrthi'n lawrlwytho..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download \"$1\"" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "Gemau" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "Gosod" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "Gosod $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "Wrthi'n llwytho..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "Addasiadau" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "Dim canlyniadau" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "Dim diweddariadau" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "Heb ei ganfod" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "Trosysgrifo" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" -msgstr "Wedi ciwio" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "Pecynnau adnodd" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "Dadosod" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "Diweddaru" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" -msgstr "" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" +msgstr "Trosysgrifo" #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" @@ -450,10 +457,20 @@ msgstr "Creu" msgid "Decorations" msgstr "Addurniadau" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." msgstr "" +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "Dwnsiynau" @@ -818,10 +835,6 @@ msgstr "" msgid "Back" msgstr "Bacio" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "Newid Bysellau" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -831,7 +844,8 @@ msgstr "Sgwrs" msgid "Clear" msgstr "Clirio" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "Rheoli" @@ -1037,6 +1051,16 @@ msgstr "" msgid "Install games from ContentDB" msgstr "" +#: builtin/mainmenu/tab_local.lua +msgid "Minetest 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 " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "Newydd" @@ -1070,7 +1094,7 @@ msgid "Start Game" msgstr "Dechrau Gêm" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." +msgid "You need to install a game before you can create a world." msgstr "" #: builtin/mainmenu/tab_online.lua @@ -1150,18 +1174,10 @@ msgstr "Wrthi'n llwytho gweadau..." msgid "Rebuilding shaders..." msgstr "" -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "" - #: src/client/clientlauncher.cpp msgid "Could not find or load game: " msgstr "" -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "" - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "Prif Ddewislen" @@ -1186,24 +1202,20 @@ msgstr "" msgid "Provided world path doesn't exist: " msgstr "" -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "Cyfryngau..." + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp msgid "" "\n" "Check debug.txt for details." msgstr "" -#: src/client/game.cpp -msgid "- Address: " -msgstr "" - #: src/client/game.cpp msgid "- Mode: " msgstr "" -#: src/client/game.cpp -msgid "- Port: " -msgstr "" - #: src/client/game.cpp msgid "- Public: " msgstr "" @@ -1238,10 +1250,6 @@ msgstr "" msgid "Block bounds hidden" msgstr "" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "" @@ -1286,6 +1294,10 @@ msgstr "" msgid "Connecting to server..." msgstr "" +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "" @@ -1294,32 +1306,13 @@ msgstr "" msgid "Continue" msgstr "Parhau" -#: src/client/game.cpp -#, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" - #: src/client/game.cpp msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1399,6 +1392,10 @@ msgstr "" msgid "Fog enabled" msgstr "" +#: src/client/game.cpp +msgid "Fog enabled by game or mod" +msgstr "" + #: src/client/game.cpp msgid "Game info:" msgstr "" @@ -1419,10 +1416,6 @@ msgstr "Diffiniadau eitem..." msgid "KiB/s" msgstr "KiB/s" -#: src/client/game.cpp -msgid "Media..." -msgstr "Cyfryngau..." - #: src/client/game.cpp msgid "MiB/s" msgstr "MiB/s" @@ -1578,10 +1571,6 @@ msgstr "" msgid "Zoom currently disabled by game or mod" msgstr "" -#: src/client/game.cpp -msgid "ok" -msgstr "iawn" - #: src/client/gameui.cpp msgid "Chat currently disabled by game or mod" msgstr "" @@ -1912,6 +1901,15 @@ msgstr "" msgid "Minimap in texture mode" msgstr "" +#: src/client/shader.cpp +#, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2102,6 +2100,18 @@ msgstr "Chwyddo" msgid "press key" msgstr "" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Unable to open URL" +msgstr "" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "Newid" @@ -2135,6 +2145,7 @@ msgstr "" #. 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 "cy" @@ -2320,12 +2331,6 @@ msgstr "" msgid "Adds particles when digging a node." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2348,6 +2353,10 @@ msgstr "" msgid "Advanced" msgstr "Uwch" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2401,6 +2410,17 @@ msgstr "" msgid "Apple trees noise" 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 "Arm inertia" msgstr "" @@ -2422,12 +2442,21 @@ msgid "" "clients.\n" "Small values potentially improve performance a lot, at the expense of " "visible\n" -"rendering glitches (some blocks will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +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 @@ -2491,6 +2520,10 @@ msgstr "Bïomau" msgid "Biome noise" msgstr "" +#: src/settings_translation_file.cpp +msgid "Block cull optimize distance" +msgstr "" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "" @@ -2703,6 +2736,12 @@ msgstr "" msgid "Colored shadows" 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -2834,10 +2873,6 @@ msgid "" "Also controls the object crosshair color" msgstr "" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "DPI" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "" @@ -2887,6 +2922,19 @@ msgid "" "but also uses more resources." 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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "" @@ -3071,6 +3119,11 @@ msgstr "" msgid "Enable Bloom Debug" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Debanding" +msgstr "Galluogi Difrod" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3090,6 +3143,10 @@ msgid "" "filtering." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable Post Processing" +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "" @@ -3132,6 +3189,10 @@ msgstr "" msgid "Enable mouse wheel (scroll) for item selection in hotbar." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable random mod loading (mainly used for testing)." +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3155,6 +3216,11 @@ msgid "" "expecting." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable touchscreen" +msgstr "Sgrîn gyffwrdd" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3163,12 +3229,6 @@ msgid "" "when connecting to the server." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3198,6 +3258,19 @@ msgstr "" msgid "Enables caching of facedir rotated meshes." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -3994,9 +4067,10 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" #: src/settings_translation_file.cpp @@ -4142,10 +4216,6 @@ msgid "" "Make fog and sky colors depend on daytime (dawn/sunset) and view direction." msgstr "" -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "" @@ -4194,7 +4264,9 @@ 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." +"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 @@ -4229,10 +4301,6 @@ msgstr "" msgid "Mapblock mesh generation threads" msgstr "" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "" @@ -4474,6 +4542,10 @@ msgstr "" msgid "Minimap scan height" msgstr "" +#: src/settings_translation_file.cpp +msgid "Minimum dig repetition interval" +msgstr "" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "" @@ -4542,6 +4614,11 @@ msgstr "" msgid "Mouse sensitivity multiplier." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Movement threshold" +msgstr "Sgrîn gyffwrdd" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "" @@ -4650,10 +4727,6 @@ msgstr "" msgid "Occlusion Culling" msgstr "" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -4666,6 +4739,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "OpenGL debug" +msgstr "" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "" @@ -4775,6 +4852,14 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "" +#: src/settings_translation_file.cpp +msgid "Protocol version minimum" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -4790,6 +4875,10 @@ msgstr "" msgid "Random input" msgstr "" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "" @@ -4977,8 +5066,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5096,7 +5185,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" @@ -5129,6 +5218,10 @@ msgid "" "Bright colors will bleed over the neighboring objects." 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 "Set to true to enable waving leaves." msgstr "" @@ -5168,8 +5261,7 @@ msgstr "" msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" #: src/settings_translation_file.cpp @@ -5239,13 +5331,6 @@ msgid "" "recommended." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "" @@ -5281,7 +5366,7 @@ 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 Change Keys." +"cinematic mode by using the key set in Controls." msgstr "" #: src/settings_translation_file.cpp @@ -5302,6 +5387,14 @@ msgstr "" msgid "Soft shadow radius" msgstr "" +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "Sain" + +#: src/settings_translation_file.cpp +msgid "Sound Extensions Blacklist" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -5458,17 +5551,37 @@ msgid "" "when calling `/profiler save [format]` without format." 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 "" "The file path relative to your world path in which profiles will be saved to." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "" #: src/settings_translation_file.cpp -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" #: src/settings_translation_file.cpp @@ -5479,6 +5592,12 @@ msgid "" "Default is 1.0 (1/2 node)." 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 "The network interface that the server listens on." msgstr "" @@ -5505,7 +5624,7 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" #: src/settings_translation_file.cpp @@ -5562,6 +5681,10 @@ msgstr "" msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "" +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -5610,12 +5733,11 @@ msgid "Touchscreen sensitivity multiplier." msgstr "" #: src/settings_translation_file.cpp -#, fuzzy -msgid "Touchscreen threshold" -msgstr "Sgrîn gyffwrdd" +msgid "Tradeoffs for performance" +msgstr "" #: src/settings_translation_file.cpp -msgid "Tradeoffs for performance" +msgid "Translucent liquids" msgstr "" #: src/settings_translation_file.cpp @@ -5653,7 +5775,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 "" #: src/settings_translation_file.cpp @@ -5751,11 +5875,6 @@ msgstr "" msgid "User Interfaces" msgstr "" -#: src/settings_translation_file.cpp -#, fuzzy -msgid "VBO" -msgstr "VBO" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "VSync" @@ -5842,12 +5961,24 @@ msgstr "" msgid "Volume" msgstr "Lefel" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +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 "Volumetric lighting" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6102,6 +6233,9 @@ msgstr "" #~ msgid "All Settings" #~ msgstr "Pob Gosodiad" +#~ msgid "Change Keys" +#~ msgstr "Newid Bysellau" + #, fuzzy #~ msgid "Change keys" #~ msgstr "Newid Bysellau" @@ -6109,6 +6243,9 @@ msgstr "" #~ msgid "Creative" #~ msgstr "Creadigol" +#~ msgid "DPI" +#~ msgstr "DPI" + #~ msgid "Damage" #~ msgstr "Difrod" @@ -6151,9 +6288,6 @@ msgstr "" #~ msgid "Screen:" #~ msgstr "Sgrîn:" -#~ msgid "Sound" -#~ msgstr "Sain" - #~ msgid "Texturing:" #~ msgstr "Gweadau:" @@ -6163,6 +6297,10 @@ msgstr "" #~ msgid "Up" #~ msgstr "I fyny" +#, fuzzy +#~ msgid "VBO" +#~ msgstr "VBO" + #~ msgid "X" #~ msgstr "X" @@ -6171,3 +6309,6 @@ msgstr "" #~ msgid "Z" #~ msgstr "Z" + +#~ msgid "ok" +#~ msgstr "iawn" diff --git a/po/da/minetest.po b/po/da/minetest.po index d46bb4008..e1ddc1c39 100644 --- a/po/da/minetest.po +++ b/po/da/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Danish (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\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" "Language-Team: Danish ]" +#, fuzzy +msgid "[all | ] [-t]" msgstr "[all | j" -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" -msgstr "OK" - #: builtin/fstk/ui.lua msgid "" msgstr "" @@ -105,6 +103,10 @@ msgstr "Der skete en fejl:" msgid "Main menu" msgstr "Hovedmenu" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "OK" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Forbind igen" @@ -133,19 +135,27 @@ msgstr "Vi understøtter kun protokol version $1." msgid "We support protocol versions between version $1 and $2." msgstr "Vi understøtter protokol versioner mellem $1 og $2." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "\"$1\" findes allerede. Vil du overskrive den?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" +msgstr "Fejl ved installation af \"$1\":$2" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." -msgstr "Påkrævet grundlag for $1 og $2 vl blive installeret." +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download \"$1\"" +msgstr "Kunne ikke hente \"$1\"" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" -msgstr "$1 med $2" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr "Kunne ikke hente $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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)" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" @@ -153,159 +163,159 @@ msgstr "" "$1 downloader.\n" "$2 i kø" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." msgstr "Henter $1..." -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "All packages" +msgstr "Alle pakker" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Back to Main Menu" +msgstr "Tilbage til hovedmenuen" + +#: 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" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "Henter..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "Spil" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +msgstr "Installer" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp +msgid "Loading..." +msgstr "Indlæser..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Mods" +msgstr "Mods" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "Der var ingen pakker at hente" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "Der er ingen resultater at vise" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "Ingen opdateringer" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "Sat i kø" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "Teksturpakker" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "Afinstaller" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "Opdater" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "Opdater alle [$1]" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "View more information in a web browser" +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 "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 and $2 dependencies will be installed." +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" + +#: builtin/mainmenu/content/dlg_install.lua msgid "$1 required dependencies could not be found." msgstr "Pålrævede grundlag for $1 kunne ikke findes." -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "$1 will be installed, and $2 dependencies will be skipped." msgstr "" "$1 vil blive installeret, og påkrævede grundlag for $2 vil blive sprunget " "over." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "All packages" -msgstr "Alle pakker" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Already installed" msgstr "Allerede installeret" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Back to Main Menu" -msgstr "Tilbage til hovedmenuen" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "Basisspil:" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "Anuller" -#: builtin/mainmenu/content/dlg_contentstore.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" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "Afhængigheder:" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "Henter..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "Fejl ved installation af \"$1\":$2" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download \"$1\"" -msgstr "Kunne ikke hente \"$1\"" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "Kunne ikke hente $1" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "" -"Kunne ikke pakke \"$1\" ud (ikke-understøttet filtype eller korrupt arkiv)" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "Spil" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "Installer" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "Installér $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "Installér manglende grundlag" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "Indlæser..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "Mods" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "Der var ingen pakker at hente" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "Der er ingen resultater at vise" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "Ingen opdateringer" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "Ikke fundet" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "Overskriv" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "Kontrollér venlist, at basisspillet er korrekt." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" -msgstr "Sat i kø" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" +msgstr "\"$1\" findes allerede. Vil du overskrive den?" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "Teksturpakker" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "Afinstaller" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "Opdater" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "Opdater alle [$1]" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "Se mere information i en webbrowser" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" -msgstr "" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" +msgstr "Overskriv" #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" @@ -454,10 +464,20 @@ msgstr "Skab" msgid "Decorations" msgstr "Udsmykninger" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." msgstr "Udvklingstest er tiltænkt udviklere." +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "Fangehuller" @@ -833,10 +853,6 @@ msgstr "" msgid "Back" msgstr "Tilbage" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "Skift tastatur-bindinger" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -846,7 +862,8 @@ msgstr "Snak" msgid "Clear" msgstr "Ryd" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "Styring" @@ -1056,6 +1073,16 @@ msgstr "Installér et spil" msgid "Install games from ContentDB" msgstr "Installer spil fra ContentDB" +#: builtin/mainmenu/tab_local.lua +msgid "Minetest 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 " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "Ny" @@ -1089,8 +1116,8 @@ msgid "Start Game" msgstr "Start spil" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." -msgstr "Du har ikke installeret nogle spil." +msgid "You need to install a game before you can create a world." +msgstr "" #: builtin/mainmenu/tab_online.lua msgid "Address" @@ -1169,18 +1196,10 @@ msgstr "Indlæser teksturer..." msgid "Rebuilding shaders..." msgstr "Genbygger dybdeskabere ..." -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "Forbindelses fejl (udløbelse af tidsfrist?)" - #: src/client/clientlauncher.cpp msgid "Could not find or load game: " msgstr "Kunne ikke finde eller indlæse spillet: " -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "Ugyldig spilspecifikationer." - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "Hovedmenu" @@ -1206,7 +1225,11 @@ msgstr "Angivne kodeordsfil kunne ikke åbnes: " msgid "Provided world path doesn't exist: " msgstr "Angivne sti til verdenen findes ikke: " -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "Medier..." + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp msgid "" "\n" "Check debug.txt for details." @@ -1214,18 +1237,10 @@ msgstr "" "\n" "Tjek debug.txt for detaljer." -#: src/client/game.cpp -msgid "- Address: " -msgstr "- Adresse: " - #: src/client/game.cpp msgid "- Mode: " msgstr "- Tilstand: " -#: src/client/game.cpp -msgid "- Port: " -msgstr "- Port: " - #: src/client/game.cpp msgid "- Public: " msgstr "- Offentlig: " @@ -1260,10 +1275,6 @@ msgstr "Automatisk viderestilling slået til" msgid "Block bounds hidden" msgstr "Blokafgrænsning skjult" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "Blokafgrænsning vist for alle blokke" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "Blokafgrænsning vist for nuværende blok" @@ -1309,6 +1320,10 @@ msgstr "Scripting på klientside er slået fra" msgid "Connecting to server..." msgstr "Forbinder til server..." +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "Forbindelses fejl (udløbelse af tidsfrist?)" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "Forbindelsen slog fejl af ukendt årsag" @@ -1317,45 +1332,14 @@ msgstr "Forbindelsen slog fejl af ukendt årsag" msgid "Continue" msgstr "Fortsæt" -#: src/client/game.cpp -#, fuzzy, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" -"Styring:\n" -"- %s: bevæg dig fremad\n" -"- %s: bevæg dig baglæns\n" -"- %s: bevæg dig til venstre\n" -"- %s: bevæg dig til højre\n" -"- %s: hoppe/klatre\n" -"- %s: snige/gå nedad\n" -"- %s: smid genstand\n" -"- %s: Oppakning\n" -"- Mus: vend rundt/kig\n" -"- Musehjul: vælg genstand\n" -"- %s: skriven (chat)\n" - #: src/client/game.cpp #, fuzzy msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1447,6 +1431,11 @@ msgstr "Tåge deaktiveret" msgid "Fog enabled" msgstr "Tåge aktiveret" +#: src/client/game.cpp +#, fuzzy +msgid "Fog enabled by game or mod" +msgstr "Zoom er i øjeblikket slået fra af spil eller mod" + #: src/client/game.cpp msgid "Game info:" msgstr "Spilinfo:" @@ -1467,10 +1456,6 @@ msgstr "Elementdefinitioner ..." msgid "KiB/s" msgstr "KiB/s" -#: src/client/game.cpp -msgid "Media..." -msgstr "Medier..." - #: src/client/game.cpp msgid "MiB/s" msgstr "MiB/s" @@ -1628,10 +1613,6 @@ msgstr "Wireramme vist" msgid "Zoom currently disabled by game or mod" msgstr "Zoom er i øjeblikket slået fra af spil eller mod" -#: src/client/game.cpp -msgid "ok" -msgstr "ok" - #: src/client/gameui.cpp #, fuzzy msgid "Chat currently disabled by game or mod" @@ -1966,6 +1947,15 @@ msgstr "Minikort i overfladetilstand, zoom x%d" msgid "Minimap in texture mode" msgstr "Minikort i texturtilstand" +#: src/client/shader.cpp +#, fuzzy, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "Kunne ikke hente hjemmesiden" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2162,6 +2152,19 @@ msgstr "Zoom" msgid "press key" msgstr "Tryk på en tast" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +#, fuzzy +msgid "Unable to open URL" +msgstr "Kunne ikke hente hjemmesiden" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "Skift" @@ -2195,6 +2198,7 @@ msgstr "Lydstyrke: %d%%" #. 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 "da" @@ -2405,14 +2409,6 @@ msgstr "Aktivt objektafsendelsesinterval" msgid "Adds particles when digging a node." msgstr "Tilføjer partikler, når man graver en blok." -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" -"Justér DPI-konfigurationen til din skærm (ikke-X11 / kun Android) f.eks. til " -"4k-skærme." - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2436,6 +2432,10 @@ msgstr "Verdens navn" msgid "Advanced" msgstr "Avanceret" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2494,6 +2494,17 @@ msgstr "" msgid "Apple trees noise" msgstr "Æbletræsstøj" +#: 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 "Arm inertia" msgstr "" @@ -2515,12 +2526,21 @@ msgid "" "clients.\n" "Small values potentially improve performance a lot, at the expense of " "visible\n" -"rendering glitches (some blocks will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +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 @@ -2591,6 +2611,10 @@ msgstr "Biomer" msgid "Biome noise" msgstr "Biom støj" +#: src/settings_translation_file.cpp +msgid "Block cull optimize distance" +msgstr "" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "" @@ -2825,6 +2849,12 @@ msgstr "Farvet tåge" msgid "Colored shadows" msgstr "Farvet tåge" +#: 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -2969,10 +2999,6 @@ msgid "" "Also controls the object crosshair color" msgstr "" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "DPI" - #: src/settings_translation_file.cpp #, fuzzy msgid "Debug log file size threshold" @@ -3024,6 +3050,24 @@ msgid "" "but also uses more resources." 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 " +"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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" +"Aktiver for at nægte gamle klienter i at forbinde.\n" +"Ældre klienter er kompatible på den måde, at de ikke vil stoppe ved " +"tilkobling\n" +"til nye servere, men de understøtter ikke alle nye funktioner." + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "Definerer områder, hvor træerne har æbler." @@ -3222,6 +3266,11 @@ msgstr "Aktivér alle" msgid "Enable Bloom Debug" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Debanding" +msgstr "Aktivér skade" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3241,6 +3290,11 @@ msgid "" "filtering." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Post Processing" +msgstr "Aktivér joysticks" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "" @@ -3285,6 +3339,11 @@ msgstr "Aktiver mod-sikkerhed" 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 "Aktiver vilkårlig brugerinddata (kun til test)." + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "Aktiver vilkårlig brugerinddata (kun til test)." @@ -3314,6 +3373,11 @@ msgstr "" "tilkobling\n" "til nye servere, men de understøtter ikke alle nye funktioner." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable touchscreen" +msgstr "Strandstøjtærskel" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3326,12 +3390,6 @@ msgstr "" "eks. teksturer\n" "ved forbindelse til serveren." -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3366,6 +3424,19 @@ msgstr "Aktiverer animation af lagerelementer." msgid "Enables caching of facedir rotated meshes." msgstr "Aktiverer mellemlagring af facedir-roterede mesher." +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -4284,9 +4355,10 @@ msgstr "" #: src/settings_translation_file.cpp #, fuzzy msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" "Længde på serveraktivering og intervallet som objekter opdateres efter over " "netværket." @@ -4460,10 +4532,6 @@ msgstr "" "Tåge- og himmelfarver afhænger af tid på dagen (solopgang/solnedgang) og den " "sete retning." -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "" @@ -4523,7 +4591,9 @@ 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." +"the 'jungles' flag is ignored.\n" +"The 'temples' flag disables generation of desert temples. Normal dungeons " +"will appear instead." msgstr "" "Tilknyttes Mapgen v6 generation attributter specifikke.\n" "'Snowbiomes' flag gør det muligt for det nye 5 biom system.\n" @@ -4572,11 +4642,6 @@ msgstr "Mapblock mesh generation forsinkelse" msgid "Mapblock mesh generation threads" msgstr "Mapblock mesh generation forsinkelse" -#: src/settings_translation_file.cpp -#, fuzzy -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "Mapblock mesh generation forsinkelse" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "Tidsudløb for kortblokfjernelse" @@ -4833,6 +4898,11 @@ msgstr "" msgid "Minimap scan height" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Minimum dig repetition interval" +msgstr "Joystick-knaps gentagelsesinterval" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "" @@ -4904,6 +4974,11 @@ msgstr "" msgid "Mouse sensitivity multiplier." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Movement threshold" +msgstr "Hule tærskel" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "" @@ -5014,10 +5089,6 @@ msgstr "" msgid "Occlusion Culling" msgstr "" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -5030,6 +5101,11 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "OpenGL debug" +msgstr "Fejlsøgning for Mapgen" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "" @@ -5142,6 +5218,15 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Protocol version minimum" +msgstr "Protokol versionerne matchede ikke. " + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -5157,6 +5242,10 @@ msgstr "" msgid "Random input" msgstr "" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "" @@ -5358,8 +5447,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5501,7 +5590,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" @@ -5537,6 +5626,10 @@ msgid "" "Bright colors will bleed over the neighboring objects." 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 #, fuzzy msgid "Set to true to enable waving leaves." @@ -5587,8 +5680,7 @@ msgstr "Dybdeskabere" msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" "Dybdeskabere tillader avancerede visuelle effekter og kan forøge ydelsen på " "nogle videokort.\n" @@ -5664,13 +5756,6 @@ msgid "" "recommended." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "" @@ -5706,7 +5791,7 @@ msgstr "Blød belysning" #: 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 Change Keys." +"cinematic mode by using the key set in Controls." msgstr "" #: src/settings_translation_file.cpp @@ -5729,6 +5814,14 @@ msgstr "" msgid "Soft shadow radius" msgstr "Alfa for skrifttypeskygge" +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "Lyd" + +#: src/settings_translation_file.cpp +msgid "Sound Extensions Blacklist" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -5890,17 +5983,37 @@ msgid "" "when calling `/profiler save [format]` without format." 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 "" "The file path relative to your world path in which profiles will be saved to." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "" #: src/settings_translation_file.cpp -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" #: src/settings_translation_file.cpp @@ -5911,6 +6024,12 @@ msgid "" "Default is 1.0 (1/2 node)." 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 "The network interface that the server listens on." msgstr "" @@ -5937,7 +6056,7 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" #: src/settings_translation_file.cpp @@ -5995,6 +6114,10 @@ msgstr "" msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "Første af 2 3D-støj, der sammen definerer tunneler." +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -6043,15 +6166,15 @@ msgstr "Strandstøjtærskel" msgid "Touchscreen sensitivity multiplier." msgstr "" -#: src/settings_translation_file.cpp -#, fuzzy -msgid "Touchscreen threshold" -msgstr "Strandstøjtærskel" - #: src/settings_translation_file.cpp msgid "Tradeoffs for performance" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Translucent liquids" +msgstr "Bølgende blade" + #: src/settings_translation_file.cpp msgid "Transparency Sorting Distance" msgstr "" @@ -6087,7 +6210,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 "" #: src/settings_translation_file.cpp @@ -6190,10 +6315,6 @@ msgstr "" msgid "User Interfaces" msgstr "" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "VBO" - #: src/settings_translation_file.cpp #, fuzzy msgid "VSync" @@ -6283,6 +6404,10 @@ msgstr "" msgid "Volume" msgstr "Lydstyrke" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +msgstr "" + #: src/settings_translation_file.cpp #, fuzzy msgid "" @@ -6292,6 +6417,15 @@ msgstr "" "Aktiverer parallax-okklusionoversættelse.\n" "Kræver at dybdeskabere er aktiveret." +#: src/settings_translation_file.cpp +msgid "Volume when unfocused" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volumetric lighting" +msgstr "Blød belysning" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6538,12 +6672,18 @@ msgstr "" #~ msgid "(game support required)" #~ msgstr "(Spilunderstøttelse påkrævet)" +#~ msgid "- Address: " +#~ msgstr "- Adresse: " + #~ msgid "- Creative Mode: " #~ msgstr "- Kreativ tilstand: " #~ msgid "- Damage: " #~ msgstr "- Skade: " +#~ msgid "- Port: " +#~ msgstr "- Port: " + #~ msgid "" #~ "0 = parallax occlusion with slope information (faster).\n" #~ "1 = relief mapping (slower, more accurate)." @@ -6578,6 +6718,13 @@ msgstr "" #~ "Lad dette være tomt for at starte en lokal server.\n" #~ "Bemærk, at adressefeltet i hovedmenuen tilsidesætter denne indstilling." +#~ msgid "" +#~ "Adjust dpi configuration to your screen (non X11/Android only) e.g. for " +#~ "4k screens." +#~ msgstr "" +#~ "Justér DPI-konfigurationen til din skærm (ikke-X11 / kun Android) f.eks. " +#~ "til 4k-skærme." + #~ msgid "" #~ "Adjust the gamma encoding for the light tables. Higher numbers are " #~ "brighter.\n" @@ -6619,6 +6766,9 @@ msgstr "" #~ msgid "Bits per pixel (aka color depth) in fullscreen mode." #~ msgstr "Bit per billedpunkt (a.k.a. farvedybde) i fuldskærmtilstand." +#~ msgid "Block bounds shown for all blocks" +#~ msgstr "Blokafgrænsning vist for alle blokke" + #, fuzzy #~ msgid "Bump Mapping" #~ msgstr "Bump Mapping" @@ -6630,6 +6780,9 @@ msgstr "" #~ msgid "Camera update toggle key" #~ msgstr "Tast til ændring af kameraopdatering" +#~ msgid "Change Keys" +#~ msgstr "Skift tastatur-bindinger" + #, fuzzy #~ msgid "Change keys" #~ msgstr "Skift tastatur-bindinger" @@ -6671,6 +6824,36 @@ msgstr "" #~ msgstr "" #~ "Styrer bredden af tunneller. En lavere værdi giver bredere tunneller." +#, fuzzy, c-format +#~ msgid "" +#~ "Controls:\n" +#~ "- %s: move forwards\n" +#~ "- %s: move backwards\n" +#~ "- %s: move left\n" +#~ "- %s: move right\n" +#~ "- %s: jump/climb up\n" +#~ "- %s: dig/punch/use\n" +#~ "- %s: place/use\n" +#~ "- %s: sneak/climb down\n" +#~ "- %s: drop item\n" +#~ "- %s: inventory\n" +#~ "- Mouse: turn/look\n" +#~ "- Mouse wheel: select item\n" +#~ "- %s: chat\n" +#~ msgstr "" +#~ "Styring:\n" +#~ "- %s: bevæg dig fremad\n" +#~ "- %s: bevæg dig baglæns\n" +#~ "- %s: bevæg dig til venstre\n" +#~ "- %s: bevæg dig til højre\n" +#~ "- %s: hoppe/klatre\n" +#~ "- %s: snige/gå nedad\n" +#~ "- %s: smid genstand\n" +#~ "- %s: Oppakning\n" +#~ "- Mus: vend rundt/kig\n" +#~ "- Musehjul: vælg genstand\n" +#~ "- %s: skriven (chat)\n" + #~ msgid "Creative" #~ msgstr "Kreativ" @@ -6680,6 +6863,9 @@ msgstr "" #~ msgid "Crosshair color (R,G,B)." #~ msgstr "Crosshair-farve (R,G,B)." +#~ msgid "DPI" +#~ msgstr "DPI" + #~ msgid "Damage" #~ msgstr "Skade" @@ -6937,6 +7123,9 @@ msgstr "" #~ msgid "Instrumentation" #~ msgstr "Instrumentering" +#~ msgid "Invalid gamespec." +#~ msgstr "Ugyldig spilspecifikationer." + #~ msgid "Inventory key" #~ msgstr "Lagertast" @@ -7678,6 +7867,10 @@ msgstr "" #~ msgstr "" #~ "Får DirectX til at fungere med LuaJIT. Deaktiver hvis det giver problemer." +#, fuzzy +#~ msgid "Mapblock mesh generator's MapBlock cache size in MB" +#~ msgstr "Mapblock mesh generation forsinkelse" + #~ msgid "Menus" #~ msgstr "Menuer" @@ -7812,9 +8005,6 @@ msgstr "" #~ msgid "Smooth Lighting" #~ msgstr "Glat belysning" -#~ msgid "Sound" -#~ msgstr "Lyd" - #, fuzzy #~ msgid "Special key" #~ msgstr "Snigetast" @@ -7847,6 +8037,10 @@ msgstr "" #~ msgid "Touch threshold (px):" #~ msgstr "Berøringstærskel (px):" +#, fuzzy +#~ msgid "Touchscreen threshold" +#~ msgstr "Strandstøjtærskel" + #~ msgid "Trilinear Filter" #~ msgstr "Tri-lineær filtréring" @@ -7862,6 +8056,9 @@ msgstr "" #~ msgid "Up" #~ msgstr "Op" +#~ msgid "VBO" +#~ msgstr "VBO" + #, c-format #~ msgid "Viewing range is at maximum: %d" #~ msgstr "Sigtbarhed er på maksimum: %d" @@ -7888,8 +8085,14 @@ msgstr "" #~ msgid "You died." #~ msgstr "Du døde" +#~ msgid "You have no games installed." +#~ msgstr "Du har ikke installeret nogle spil." + #~ msgid "Z" #~ msgstr "Z" #~ msgid "needs_fallback_font" #~ msgstr "no" + +#~ msgid "ok" +#~ msgstr "ok" diff --git a/po/de/minetest.po b/po/de/minetest.po index 750b7cd81..74380e328 100644 --- a/po/de/minetest.po +++ b/po/de/minetest.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: German (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" -"PO-Revision-Date: 2023-11-17 00:07+0000\n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" +"PO-Revision-Date: 2024-07-12 14:09+0000\n" "Last-Translator: Wuzzy \n" "Language-Team: German \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.7-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -71,8 +71,8 @@ msgid "Command not available: " msgstr "Befehl nicht verfügbar: " #: builtin/common/chatcommands.lua -msgid "Get help for commands" -msgstr "Hilfe für Befehle erhalten" +msgid "Get help for commands (-t: output in chat)" +msgstr "Hilfe für Befehle erhalten (-t: Ausgabe im Chat)" #: builtin/common/chatcommands.lua msgid "" @@ -82,12 +82,8 @@ msgstr "" "all“ benutzen, um alles aufzulisten." #: builtin/common/chatcommands.lua -msgid "[all | ]" -msgstr "[all | ]" - -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" -msgstr "OK" +msgid "[all | ] [-t]" +msgstr "[all | ] [-t]" #: builtin/fstk/ui.lua msgid "" @@ -105,6 +101,10 @@ msgstr "Ein Fehler ist aufgetreten:" msgid "Main menu" msgstr "Hauptmenü" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "OK" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Erneut verbinden" @@ -133,19 +133,27 @@ msgstr "Wir unterstützen nur Protokollversion $1." msgid "We support protocol versions between version $1 and $2." msgstr "Wir unterstützen Protokollversionen zwischen $1 und $2." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "„$1“ existiert bereits. Wollen Sie es überschreiben?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" +msgstr "Fehler bei Installation von „$1“: $2" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." -msgstr "$1 und $2 Abhängigkeiten werden installiert." +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download \"$1\"" +msgstr "Fehler beim Download von „$1“" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" -msgstr "$1 von $2" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr "Fehler beim Download von $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "" +"Fehler beim Extrahieren von „$1“ (unzureichender Speicherplatz, nicht " +"unterstützter Dateityp oder kaputtes Archiv)" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" @@ -153,160 +161,159 @@ msgstr "" "$1 laden herunter,\n" "$2 warten" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." msgstr "$1 laden herunter…" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "$1 benötigte Abhängigkeiten konnten nicht gefunden werden." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "$1 wird installiert und $2 Abhängigkeiten werden übersprungen." - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "Alle Pakete" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "Bereits installiert" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "Zurück zum Hauptmenü" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "" +"ContentDB ist nicht verfügbar, wenn Minetest ohne cURL kompiliert wurde" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "Herunterladen …" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "Fehler beim Holen der Abhängigkeiten für Paket" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "Spiele" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +msgstr "Installieren" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp +msgid "Loading..." +msgstr "Laden ..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Mods" +msgstr "Mods" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "Es konnten keine Pakete abgerufen werden" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "Keine Ergebnisse" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "Keine Updates" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "Eingereiht" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "Texturenpakete" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "Das Paket $1 wurde nicht gefunden." + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "Deinstallieren" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "Updaten" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "Alle aktualisieren [$1]" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "View more information in a web browser" +msgstr "Mehr Informationen im Webbrowser anschauen" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "You need to install a game before you can install a mod" +msgstr "" +"Sie müssen ein Spiel installieren, bevor Sie eine Mod installieren können" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 and $2 dependencies will be installed." +msgstr "$1 und $2 Abhängigkeiten werden installiert." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "$1 von $2" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "$1 benötigte Abhängigkeiten konnten nicht gefunden werden." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "$1 wird installiert und $2 Abhängigkeiten werden übersprungen." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "Bereits installiert" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "Basis-Spiel:" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "Abbrechen" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "" -"ContentDB ist nicht verfügbar, wenn Minetest ohne cURL kompiliert wurde" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "Abhängigkeiten:" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "Herunterladen …" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "Fehler bei Installation von „$1“: $2" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download \"$1\"" -msgstr "Fehler beim Download von „$1“" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "Fehler beim Download von $1" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "" -"Fehler beim Extrahieren von „$1“ (nicht unterstützter Dateityp oder kaputtes " -"Archiv)" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "Spiele" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "Installieren" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "$1 installieren" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "Fehlende Abhängigkeiten installieren" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "Laden ..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "Mods" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "Es konnten keine Pakete abgerufen werden" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "Keine Ergebnisse" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "Keine Updates" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "Nicht gefunden" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "Überschreiben" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "Bitte prüfen Sie, ob das Basis-Spiel korrekt ist." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" -msgstr "Eingereiht" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" +msgstr "„$1“ existiert bereits. Wollen Sie es überschreiben?" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "Texturenpakete" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "Das Paket $1 wurde nicht gefunden." - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "Deinstallieren" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "Updaten" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "Alle aktualisieren [$1]" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "Mehr Informationen im Webbrowser anschauen" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" -msgstr "" -"Sie müssen ein Spiel installieren, bevor Sie eine Mod installieren können" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" +msgstr "Überschreiben" #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" @@ -455,10 +462,22 @@ msgstr "Erstellen" msgid "Decorations" msgstr "Dekorationen" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "Wüstentempel" + #: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." msgstr "Development Test ist für Entwickler gedacht." +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" +"Andere Verliesvariante, die in Wüstenbiomen generiert wird (nur, wenn " +"Verliese aktiviert sind)" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "Verliese" @@ -839,10 +858,6 @@ msgstr "Barrierefreiheit" msgid "Back" msgstr "Zurück" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "Tastenbelegung" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -852,7 +867,8 @@ msgstr "Chat" msgid "Clear" msgstr "Leeren" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "Steuerung" @@ -1057,6 +1073,18 @@ msgstr "Ein Spiel installieren" msgid "Install games from ContentDB" msgstr "Spiele aus ContentDB installieren" +#: builtin/mainmenu/tab_local.lua +msgid "Minetest doesn't come with a game by default." +msgstr "Minetest wird standardmäßig nicht mehr mit einem Spiel ausgeliefert." + +#: builtin/mainmenu/tab_local.lua +msgid "" +"Minetest is a game-creation platform that allows you to play many different " +"games." +msgstr "" +"Minetest ist eine Spielerschaffungsplattform, welche es Ihnen ermöglicht, " +"viele verschiedene Spiele zu spielen." + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "Neu" @@ -1090,8 +1118,9 @@ msgid "Start Game" msgstr "Spiel starten" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." -msgstr "Es sind keine Spiele installiert." +msgid "You need to install a game before you can create a world." +msgstr "" +"Sie müssen ein Spiel installieren, bevor Sie eine Welt erstellen können." #: builtin/mainmenu/tab_online.lua msgid "Address" @@ -1170,18 +1199,10 @@ msgstr "Lade Texturen …" msgid "Rebuilding shaders..." msgstr "Shader erneuern …" -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "Verbindungsfehler (Zeitüberschreitung?)" - #: src/client/clientlauncher.cpp msgid "Could not find or load game: " msgstr "Spiel konnte nicht gefunden oder geladen werden: " -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "Ungültige Spielspezifikationen" - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "Hauptmenü" @@ -1206,7 +1227,11 @@ msgstr "Fehler beim Öffnen der angegebenen Passwortdatei: " msgid "Provided world path doesn't exist: " msgstr "Angegebener Weltpfad existiert nicht: " -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "Medien …" + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp msgid "" "\n" "Check debug.txt for details." @@ -1214,18 +1239,10 @@ msgstr "" "\n" "Für mehr Details siehe debug.txt." -#: src/client/game.cpp -msgid "- Address: " -msgstr "- Adresse: " - #: src/client/game.cpp msgid "- Mode: " msgstr "- Modus: " -#: src/client/game.cpp -msgid "- Port: " -msgstr "- Port: " - #: src/client/game.cpp msgid "- Public: " msgstr "- Öffentlich: " @@ -1260,10 +1277,6 @@ msgstr "Vorwärtsautomatik aktiviert" msgid "Block bounds hidden" msgstr "Blockgrenzen verborgen" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "Blockgrenzen für alle Blöcke angezeigt" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "Blockgrenzen für aktuellen Block angezeigt" @@ -1309,6 +1322,10 @@ msgstr "Clientseitige Skripte sind deaktiviert" msgid "Connecting to server..." msgstr "Mit Server verbinden …" +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "Verbindungsfehler (Zeitüberschreitung?)" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "Verbindung aus unbekanntem Grund fehlgeschlagen" @@ -1317,46 +1334,13 @@ msgstr "Verbindung aus unbekanntem Grund fehlgeschlagen" msgid "Continue" msgstr "Weiter" -#: src/client/game.cpp -#, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" -"Steuerung:\n" -"- %s: Vorwärts\n" -"- %s: Rückwärts\n" -"- %s: Nach links\n" -"- %s: Nach rechts\n" -"- %s: Springen/hochklettern\n" -"- %s: Graben/schlagen/benutzen\n" -"- %s: Platzieren/benutzen\n" -"- %s: Kriechen/runterklettern\n" -"- %s: Gegenstand wegwerfen\n" -"- %s: Inventar\n" -"- Maus: Drehen/umschauen\n" -"- Mausrad: Gegenstand wählen\n" -"- %s: Chat\n" - #: src/client/game.cpp msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1368,8 +1352,8 @@ msgstr "" "Steuerung:\n" "Kein Menü sichtbar:\n" "- Finger wischen: Umsehen\n" -"- Antippen: Platzieren/benutzen\n" -"- Langes antippen: Graben/schlagen/benutzen\n" +"- Antippen: Platzieren/schlagen/benutzen (Standard)\n" +"- Langes antippen: Graben/benutzen (Standard)\n" "Menü/Inventar offen:\n" "- Doppelt antippen (außerhalb):\n" " --> schließen\n" @@ -1448,6 +1432,10 @@ msgstr "Nebel deaktiviert" msgid "Fog enabled" msgstr "Nebel aktiviert" +#: src/client/game.cpp +msgid "Fog enabled by game or mod" +msgstr "Nebel von Spiel oder Mod aktiviert" + #: src/client/game.cpp msgid "Game info:" msgstr "Spielinfo:" @@ -1468,10 +1456,6 @@ msgstr "Gegenstandsdefinitionen …" msgid "KiB/s" msgstr "KiB/s" -#: src/client/game.cpp -msgid "Media..." -msgstr "Medien …" - #: src/client/game.cpp msgid "MiB/s" msgstr "MiB/s" @@ -1632,10 +1616,6 @@ msgstr "Drahtmodell aktiv" msgid "Zoom currently disabled by game or mod" msgstr "Zoom ist momentan von Spiel oder Mod deaktiviert" -#: src/client/game.cpp -msgid "ok" -msgstr "OK" - #: src/client/gameui.cpp msgid "Chat currently disabled by game or mod" msgstr "Chat ist momentan von Spiel oder Mod deaktiviert" @@ -1956,6 +1936,15 @@ msgstr "Übersichtskarte im Bodenmodus, Zoom ×%d" msgid "Minimap in texture mode" msgstr "Übersichtskarte im Texturmodus" +#: src/client/shader.cpp +#, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "Fehler beim Kompilieren des „%s“-Shaders." + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "Shader sind aktiviert, aber GLSL wird vom Treiber nicht unterstützt." + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2149,6 +2138,18 @@ msgstr "Zoom" msgid "press key" msgstr "Taste drücken" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "Öffnen" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "URL öffnen?" + +#: src/gui/guiOpenURL.cpp +msgid "Unable to open URL" +msgstr "URL konnte nicht geöffnet werden" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "Ändern" @@ -2182,6 +2183,7 @@ msgstr "Tonlautstärke: %d%%" #. 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 "de" @@ -2420,12 +2422,6 @@ msgstr "Reichweite aktiver Objekte" msgid "Adds particles when digging a node." msgstr "Zeigt Partikel, wenn man einen Block ausgräbt." -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "DPI des Bildschirms (nicht für X11/Android) z.B. für 4K-Bildschirme." - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2456,6 +2452,10 @@ msgstr "Admin-Name" msgid "Advanced" msgstr "Erweitert" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "Erlaubt Flüssigkeiten, transluzent zu sein." + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2516,6 +2516,25 @@ msgstr "Gegenstandsnamen an Tooltip anhängen." msgid "Apple trees noise" msgstr "Apfelbaumrauschen" +#: 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 "" +"Dithering anwenden, um Artefakte beim Color-Banding zu reduzieren.\n" +"Dithering erhöht die Größe der verlustfrei komprimierten Bildschirmfotos\n" +"signifikant und es funktioniert nicht richtig, falls die Anzeige oder das\n" +"Betriebssystem zusätzliches Dithering anwendet oder, falls die Farbkanäle\n" +"nicht auf 8 Bits quantisiert sind.\n" +"Mit OpenGL ES funktioniert Dithering nur, falls der Shader eine hohe\n" +"Fließkommazahlenpräzision unterstützt, und das könnte zu höheren\n" +"Einbußen bei der Performanz führen." + #: src/settings_translation_file.cpp msgid "Arm inertia" msgstr "Armträgheit" @@ -2539,24 +2558,39 @@ msgid "" "clients.\n" "Small values potentially improve performance a lot, at the expense of " "visible\n" -"rendering glitches (some blocks will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." msgstr "" "In dieser Distanz wird der Server die zu den Clients gesendeten Blöcke " "aggressiv\n" "optimieren.\n" "Kleine Werte werden die Performanz möglicherweise stark erhöhen, auf\n" -"Kosten von sichtbaren Renderfehlern (einige Blöcke werden nicht unter dem " -"Wasser\n" -"und in Höhlen gerendert, sowie manchmal auf dem Land).\n" +"Kosten von sichtbaren Renderfehlern (einige Blöcke können eventuell in " +"Höhlen\n" +"nicht korrekt gerendert werden).\n" "Wird dieser Wert auf eine Zahl größer als max_block_send_distance gesetzt,\n" "wird diese Optimierung deaktiviert.\n" "In Kartenblöcken (16 Blöcke) angegeben." +#: 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 "" +"In dieser Distanz wird der Server einen einfacheren und günstigeren\n" +"Occlusion-Check machen.\n" +"Kleine Werte werden die Performanz möglicherweise stark erhöhen, auf\n" +"Kosten von sichtbaren Renderfehlern (fehlende Blöcke).\n" +"Dies ist besonders nützlich für eine hohe Sichtweite (über 500).\n" +"In Kartenblöcken (16 Blöcke) angegeben." + #: src/settings_translation_file.cpp msgid "Audio" msgstr "Ton" @@ -2617,6 +2651,10 @@ msgstr "Biom-API" msgid "Biome noise" msgstr "Biomrauschen" +#: src/settings_translation_file.cpp +msgid "Block cull optimize distance" +msgstr "Block-Cull-Optimierungsdistanz" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "Distanz für Sendeoptimierungen von Kartenblöcken" @@ -2833,6 +2871,15 @@ msgstr "Gefärbter Nebel" msgid "Colored shadows" msgstr "Gefärbte Schatten" +#: 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 "" +"Kommagetrennte Liste von AL- und ALC-Erweiterungen, welche nicht\n" +"benutzt werden sollen. Nützlich zum Testen. Siehe al_extensions.[h,cpp]\n" +"für Details." + #: src/settings_translation_file.cpp msgid "" "Comma-separated list of flags to hide in the content repository.\n" @@ -3003,10 +3050,6 @@ msgstr "" "Fadenkreuzfarbe (R,G,B).\n" "Gilt auch für das Objektfadenkreuz" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "DPI" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "Debugprotokolldateigrößengrenze" @@ -3062,6 +3105,31 @@ msgstr "" "Scheibe angewendet wird,\n" "aber dies verbraucht auch mehr Ressourcen." +#: 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" +"Minetest 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" +"Ä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" +"von strict_protocol_version_checking wird dies überschreiben." + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "Definiert Gebiete, in denen Bäume Äpfel tragen." @@ -3271,6 +3339,10 @@ msgstr "Bloom aktivieren" msgid "Enable Bloom Debug" msgstr "Bloom-Debug aktivieren" +#: src/settings_translation_file.cpp +msgid "Enable Debanding" +msgstr "Debanding aktivieren" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3297,6 +3369,10 @@ msgstr "" "Falls aktiv, werden Poisson-Scheiben verwendet, um „weiche Schatten“ zu " "erzeugen. Ansonsten wird die PCF-Filterung benutzt." +#: src/settings_translation_file.cpp +msgid "Enable Post Processing" +msgstr "Nachbearbeitung aktivieren" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "Raytraced Culling aktivieren" @@ -3347,6 +3423,10 @@ msgid "Enable mouse wheel (scroll) for item selection in hotbar." msgstr "" "Mausradscrollen für die Gegenstandsauswahl in der Schnellleiste aktivieren." +#: src/settings_translation_file.cpp +msgid "Enable random mod loading (mainly used for testing)." +msgstr "Schaltet zufälliges Modladen ein (nur zum Testen verwendet)." + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "Schaltet zufällige Steuerung ein (nur zum Testen verwendet)." @@ -3378,6 +3458,10 @@ msgstr "" "Sie\n" "erwarten, unterstützen." +#: src/settings_translation_file.cpp +msgid "Enable touchscreen" +msgstr "Touchscreen aktivieren" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3391,14 +3475,6 @@ msgstr "" "Texturen)\n" "während des Verbindungsaufbaus zum Server herunterzuladen." -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" -"Aktiviert Vertex Buffer Objects.\n" -"Dies sollte die Grafikperformanz beträchtlich verbessern." - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3441,6 +3517,21 @@ msgstr "" "Aktiviert das Zwischenspeichern von 3-D-Modellen, die mittels facedir " "rotiert werden." +#: 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 +msgid "Enables the post processing pipeline." +msgstr "Aktiviert die Nachbearbeitungspipeline." + +#: src/settings_translation_file.cpp +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." + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -3490,7 +3581,7 @@ msgstr "Bildwiederholrate" #: src/settings_translation_file.cpp msgid "FPS when unfocused or paused" -msgstr "Bildwiederholrate bei Bildwiederholrate/Pause" +msgstr "Bildwiederholrate wenn Fenster im Hintergrund/Spiel pausiert" #: src/settings_translation_file.cpp msgid "Factor noise" @@ -4411,13 +4502,15 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" -"Länge eines Servertakts und dem Zeitintervall, in dem Objekte über das " -"Netzwerk\n" -"üblicherweise aktualisiert werden; in Sekunden angegeben." +"Länge eines Servertakts (dem Intervall, wo grundsätzlich alles aktualisiert " +"wird),\n" +"in Sekunden.\n" +"Wirkt sich nicht auf Sitzungen aus, die vom Clientmenü gestartet wurden." #: src/settings_translation_file.cpp msgid "Length of liquid waves." @@ -4591,10 +4684,6 @@ msgstr "" "Nebel- und Himmelsfarben von der Tageszeit (Sonnenaufgang/Sonnenuntergang) " "und Blickrichtung abhängig machen." -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "Macht alle Flüssigkeiten undurchsichtig" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "Kartenkompressionsstufe für Festspeicher" @@ -4656,12 +4745,18 @@ 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." +"the 'jungles' flag is ignored.\n" +"The 'temples' flag disables generation of desert temples. Normal dungeons " +"will appear instead." msgstr "" "Kartengenerierungsattribute speziell für den Kartengenerator v6.\n" "Das Flag „snowbiomes“ aktiviert das neue 5-Biom-System.\n" "Falls das „snowbiomes“-Flag aktiviert ist, werden Dschungel automatisch " -"aktiviert und das „jungles“-Flag wird ignoriert." +"aktiviert und\n" +"das „jungles“-Flag wird ignoriert.\n" +"Das „temples“-Flag deaktiviert die Erzeugung von Wüstentempeln. Stattdessen " +"werden\n" +"normale Verliese auftauchen." #: src/settings_translation_file.cpp msgid "" @@ -4699,10 +4794,6 @@ msgstr "Kartenblockmesh-Generierungsverzögerung" msgid "Mapblock mesh generation threads" msgstr "Kartenblockmesh-Generierungsthreads" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "Cachegröße des Kartenblock-Meshgenerators in MB" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "Timeout zum Entladen von Kartenblöcken" @@ -4984,6 +5075,10 @@ msgstr "Minimaler Level des Prokolls, die in den Chat geschrieben werden soll." msgid "Minimap scan height" msgstr "Abtasthöhe der Übersichtskarte" +#: src/settings_translation_file.cpp +msgid "Minimum dig repetition interval" +msgstr "Minimale Grabungswiederholungsrate" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "Untergrenze der zufälligen Anzahl großer Höhlen je Mapchunk." @@ -5052,6 +5147,10 @@ msgstr "Mausempfindlichkeit" msgid "Mouse sensitivity multiplier." msgstr "Faktor für die Mausempfindlichkeit." +#: src/settings_translation_file.cpp +msgid "Movement threshold" +msgstr "Bewegungsschwellwert" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "Schlammrauschen" @@ -5195,10 +5294,6 @@ msgstr "Occlusion Culler" msgid "Occlusion Culling" msgstr "Occlusion Culling" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "Undurchsichtige Flüssigkeiten" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -5215,6 +5310,10 @@ msgstr "" "Das Pausemenü öffnen, wenn der Fokus des Fensters verloren geht.\n" "Wird nicht pausieren, wenn ein Formspec geöffnet ist." +#: src/settings_translation_file.cpp +msgid "OpenGL debug" +msgstr "OpenGL-Debug" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "Optionaler manueller Wert für die Farbe von Chat-Weblinks." @@ -5350,6 +5449,14 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "Anteil der großen Höhlen, die eine Flüssigkeit enthalten." +#: src/settings_translation_file.cpp +msgid "Protocol version minimum" +msgstr "Protokollversionsminimum" + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "Schlaggeste" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -5368,6 +5475,10 @@ msgstr "Erhöht das Gelände, um Täler um den Flüssen zu erzeugen." msgid "Random input" msgstr "Zufällige Steuerung" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "Zufällige Modladereihenfolge" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "Letzte Chatnachrichten" @@ -5585,8 +5696,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5605,9 +5716,10 @@ msgstr "" "* None – Keine Kantenglättung (Standard)\n" "\n" "* FSAA – Von der Hardware bereitgestellte Vollbildkantenglättung (nicht\n" -"kompatibel mit Shadern), auch bekannt als Multi-Sample Antialiasing (MSAA).\n" -"Glättet Blockkanten aus, beeinträchtigt aber nicht die Innenseiten der " -"Texturen.\n" +"kompatibel mit Nachbearbeitung und Unterabtastung), auch bekannt\n" +"als Multi-Sample Antialiasing (MSAA). Glättet Blockkanten aus, " +"beeinträchtigt\n" +"aber nicht die Innenseiten der Texturen.\n" "Um diese Option zu ändern, ist ein Neustart erforderlich.\n" "\n" "* FXAA – Schnelle annähende Kantenglättung (benötigt Shader).\n" @@ -5617,7 +5729,7 @@ msgstr "" "Bildqualität.\n" "\n" "* SSAA – Super-Sampling-Kantenglättung (benötigt Shader).\n" -"Rendert ein hochauflösendes Bild der Szene, dann skaliert es nach unten, um\n" +"Rendert ein hochauflösendes Bild der Szene, dann skaliert es herunter, um\n" "die Aliasing-Effekte zu reduzieren. Dies ist die langsamste und genaueste " "Methode." @@ -5749,10 +5861,10 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" -"Setzt die Sprache. Leer lassen, um Systemsprache zu verwenden.\n" +"Setzt die Sprache. Standardmäßig wird die Systemsprache zu verwendet.\n" "Nach Änderung ist ein Neustart erforderlich." #: src/settings_translation_file.cpp @@ -5796,6 +5908,12 @@ msgstr "" "Aktivieren, um den Bloomeffekt zu aktivieren.\n" "Helle Farben werden sich über die benachbarten Objekte ausbreiten." +#: src/settings_translation_file.cpp +msgid "Set to true to enable volumetric lighting effect (a.k.a. \"Godrays\")." +msgstr "" +"Auf wahr setzen, um volumetrische Lichteffekte zu aktivieren (auch bekannt " +"als „Gottesstrahlen“/„Godrays“)." + #: src/settings_translation_file.cpp msgid "Set to true to enable waving leaves." msgstr "Auf „wahr“ setzen, um wehende Blätter zu aktivieren." @@ -5827,9 +5945,9 @@ msgid "" "On false, 16 bits texture will be used.\n" "This can cause much more artifacts in the shadow." msgstr "" -"Setzt die Schattentexturqualität auf 32 Bits.\n" +"Setzt die Schattentexturqualität auf 32 Bit.\n" "Falls deaktiviert, werden 16-Bit-Texturen benutzt.\n" -"Dies kann zu viel mehr Artefakten im Schatten führen." +"Dies kann zu viel mehr Artefakten in Schatten führen." #: src/settings_translation_file.cpp msgid "Shader path" @@ -5843,13 +5961,11 @@ msgstr "Shader" msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" "Shader ermöglichen fortgeschrittene visuelle Effekte und können die " "Performanz auf\n" -"einigen Grafikkarten erhöhen.\n" -"Das funktioniert nur mit dem OpenGL-Grafik-Backend." +"einigen Grafikkarten erhöhen." #: src/settings_translation_file.cpp msgid "Shadow filter quality" @@ -5861,7 +5977,7 @@ msgstr "Maximale Schattenrenderdistanz von Schattenkarten in Blöcken" #: src/settings_translation_file.cpp msgid "Shadow map texture in 32 bits" -msgstr "Schattenkartentextur in 32 Bits" +msgstr "Schattenkartentextur mit 32 Bit" #: src/settings_translation_file.cpp msgid "Shadow map texture size" @@ -5936,17 +6052,6 @@ msgstr "" "Die Änderung dieses Wertes ist für besondere Verwendungszwecke, es\n" "wird empfohlen, ihn unverändert zu lassen." -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" -"Größe vom Kartenblock-Cache des Meshgenerators. Wird sie\n" -"erhöht, wird die Cache-Trefferrate erhöht, was die Anzahl der Daten,\n" -"die vom Hauptthread kopiert werden, reduziert und somit das Stottern " -"reduziert." - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "Himmelskörperorbitneigung" @@ -5983,10 +6088,10 @@ msgstr "Weiches Licht" #: 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 Change Keys." +"cinematic mode by using the key set in Controls." msgstr "" -"Glättet die Rotation der Kamera im Filmmodus. 0 zum Ausschalten.\n" -"Der Filmmodus kann aktiviert werden, indem die entsprechende Taste in der " +"Glättet die Rotation der Kamera im Filmmodus. 0 zum Ausschalten. Der " +"Filmmodus kann aktiviert werden, indem die entsprechende Taste in der " "Tastenbelegung benutzt wird." #: src/settings_translation_file.cpp @@ -6009,6 +6114,14 @@ msgstr "Schleichgeschwindigkeit, in Blöcken pro Sekunde." msgid "Soft shadow radius" msgstr "Weicher-Schatten-Radius" +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "Ton" + +#: src/settings_translation_file.cpp +msgid "Sound Extensions Blacklist" +msgstr "Schwarze Liste der Sounderweiterungen" + #: src/settings_translation_file.cpp msgid "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -6217,21 +6330,53 @@ msgstr "" "Das Standardformat, in dem Profile gespeichert werden,\n" "wenn „/profiler save [Format]“ ohne Format aufgerufen wird." +#: src/settings_translation_file.cpp +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." + #: src/settings_translation_file.cpp msgid "" "The file path relative to your world path in which profiles will be saved to." msgstr "" "Der Dateipfad relativ zu Ihrem Weltpfad, in dem Profile abgespeichert werden." +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" +"Die Geste für 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 " +"sollen.\n" +"\n" +"* long_tap\n" +"Bekannt aus der klassischen Mineteststeuerung für mobile Endgeräte.\n" +"Der Kampf ist mehr oder weniger unmöglich." + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "Die Kennung des zu verwendeten Joysticks" #: src/settings_translation_file.cpp -msgid "The length in pixels it takes for touchscreen interaction to start." +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 Touchscreen-Interaktion " -"beginnt." +"Die Länge in Pixeln, die benötigt wird, damit die Touch-Interaktion als " +"Bewegung zählt." #: src/settings_translation_file.cpp msgid "" @@ -6245,6 +6390,15 @@ msgstr "" "0.0 = Wellen bewegen sich gar nicht.\n" "Standard ist 1.0 (1/2 Block)." +#: src/settings_translation_file.cpp +msgid "" +"The minimum time in seconds it takes between digging nodes when holding\n" +"the dig button." +msgstr "" +"Die minimale Zeit in Sekunden, die zwischen dem Graben von Blöcken benötigt " +"wird,\n" +"wenn die Grabetaste gedrückt gehalten wird." + #: src/settings_translation_file.cpp msgid "The network interface that the server listens on." msgstr "Die Netzwerkschnittstelle, auf die der Server lauscht." @@ -6281,13 +6435,13 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." 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 unter OpenGL und OGLES2 (experimentell) unterstützt." +"Shader werden von allem außer OGLES1 unterstützt." #: src/settings_translation_file.cpp msgid "" @@ -6368,6 +6522,10 @@ msgstr "" "Das dritte von vier 2-D-Rauschen, welche gemeinsam Hügel-/Bergkettenhöhe " "definieren." +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "Schwelle für langes Antippen" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -6424,14 +6582,14 @@ msgstr "Touchscreenempfindlichkeit" msgid "Touchscreen sensitivity multiplier." msgstr "Faktor für die Touchscreenempfindlichkeit." -#: src/settings_translation_file.cpp -msgid "Touchscreen threshold" -msgstr "Touchscreenschwellwert" - #: src/settings_translation_file.cpp msgid "Tradeoffs for performance" msgstr "Kompromisse für Performanz" +#: src/settings_translation_file.cpp +msgid "Translucent liquids" +msgstr "Transluzente Flüssigkeiten" + #: src/settings_translation_file.cpp msgid "Transparency Sorting Distance" msgstr "Transparenzsortierungsdistanz" @@ -6480,10 +6638,13 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 zu einer JSON-Datei, welche Informationen über das neueste Minetest-" -"Release enthält" +"Release enthält\n" +"Wenn dies leer ist, wird die Engine nie nach Updates suchen." #: src/settings_translation_file.cpp msgid "URL to the server list displayed in the Multiplayer Tab." @@ -6544,9 +6705,8 @@ msgstr "" "heraus geschaut wird." #: src/settings_translation_file.cpp -#, fuzzy msgid "Use bilinear filtering when scaling textures." -msgstr "Trilineare Filterung bei der Skalierung von Texturen benutzen." +msgstr "Bilineare Filterung bei der Skalierung von Texturen benutzen." #: src/settings_translation_file.cpp msgid "Use crosshair for touch screen" @@ -6563,13 +6723,12 @@ msgstr "" "Objekten gebraucht." #: src/settings_translation_file.cpp -#, fuzzy 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 "" -"Mipmaps zum Verkleinern von Texturen verwenden. Könnte die Performanz\n" +"Mipmaps bei der Skalierung von Texturen verwenden. Könnte die Performanz\n" "leicht erhöhen, besonders, wenn ein hochauflösendes Texturenpaket benutzt " "wird.\n" "Eine gammakorrigierte Herunterskalierung wird nicht unterstützt." @@ -6586,13 +6745,12 @@ msgstr "" "für Client-Meshgroßen, die kleiner als 4×4×4 Kartenblöcke große sind." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Use trilinear filtering when scaling textures.\n" "If both bilinear and trilinear filtering are enabled, trilinear filtering\n" "is applied." msgstr "" -"Trilineare Filterung bei der Herunterskalierung von Texturen benutzen.\n" +"Trilineare Filterung bei der Skalierung von Texturen benutzen.\n" "Falls sowohl die bilineare als auch trilineare Filterung aktiviert sind,\n" "wird die trilineare Filterung angewandt." @@ -6610,10 +6768,6 @@ msgstr "" msgid "User Interfaces" msgstr "Benutzeroberflächen" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "VBO" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "VSync" @@ -6708,6 +6862,10 @@ msgstr "Virtueller Joystick löst Aux1-Taste aus" msgid "Volume" msgstr "Tonlautstärke" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +msgstr "Lautstärkenfaktor, wenn das Fenster nicht im Fokus steht." + #: src/settings_translation_file.cpp msgid "" "Volume of all sounds.\n" @@ -6716,6 +6874,14 @@ msgstr "" "Lautstärke aller Töne.\n" "Dafür muss das Tonsystem aktiviert sein." +#: src/settings_translation_file.cpp +msgid "Volume when unfocused" +msgstr "Lautstärke außerhalb Fokus" + +#: src/settings_translation_file.cpp +msgid "Volumetric lighting" +msgstr "Volumetrisches Licht" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -7020,12 +7186,18 @@ msgstr "cURL-Parallel-Begrenzung" #~ msgid "(game support required)" #~ msgstr "(Spielunterstützung benötigt)" +#~ msgid "- Address: " +#~ msgstr "- Adresse: " + #~ msgid "- Creative Mode: " #~ msgstr "- Kreativmodus: " #~ msgid "- Damage: " #~ msgstr "- Schaden: " +#~ msgid "- Port: " +#~ msgstr "- Port: " + #~ msgid "" #~ "0 = parallax occlusion with slope information (faster).\n" #~ "1 = relief mapping (slower, more accurate)." @@ -7063,6 +7235,12 @@ msgstr "cURL-Parallel-Begrenzung" #~ "Leer lassen, um einen lokalen Server zu starten.\n" #~ "Die Adresse im Hauptmenü überschreibt diese Einstellung." +#~ msgid "" +#~ "Adjust dpi configuration to your screen (non X11/Android only) e.g. for " +#~ "4k screens." +#~ msgstr "" +#~ "DPI des Bildschirms (nicht für X11/Android) z.B. für 4K-Bildschirme." + #~ msgid "" #~ "Adjust the gamma encoding for the light tables. Higher numbers are " #~ "brighter.\n" @@ -7133,6 +7311,9 @@ msgstr "cURL-Parallel-Begrenzung" #~ msgid "Bits per pixel (aka color depth) in fullscreen mode." #~ msgstr "Bits pro Pixel (Farbtiefe) im Vollbildmodus." +#~ msgid "Block bounds shown for all blocks" +#~ msgstr "Blockgrenzen für alle Blöcke angezeigt" + #~ msgid "Bump Mapping" #~ msgstr "Bumpmapping" @@ -7159,6 +7340,9 @@ msgstr "cURL-Parallel-Begrenzung" #~ msgid "Center of light curve mid-boost." #~ msgstr "Mitte der Lichtkurven-Mittenverstärkung." +#~ msgid "Change Keys" +#~ msgstr "Tastenbelegung" + #~ msgid "Change keys" #~ msgstr "Tastenbelegung" @@ -7237,6 +7421,38 @@ msgstr "cURL-Parallel-Begrenzung" #~ "Legt die Breite von Tunneln fest; ein kleinerer Wert erzeugt breitere " #~ "Tunnel." +#, c-format +#~ msgid "" +#~ "Controls:\n" +#~ "- %s: move forwards\n" +#~ "- %s: move backwards\n" +#~ "- %s: move left\n" +#~ "- %s: move right\n" +#~ "- %s: jump/climb up\n" +#~ "- %s: dig/punch/use\n" +#~ "- %s: place/use\n" +#~ "- %s: sneak/climb down\n" +#~ "- %s: drop item\n" +#~ "- %s: inventory\n" +#~ "- Mouse: turn/look\n" +#~ "- Mouse wheel: select item\n" +#~ "- %s: chat\n" +#~ msgstr "" +#~ "Steuerung:\n" +#~ "- %s: Vorwärts\n" +#~ "- %s: Rückwärts\n" +#~ "- %s: Nach links\n" +#~ "- %s: Nach rechts\n" +#~ "- %s: Springen/hochklettern\n" +#~ "- %s: Graben/schlagen/benutzen\n" +#~ "- %s: Platzieren/benutzen\n" +#~ "- %s: Kriechen/runterklettern\n" +#~ "- %s: Gegenstand wegwerfen\n" +#~ "- %s: Inventar\n" +#~ "- Maus: Drehen/umschauen\n" +#~ "- Mausrad: Gegenstand wählen\n" +#~ "- %s: Chat\n" + #~ msgid "Creative" #~ msgstr "Kreativ" @@ -7246,6 +7462,9 @@ msgstr "cURL-Parallel-Begrenzung" #~ msgid "Crosshair color (R,G,B)." #~ msgstr "Fadenkreuzfarbe (R,G,B)." +#~ msgid "DPI" +#~ msgstr "DPI" + #~ msgid "Damage" #~ msgstr "Schaden" @@ -7347,6 +7566,13 @@ msgstr "cURL-Parallel-Begrenzung" #~ msgid "Enable register confirmation" #~ msgstr "Registrierungsbestätigung aktivieren" +#~ msgid "" +#~ "Enable vertex buffer objects.\n" +#~ "This should greatly improve graphics performance." +#~ msgstr "" +#~ "Aktiviert Vertex Buffer Objects.\n" +#~ "Dies sollte die Grafikperformanz beträchtlich verbessern." + #~ msgid "Enabled" #~ msgstr "Aktiviert" @@ -7665,6 +7891,9 @@ msgstr "cURL-Parallel-Begrenzung" #~ msgid "Instrumentation" #~ msgstr "Instrumentierung" +#~ msgid "Invalid gamespec." +#~ msgstr "Ungültige Spielspezifikationen" + #~ msgid "Inventory key" #~ msgstr "Inventartaste" @@ -8362,6 +8591,12 @@ msgstr "cURL-Parallel-Begrenzung" #~ "DirectX mit LuaJIT zusammenarbeiten lassen. Deaktivieren Sie dies, falls " #~ "es Probleme verursacht." +#~ msgid "Makes all liquids opaque" +#~ msgstr "Macht alle Flüssigkeiten undurchsichtig" + +#~ msgid "Mapblock mesh generator's MapBlock cache size in MB" +#~ msgstr "Cachegröße des Kartenblock-Meshgenerators in MB" + #~ msgid "Menus" #~ msgstr "Menüs" @@ -8610,15 +8845,22 @@ msgstr "cURL-Parallel-Begrenzung" #~ msgid "Simple Leaves" #~ msgstr "Einfache Blätter" +#~ msgid "" +#~ "Size of the MapBlock cache of the mesh generator. Increasing this will\n" +#~ "increase the cache hit %, reducing the data being copied from the main\n" +#~ "thread, thus reducing jitter." +#~ msgstr "" +#~ "Größe vom Kartenblock-Cache des Meshgenerators. Wird sie\n" +#~ "erhöht, wird die Cache-Trefferrate erhöht, was die Anzahl der Daten,\n" +#~ "die vom Hauptthread kopiert werden, reduziert und somit das Stottern " +#~ "reduziert." + #~ msgid "Smooth Lighting" #~ msgstr "Weiches Licht" #~ msgid "Smooths rotation of camera. 0 to disable." #~ msgstr "Glättet die Rotation der Kamera. 0 zum Ausschalten." -#~ msgid "Sound" -#~ msgstr "Ton" - #~ msgid "Special" #~ msgstr "Spezial" @@ -8682,6 +8924,9 @@ msgstr "cURL-Parallel-Begrenzung" #~ msgid "Touch threshold (px):" #~ msgstr "Berührungsempfindlichkeit (px):" +#~ msgid "Touchscreen threshold" +#~ msgstr "Touchscreenschwellwert" + #~ msgid "Trilinear Filter" #~ msgstr "Trilinearer Filter" @@ -8736,6 +8981,9 @@ msgstr "cURL-Parallel-Begrenzung" #~ "Wenn der Wert auf 0 steht, ist MSAA deaktiviert.\n" #~ "Ein Neustart ist erforderlich, nachdem diese Option geändert worden ist." +#~ msgid "VBO" +#~ msgstr "VBO" + #~ msgid "Variation of hill height and lake depth on floatland smooth terrain." #~ msgstr "" #~ "Variierung der Hügelhöhe und Seetiefe in den ruhig verlaufenden\n" @@ -8843,8 +9091,14 @@ msgstr "cURL-Parallel-Begrenzung" #~ msgid "You died." #~ msgstr "Sie sind gestorben." +#~ msgid "You have no games installed." +#~ msgstr "Es sind keine Spiele installiert." + #~ msgid "Z" #~ msgstr "Z" #~ msgid "needs_fallback_font" #~ msgstr "no" + +#~ msgid "ok" +#~ msgstr "OK" diff --git a/po/dv/minetest.po b/po/dv/minetest.po index 5b4e721cd..5fe66e3b1 100644 --- a/po/dv/minetest.po +++ b/po/dv/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Dhivehi (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" "PO-Revision-Date: 2019-11-10 15:04+0000\n" "Last-Translator: Krock \n" "Language-Team: Dhivehi ]" -msgstr "" - -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" +msgid "[all | ] [-t]" msgstr "" #: builtin/fstk/ui.lua @@ -106,6 +102,10 @@ msgstr "މޮޑެއްފަދަ ލުއޭ ސްކްރިޕްޓެއްގައި މައް msgid "Main menu" msgstr "maigandu menu" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "aa gulhumeh" @@ -134,179 +134,186 @@ msgstr "އަޅުގަނޑުމެން ހަމައެކަނި ސަޕޯޓްކުރަނީ msgid "We support protocol versions between version $1 and $2." msgstr "އަޅުގަނޑުމެން 1$ އާއި 2$ އާއި ދެމެދުގެ ޕޮރޮޓޮކޯލް ވާޝަންތައް ސަޕޯޓް ކުރަން." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "Failed to download \"$1\"" +msgstr "$1 ނޭޅުނު" + +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr "$1 ނޭޅުނު" + +#: builtin/mainmenu/content/contentdb.lua +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua #, fuzzy msgid "$1 downloading..." msgstr "ލޯޑްވަނީ..." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "އެނބުރި މެއިން މެނޫއަށް" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#, fuzzy +msgid "Downloading..." +msgstr "ލޯޑްވަނީ..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "ގޭމްތައް" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +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 "Mods" +msgstr "މޮޑްތައް" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "ފުހެލާ" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "" + +#: 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 "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua #, fuzzy msgid "Base Game:" msgstr "ގޭމް ހޮސްޓްކުރޭ" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "ކެންސަލް" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "ބަރޯސާވާ(ޑިޕެންޑެންސީޒް):" -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Downloading..." -msgstr "ލޯޑްވަނީ..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to download \"$1\"" -msgstr "$1 ނޭޅުނު" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "$1 ނޭޅުނު" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "ގޭމްތައް" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "އަޅާ" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #, fuzzy msgid "Install $1" msgstr "އަޅާ" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #, fuzzy msgid "Install missing dependencies" msgstr "ލާޒިމުނޫން ޑިޕެންޑެންސީތައް:" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "ލޯޑްވަނީ..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "މޮޑްތައް" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "ފުހެލާ" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" msgstr "" #: builtin/mainmenu/content/pkgmgr.lua @@ -463,11 +470,21 @@ msgstr "ހަދާ" msgid "Decorations" msgstr "މޮޑްގެ މައުލޫލާތު:" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua #, fuzzy msgid "Development Test is meant for developers." msgstr "އިންޒާރު: މިނިމަލް ޑިވެލޮޕްމަންޓް ހާއްސަކުރެވިފައިވަނީ ޑިވެލޮޕަރުންނަށް." +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "" @@ -835,10 +852,6 @@ msgstr "" msgid "Back" msgstr "" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -848,7 +861,8 @@ msgstr "" msgid "Clear" msgstr "" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "" @@ -1060,6 +1074,16 @@ msgstr "އަޅާ" msgid "Install games from ContentDB" msgstr "" +#: builtin/mainmenu/tab_local.lua +msgid "Minetest 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 " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "އައު" @@ -1095,8 +1119,8 @@ msgid "Start Game" msgstr "ގޭމް ހޮސްޓްކުރޭ" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." -msgstr "އެއްވެސް ސަބްގޭމެއް އެޅިފައެއް ނެތް." +msgid "You need to install a game before you can create a world." +msgstr "" #: builtin/mainmenu/tab_online.lua #, fuzzy @@ -1181,18 +1205,10 @@ msgstr "" msgid "Rebuilding shaders..." msgstr "" -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "" - #: src/client/clientlauncher.cpp msgid "Could not find or load game: " msgstr "" -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "" - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "މެއިން މެނޫ" @@ -1217,24 +1233,20 @@ msgstr "" msgid "Provided world path doesn't exist: " msgstr "" -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +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 "- Address: " -msgstr "" - #: src/client/game.cpp msgid "- Mode: " msgstr "" -#: src/client/game.cpp -msgid "- Port: " -msgstr "" - #: src/client/game.cpp msgid "- Public: " msgstr "" @@ -1271,10 +1283,6 @@ msgstr "އަނިޔާވުން ޖައްސާފައި" msgid "Block bounds hidden" msgstr "" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "" @@ -1321,6 +1329,10 @@ msgstr "" msgid "Connecting to server..." msgstr "" +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "" @@ -1329,33 +1341,14 @@ msgstr "" msgid "Continue" msgstr "" -#: src/client/game.cpp -#, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" - #: src/client/game.cpp #, fuzzy msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1451,6 +1444,10 @@ msgstr "އޮފްކޮށްފަ" msgid "Fog enabled" msgstr "ޖައްސާފަ" +#: src/client/game.cpp +msgid "Fog enabled by game or mod" +msgstr "" + #: src/client/game.cpp msgid "Game info:" msgstr "" @@ -1471,10 +1468,6 @@ msgstr "" msgid "KiB/s" msgstr "" -#: src/client/game.cpp -msgid "Media..." -msgstr "" - #: src/client/game.cpp msgid "MiB/s" msgstr "" @@ -1631,10 +1624,6 @@ msgstr "" msgid "Zoom currently disabled by game or mod" msgstr "" -#: src/client/game.cpp -msgid "ok" -msgstr "" - #: src/client/gameui.cpp msgid "Chat currently disabled by game or mod" msgstr "" @@ -1957,6 +1946,15 @@ msgstr "" msgid "Minimap in texture mode" msgstr "" +#: src/client/shader.cpp +#, fuzzy, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "$1 ނޭޅުނު" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2149,6 +2147,19 @@ msgstr "" msgid "press key" msgstr "" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +#, fuzzy +msgid "Unable to open URL" +msgstr "$1 ނޭޅުނު" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "" @@ -2182,6 +2193,7 @@ msgstr "" #. 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 "dv" @@ -2367,12 +2379,6 @@ msgstr "" msgid "Adds particles when digging a node." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2396,6 +2402,10 @@ msgstr "ދުނިޔޭގެ ނަން" msgid "Advanced" msgstr "" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2450,6 +2460,17 @@ msgstr "" msgid "Apple trees noise" 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 "Arm inertia" msgstr "" @@ -2471,12 +2492,21 @@ msgid "" "clients.\n" "Small values potentially improve performance a lot, at the expense of " "visible\n" -"rendering glitches (some blocks will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +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 @@ -2539,6 +2569,10 @@ msgstr "" msgid "Biome noise" msgstr "" +#: src/settings_translation_file.cpp +msgid "Block cull optimize distance" +msgstr "" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "" @@ -2752,6 +2786,12 @@ msgstr "" msgid "Colored shadows" 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -2884,10 +2924,6 @@ msgid "" "Also controls the object crosshair color" msgstr "" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "" @@ -2937,6 +2973,19 @@ msgid "" "but also uses more resources." 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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "" @@ -3123,6 +3172,11 @@ msgstr "ހުރިހާއެއްޗެއް ޖައްސާ" msgid "Enable Bloom Debug" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Debanding" +msgstr "ގެއްލުން ޖައްސާ" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3142,6 +3196,10 @@ msgid "" "filtering." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable Post Processing" +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "" @@ -3184,6 +3242,10 @@ msgstr "" msgid "Enable mouse wheel (scroll) for item selection in hotbar." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable random mod loading (mainly used for testing)." +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3207,6 +3269,10 @@ msgid "" "expecting." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable touchscreen" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3215,12 +3281,6 @@ msgid "" "when connecting to the server." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3250,6 +3310,19 @@ msgstr "" msgid "Enables caching of facedir rotated meshes." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -4045,9 +4118,10 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" #: src/settings_translation_file.cpp @@ -4193,10 +4267,6 @@ msgid "" "Make fog and sky colors depend on daytime (dawn/sunset) and view direction." msgstr "" -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "" @@ -4245,7 +4315,9 @@ 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." +"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 @@ -4280,10 +4352,6 @@ msgstr "" msgid "Mapblock mesh generation threads" msgstr "" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "" @@ -4531,6 +4599,10 @@ msgstr "" msgid "Minimap scan height" msgstr "" +#: src/settings_translation_file.cpp +msgid "Minimum dig repetition interval" +msgstr "" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "" @@ -4599,6 +4671,10 @@ msgstr "" msgid "Mouse sensitivity multiplier." msgstr "" +#: src/settings_translation_file.cpp +msgid "Movement threshold" +msgstr "" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "" @@ -4710,10 +4786,6 @@ msgstr "" msgid "Occlusion Culling" msgstr "" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -4726,6 +4798,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "OpenGL debug" +msgstr "" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "" @@ -4835,6 +4911,15 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Protocol version minimum" +msgstr "ޕްރޮޓޮކޯލް ވާޝަން ފުށުއެރުމެއް. " + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -4850,6 +4935,10 @@ msgstr "" msgid "Random input" msgstr "" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "" @@ -5039,8 +5128,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5161,7 +5250,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" @@ -5194,6 +5283,10 @@ msgid "" "Bright colors will bleed over the neighboring objects." 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 "Set to true to enable waving leaves." msgstr "" @@ -5233,8 +5326,7 @@ msgstr "" msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" #: src/settings_translation_file.cpp @@ -5304,13 +5396,6 @@ msgid "" "recommended." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "" @@ -5346,7 +5431,7 @@ 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 Change Keys." +"cinematic mode by using the key set in Controls." msgstr "" #: src/settings_translation_file.cpp @@ -5367,6 +5452,14 @@ msgstr "" msgid "Soft shadow radius" 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 "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -5523,17 +5616,37 @@ msgid "" "when calling `/profiler save [format]` without format." 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 "" "The file path relative to your world path in which profiles will be saved to." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "" #: src/settings_translation_file.cpp -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" #: src/settings_translation_file.cpp @@ -5544,6 +5657,12 @@ msgid "" "Default is 1.0 (1/2 node)." 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 "The network interface that the server listens on." msgstr "" @@ -5570,7 +5689,7 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" #: src/settings_translation_file.cpp @@ -5627,6 +5746,10 @@ msgstr "" msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "" +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -5674,11 +5797,11 @@ msgid "Touchscreen sensitivity multiplier." msgstr "" #: src/settings_translation_file.cpp -msgid "Touchscreen threshold" +msgid "Tradeoffs for performance" msgstr "" #: src/settings_translation_file.cpp -msgid "Tradeoffs for performance" +msgid "Translucent liquids" msgstr "" #: src/settings_translation_file.cpp @@ -5716,7 +5839,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 "" #: src/settings_translation_file.cpp @@ -5814,10 +5939,6 @@ msgstr "" msgid "User Interfaces" msgstr "" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "" @@ -5904,12 +6025,24 @@ msgstr "" msgid "Volume" msgstr "" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +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 "Volumetric lighting" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6263,5 +6396,8 @@ msgstr "" #~ msgid "You died." #~ msgstr "މަރުވީ" +#~ msgid "You have no games installed." +#~ msgstr "އެއްވެސް ސަބްގޭމެއް އެޅިފައެއް ނެތް." + #~ msgid "needs_fallback_font" #~ msgstr "yes" diff --git a/po/el/minetest.po b/po/el/minetest.po index 5cb133b4e..7836d1c70 100644 --- a/po/el/minetest.po +++ b/po/el/minetest.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: Greek (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" -"PO-Revision-Date: 2023-04-10 18:50+0000\n" -"Last-Translator: Alexandros Koutroulis \n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" +"PO-Revision-Date: 2024-01-14 12:31+0000\n" +"Last-Translator: RRadler \n" "Language-Team: Greek \n" "Language: el\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.17-dev\n" +"X-Generator: Weblate 5.4-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -72,7 +72,8 @@ msgid "Command not available: " msgstr "Η εντολή δεν είναι διαθέσιμη: " #: builtin/common/chatcommands.lua -msgid "Get help for commands" +#, fuzzy +msgid "Get help for commands (-t: output in chat)" msgstr "Βοήθεια για τις εντολές" #: builtin/common/chatcommands.lua @@ -83,13 +84,10 @@ msgstr "" "'.help all' για την λίστα των εντολών." #: builtin/common/chatcommands.lua -msgid "[all | ]" +#, fuzzy +msgid "[all | ] [-t]" msgstr "[all | <εντολή>]" -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" -msgstr "Εντάξει" - #: builtin/fstk/ui.lua msgid "" msgstr "<κανένα διαθέσιμο>" @@ -106,6 +104,10 @@ msgstr "Παρουσιάστηκε σφάλμα:" msgid "Main menu" msgstr "Κύριο μενού" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "Εντάξει" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Επανασύνδεση" @@ -134,19 +136,28 @@ msgstr "Υποστηρίζουμε μόνο το πρωτόκολλο έκδοσ msgid "We support protocol versions between version $1 and $2." msgstr "Υποστηρίζουμε τις εκδόσεις πρωτοκόλλων μεταξύ της έκδοσης $1 και $2." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "Το \"$1\" ήδη υπάρχει. Θέλετε να το αντικαταστήσετε;" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" +msgstr "Πρόβλημα κατά την εγκατάσταση \"$1\": $2" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." -msgstr "Οι εξαρτήσεις $1 και $2 θα εγκατασταθούν." +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download \"$1\"" +msgstr "Η λήψη του \"$1\" απέτυχε" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" -msgstr "$1 με $2" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr "Η λήψη του $1 απέτυχε" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "" +"Απέτυχε η εξαγωγή του \"$1\" (Μη υποστηριζόμενος τύπος αρχείου ή " +"κατεστραμμένο αρχείο)" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" @@ -154,159 +165,158 @@ msgstr "" "$1 σε λήψη,\n" "$2 σε αναμονή" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." msgstr "Λήψη ..." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "Δεν ήταν δυνατή η εύρεση των απαιτούμενων εξαρτήσεων $1." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "Θα εγκατασταθεί το $1 και οι εξαρτήσεις $2 θα παραβλεφθούν." - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "Όλα τα Πακέτα" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "Ήδη εγκαταστημένο" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "Πίσω στο Κύριο Μενού" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "" +"Το ContentDB δεν είναι διαθέσιμο όταν το Minetest μεταγλωττίστηκε χωρίς cURL" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "Λήψη ..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "Παιχνίδια" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +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 "Mods" +msgstr "Τροποποιήσεις" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "Δεν ήταν δυνατή η ανάκτηση πακέτων" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "Χωρίς αποτελέσματα" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "Δεν υπάρχουν ενημερώσεις" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "Σε αναμονή" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "Πακέτα υφής" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "Το πακέτο $1 δεν βρέθηκε." + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "Απεγκατάσταση" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "Αναβάθμιση" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "Ενημέρωση Όλων [$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 και $2 θα εγκατασταθούν." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "$1 με $2" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "Δεν ήταν δυνατή η εύρεση των απαιτούμενων εξαρτήσεων $1." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "Θα εγκατασταθεί το $1 και οι εξαρτήσεις $2 θα παραβλεφθούν." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "Ήδη εγκαταστημένο" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "Βασικό παιχνίδι:" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "Άκυρο" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "" -"Το ContentDB δεν είναι διαθέσιμο όταν το Minetest μεταγλωττίστηκε χωρίς cURL" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "Εξαρτήσεις:" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "Λήψη ..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to download \"$1\"" -msgstr "Η λήψη του $1 απέτυχε" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "Η λήψη του $1 απέτυχε" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "Εγκατάσταση: Μη υποστηριζόμενος τύπος αρχείου ή κατεστραμμένο αρχείο" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "Παιχνίδια" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "Εγκατάσταση" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "Εγκατάσταση $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "Εγκατάσταση των εξαρτήσεων που λείπουν" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "Φόρτωση..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "Τροποποιήσεις" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "Δεν ήταν δυνατή η ανάκτηση πακέτων" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "Χωρίς αποτελέσματα" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "Δεν υπάρχουν ενημερώσεις" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "Δε βρέθηκε" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "Αντικατάσταση" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "Ελέγξτε ότι το βασικό παιχνίδι είναι σωστό." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" -msgstr "Σε αναμονή" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" +msgstr "Το \"$1\" ήδη υπάρχει. Θέλετε να το αντικαταστήσετε;" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "Πακέτα υφής" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "Απεγκατάσταση" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "Αναβάθμιση" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "Ενημέρωση Όλων [$1]" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "Δείτε περισσότερες πληροφορίες σε ένα πρόγραμμα περιήγησης ιστού" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" -msgstr "" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" +msgstr "Αντικατάσταση" #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" @@ -321,21 +331,18 @@ msgid "Failed to install $1 to $2" msgstr "Αποτυχία εγκατάστασης $1 έως $2" #: builtin/mainmenu/content/pkgmgr.lua -#, fuzzy msgid "Install: Unable to find suitable folder name for $1" msgstr "" -"Εγκατάσταση Τροποποίησης: Δεν είναι δυνατή η εύρεση του κατάλληλου ονόματος " -"φακέλου για την τροποποίηση $1" +"Εγκατάσταση: Δεν είναι δυνατή η εύρεση του κατάλληλου ονόματος φακέλου για " +"το $1" #: builtin/mainmenu/content/pkgmgr.lua -#, fuzzy msgid "Unable to find a valid mod, modpack, or game" -msgstr "Δεν είναι δυνατή η εύρεση έγκυρης τροποποίησης ή πακέτου τροποποίησης" +msgstr "Δεν είναι δυνατή η εύρεση έγκυρης επέκτασης, επεκτάσεων, ή παιχνιδιού" #: builtin/mainmenu/content/pkgmgr.lua -#, fuzzy msgid "Unable to install a $1 as a $2" -msgstr "Δεν είναι δυνατή η εγκατάσταση τροποποίησης ως $1" +msgstr "Δεν είναι δυνατή η εγκατάσταση του $1 σαν $2" #: builtin/mainmenu/content/pkgmgr.lua msgid "Unable to install a $1 as a texture pack" @@ -343,11 +350,11 @@ msgstr "Δεν είναι δυνατή η εγκατάσταση $1 ως πακ #: builtin/mainmenu/dlg_config_world.lua msgid "(Enabled, has error)" -msgstr "" +msgstr "(Ενεργό, έχει σφάλμα)" #: builtin/mainmenu/dlg_config_world.lua msgid "(Unsatisfied)" -msgstr "" +msgstr "(Ανικανοποίητος)" #: builtin/mainmenu/dlg_config_world.lua msgid "Disable all" @@ -440,8 +447,9 @@ msgid "Biome blending" msgstr "" #: builtin/mainmenu/dlg_create_world.lua +#, fuzzy msgid "Biomes" -msgstr "" +msgstr "Περιοχές" #: builtin/mainmenu/dlg_create_world.lua msgid "Caverns" @@ -460,9 +468,18 @@ msgid "Decorations" msgstr "Διακοσμήσεις" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy +msgid "Desert temples" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." -msgstr "Προειδοποίηση: Τα Development Test προορίζονται για προγραμματιστές." +msgstr "Τα τεστ ανάπτυξης προορίζονται για προγραμματιστές." + +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" @@ -498,7 +515,7 @@ msgstr "Αύξηση της υγρασίας γύρω από τα ποτάμια #: builtin/mainmenu/dlg_create_world.lua msgid "Install another game" -msgstr "" +msgstr "Εγκαταστήτε άλλο παιχνίδι" #: builtin/mainmenu/dlg_create_world.lua msgid "Lakes" @@ -559,7 +576,7 @@ msgstr "Σπόρος" #: builtin/mainmenu/dlg_create_world.lua msgid "Smooth transition between biomes" -msgstr "" +msgstr "Ομαλή αλλαγή μεταξύ περιοχών" #: builtin/mainmenu/dlg_create_world.lua msgid "" @@ -636,7 +653,7 @@ msgstr "" #: builtin/mainmenu/dlg_register.lua msgid "Missing name" -msgstr "" +msgstr "Λοιπές όνομα" #: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua #: builtin/mainmenu/tab_online.lua @@ -650,15 +667,16 @@ msgstr "Κωδικός" #: builtin/mainmenu/dlg_register.lua msgid "Passwords do not match" -msgstr "" +msgstr "Οι κωδικοί δεν ταιριάζουν" #: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua msgid "Register" msgstr "" #: builtin/mainmenu/dlg_reinstall_mtg.lua +#, fuzzy msgid "Dismiss" -msgstr "" +msgstr "Απέρριψε" #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "" @@ -666,6 +684,9 @@ msgid "" "\"Minetest Game\". Since Minetest 5.8.0, Minetest ships without a default " "game." msgstr "" +"Για μεγάλο χρονικό διάστημα, η μηχανή του Minetest ερχόταν με ένα " +"προεγκατεστημένο παιχνίδι που λέγεται \"Minetest Παιχνίδι\". Από το Minetest " +"5.8.0, το Minetest εγκαταστήτε χωρίς προεγκαταστημένο παιχνίδι." #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "" @@ -833,10 +854,6 @@ msgstr "" msgid "Back" msgstr "" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "Αλλαγή πλήκτρων" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -846,7 +863,8 @@ msgstr "" msgid "Clear" msgstr "Εκκαθάριση" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "" @@ -1061,6 +1079,16 @@ msgstr "Εγκατάσταση $1" msgid "Install games from ContentDB" msgstr "Εγκατάσταση παιχνιδιών από το ContentDB" +#: builtin/mainmenu/tab_local.lua +msgid "Minetest 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 " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "Νέο" @@ -1094,8 +1122,9 @@ msgid "Start Game" msgstr "Εκκίνηση Παιχνιδιού" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." -msgstr "Δεν έχετε εγκαταστήσει παιχνίδια." +#, fuzzy +msgid "You need to install a game before you can create a world." +msgstr "Πρέπει να κατεβάσετε ένα παιχνίδι πριν κατεβάσετε κάποια επέκταση" #: builtin/mainmenu/tab_online.lua msgid "Address" @@ -1175,18 +1204,10 @@ msgstr "Φόρτωση υφών..." msgid "Rebuilding shaders..." msgstr "Ανακατασκευή σκίαστρων..." -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "Σφάλμα σύνδεσης (λήξη χρόνου;)" - #: src/client/clientlauncher.cpp msgid "Could not find or load game: " msgstr "Δεν ήταν δυνατή η εύρεση ή η φόρτωση του παιχνιδιού: " -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "Μη έγκυρη προδιαγραφή παιχνιδιού." - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "Κύριο μενού" @@ -1211,7 +1232,11 @@ msgstr "Απέτυχε το άνοιγμα του παρεχόμενου αρχ msgid "Provided world path doesn't exist: " msgstr "Το αρχείο του Κόσμου δεν υπάρχει: " -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "" + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp msgid "" "\n" "Check debug.txt for details." @@ -1219,18 +1244,10 @@ msgstr "" "\n" "Ελέγξτε το debug.txt για λεπτομέρειες." -#: src/client/game.cpp -msgid "- Address: " -msgstr "- Διεύθυνση: " - #: src/client/game.cpp msgid "- Mode: " msgstr "- Λειτουργία: " -#: src/client/game.cpp -msgid "- Port: " -msgstr "- Θήρα: " - #: src/client/game.cpp msgid "- Public: " msgstr "- Δημόσιο: " @@ -1266,10 +1283,6 @@ msgstr "Η αυτόματη προώθηση είναι ενεργοποιημέ msgid "Block bounds hidden" msgstr "Αποκλεισμός ορίων κρυφά" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "Τα όρια μπλοκ εμφανίζονται για όλα τα μπλοκ" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "Εμφανίζονται όρια αποκλεισμού για το τρέχον μπλοκ" @@ -1317,6 +1330,10 @@ msgstr "Η δέσμη ενεργειών από την πλευρά του πε msgid "Connecting to server..." msgstr "Σύνδεση με διακομιστή..." +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "Σφάλμα σύνδεσης (λήξη χρόνου;)" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "Η σύνδεση απέτυχε για άγνωστο λόγο" @@ -1325,47 +1342,14 @@ msgstr "Η σύνδεση απέτυχε για άγνωστο λόγο" msgid "Continue" msgstr "Συνέχεια" -#: src/client/game.cpp -#, fuzzy, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" -"Στοιχεία ελέγχου:\n" -"- %s: κίνηση προς τα εμπρός\n" -"- %s: κίνηση προς τα πίσω\n" -"- %s: κίνηση αριστερά\n" -"- %s: κίνηση δεξιά\n" -"- %s: άλμα/σκαρφάλωμα\n" -"- %s: σκάψιμο/διάτρηση\n" -"- %s: τοποθέτηση/χρήση\n" -"- %s: ολίσθηση/κατέβασμα\n" -"- %s: απόθεση αντικειμένου\n" -"- %s: αποθέματα\n" -"- Ποντίκι: στροφή/παρακολούθηση\n" -"- Τροχός ποντικιού: επιλογή στοιχείου\n" -"- %s: συνομιλία\n" - #: src/client/game.cpp #, fuzzy msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1461,6 +1445,11 @@ msgstr "Η ομίχλη απενεργοποιήθηκε" msgid "Fog enabled" msgstr "Η ομίχλη ενεργοποιήθηκε" +#: src/client/game.cpp +#, fuzzy +msgid "Fog enabled by game or mod" +msgstr "Το ζουμ είναι απενεργοποιημένο από το παιχνίδι ή την τροποποίηση" + #: src/client/game.cpp msgid "Game info:" msgstr "Πληροφορίες Παιχνιδιού:" @@ -1481,10 +1470,6 @@ msgstr "Ορισμοί στοιχείων..." msgid "KiB/s" msgstr "" -#: src/client/game.cpp -msgid "Media..." -msgstr "" - #: src/client/game.cpp msgid "MiB/s" msgstr "" @@ -1644,10 +1629,6 @@ msgstr "" msgid "Zoom currently disabled by game or mod" msgstr "Το ζουμ είναι απενεργοποιημένο από το παιχνίδι ή την τροποποίηση" -#: src/client/game.cpp -msgid "ok" -msgstr "" - #: src/client/gameui.cpp #, fuzzy msgid "Chat currently disabled by game or mod" @@ -1977,6 +1958,15 @@ msgstr "" msgid "Minimap in texture mode" msgstr "" +#: src/client/shader.cpp +#, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2167,6 +2157,18 @@ msgstr "Μεγέθυνση" msgid "press key" msgstr "" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Unable to open URL" +msgstr "" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "Αλλαγή" @@ -2200,6 +2202,7 @@ msgstr "Sound Volume: %d%%" #. 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 "el" @@ -2386,12 +2389,6 @@ msgstr "" msgid "Adds particles when digging a node." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2415,6 +2412,10 @@ msgstr "Όνομα κόσμου" msgid "Advanced" msgstr "Για προχωρημένους" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2469,6 +2470,17 @@ msgstr "" msgid "Apple trees noise" 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 "Arm inertia" msgstr "" @@ -2490,12 +2502,21 @@ msgid "" "clients.\n" "Small values potentially improve performance a lot, at the expense of " "visible\n" -"rendering glitches (some blocks will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +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 @@ -2559,6 +2580,10 @@ msgstr "" msgid "Biome noise" msgstr "" +#: src/settings_translation_file.cpp +msgid "Block cull optimize distance" +msgstr "" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "" @@ -2771,6 +2796,12 @@ msgstr "" msgid "Colored shadows" 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -2902,10 +2933,6 @@ msgid "" "Also controls the object crosshair color" msgstr "" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "" @@ -2955,6 +2982,19 @@ msgid "" "but also uses more resources." 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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "" @@ -3141,6 +3181,11 @@ msgstr "Ενεργοποίηση όλων" msgid "Enable Bloom Debug" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Debanding" +msgstr "Ενεργοποίηση Ζημίας" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3160,6 +3205,10 @@ msgid "" "filtering." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable Post Processing" +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "" @@ -3202,6 +3251,10 @@ msgstr "" msgid "Enable mouse wheel (scroll) for item selection in hotbar." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable random mod loading (mainly used for testing)." +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3225,6 +3278,11 @@ msgid "" "expecting." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable touchscreen" +msgstr "Πλήρης οθόνη" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3233,12 +3291,6 @@ msgid "" "when connecting to the server." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3268,6 +3320,19 @@ msgstr "" msgid "Enables caching of facedir rotated meshes." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -4064,9 +4129,10 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" #: src/settings_translation_file.cpp @@ -4213,10 +4279,6 @@ msgid "" "Make fog and sky colors depend on daytime (dawn/sunset) and view direction." msgstr "" -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "" @@ -4265,7 +4327,9 @@ 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." +"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 @@ -4300,10 +4364,6 @@ msgstr "" msgid "Mapblock mesh generation threads" msgstr "" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "" @@ -4546,6 +4606,10 @@ msgstr "" msgid "Minimap scan height" msgstr "" +#: src/settings_translation_file.cpp +msgid "Minimum dig repetition interval" +msgstr "" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "" @@ -4615,6 +4679,11 @@ msgstr "" msgid "Mouse sensitivity multiplier." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Movement threshold" +msgstr "Όριο αφής: (px)" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "" @@ -4725,10 +4794,6 @@ msgstr "" msgid "Occlusion Culling" msgstr "" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -4741,6 +4806,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "OpenGL debug" +msgstr "" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "" @@ -4850,6 +4919,15 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Protocol version minimum" +msgstr "Ασυμφωνία έκδοσης πρωτοκόλλου. " + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -4865,6 +4943,10 @@ msgstr "" msgid "Random input" msgstr "" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "" @@ -5054,8 +5136,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5177,7 +5259,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" @@ -5210,6 +5292,10 @@ msgid "" "Bright colors will bleed over the neighboring objects." 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 "Set to true to enable waving leaves." msgstr "" @@ -5249,8 +5335,7 @@ msgstr "" msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" #: src/settings_translation_file.cpp @@ -5320,13 +5405,6 @@ msgid "" "recommended." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "" @@ -5362,7 +5440,7 @@ 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 Change Keys." +"cinematic mode by using the key set in Controls." msgstr "" #: src/settings_translation_file.cpp @@ -5383,6 +5461,14 @@ msgstr "" msgid "Soft shadow radius" 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 "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -5539,17 +5625,37 @@ msgid "" "when calling `/profiler save [format]` without format." 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 "" "The file path relative to your world path in which profiles will be saved to." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "" #: src/settings_translation_file.cpp -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" #: src/settings_translation_file.cpp @@ -5560,6 +5666,12 @@ msgid "" "Default is 1.0 (1/2 node)." 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 "The network interface that the server listens on." msgstr "" @@ -5586,7 +5698,7 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" #: src/settings_translation_file.cpp @@ -5643,6 +5755,10 @@ msgstr "" msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "" +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -5692,12 +5808,11 @@ msgid "Touchscreen sensitivity multiplier." msgstr "" #: src/settings_translation_file.cpp -#, fuzzy -msgid "Touchscreen threshold" -msgstr "Όριο αφής: (px)" +msgid "Tradeoffs for performance" +msgstr "" #: src/settings_translation_file.cpp -msgid "Tradeoffs for performance" +msgid "Translucent liquids" msgstr "" #: src/settings_translation_file.cpp @@ -5735,7 +5850,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 "" #: src/settings_translation_file.cpp @@ -5833,10 +5950,6 @@ msgstr "" msgid "User Interfaces" msgstr "" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "" @@ -5923,12 +6036,25 @@ msgstr "" msgid "Volume" msgstr "Ένταση" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +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 +#, fuzzy +msgid "Volumetric lighting" +msgstr "Επισήμανση Στοιχείων" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6165,6 +6291,12 @@ msgstr "" msgid "cURL parallel limit" msgstr "Παράλληλο όριο cURL" +#~ msgid "- Address: " +#~ msgstr "- Διεύθυνση: " + +#~ msgid "- Port: " +#~ msgstr "- Θήρα: " + #~ msgid "3D Clouds" #~ msgstr "3D Σύννεφα" @@ -6192,6 +6324,12 @@ msgstr "Παράλληλο όριο cURL" #~ msgid "Bilinear Filter" #~ msgstr "Διγραμμικό Φίλτρο" +#~ msgid "Block bounds shown for all blocks" +#~ msgstr "Τα όρια μπλοκ εμφανίζονται για όλα τα μπλοκ" + +#~ msgid "Change Keys" +#~ msgstr "Αλλαγή πλήκτρων" + #, fuzzy #~ msgid "Change keys" #~ msgstr "Αλλαγή πλήκτρων" @@ -6199,6 +6337,38 @@ msgstr "Παράλληλο όριο cURL" #~ msgid "Connect" #~ msgstr "Σύνδεση" +#, fuzzy, c-format +#~ msgid "" +#~ "Controls:\n" +#~ "- %s: move forwards\n" +#~ "- %s: move backwards\n" +#~ "- %s: move left\n" +#~ "- %s: move right\n" +#~ "- %s: jump/climb up\n" +#~ "- %s: dig/punch/use\n" +#~ "- %s: place/use\n" +#~ "- %s: sneak/climb down\n" +#~ "- %s: drop item\n" +#~ "- %s: inventory\n" +#~ "- Mouse: turn/look\n" +#~ "- Mouse wheel: select item\n" +#~ "- %s: chat\n" +#~ msgstr "" +#~ "Στοιχεία ελέγχου:\n" +#~ "- %s: κίνηση προς τα εμπρός\n" +#~ "- %s: κίνηση προς τα πίσω\n" +#~ "- %s: κίνηση αριστερά\n" +#~ "- %s: κίνηση δεξιά\n" +#~ "- %s: άλμα/σκαρφάλωμα\n" +#~ "- %s: σκάψιμο/διάτρηση\n" +#~ "- %s: τοποθέτηση/χρήση\n" +#~ "- %s: ολίσθηση/κατέβασμα\n" +#~ "- %s: απόθεση αντικειμένου\n" +#~ "- %s: αποθέματα\n" +#~ "- Ποντίκι: στροφή/παρακολούθηση\n" +#~ "- Τροχός ποντικιού: επιλογή στοιχείου\n" +#~ "- %s: συνομιλία\n" + #~ msgid "Credits" #~ msgstr "Μνείες" @@ -6239,15 +6409,15 @@ msgstr "Παράλληλο όριο cURL" #~ msgid "Install: file: \"$1\"" #~ msgstr "Εγκατάσταση: αρχείο: \"$1\"" +#~ msgid "Invalid gamespec." +#~ msgstr "Μη έγκυρη προδιαγραφή παιχνιδιού." + #~ msgid "Name / Password" #~ msgstr "Όνομα / Κωδικός" #~ msgid "No Filter" #~ msgstr "Χωρίς Φίλτρο" -#~ msgid "Node Highlighting" -#~ msgstr "Επισήμανση Στοιχείων" - #~ msgid "Node Outlining" #~ msgstr "Περίγραμμα Στοιχείων" @@ -6284,9 +6454,6 @@ msgstr "Παράλληλο όριο cURL" #~ msgid "Smooth Lighting" #~ msgstr "Απαλός Φωτισμός" -#~ msgid "Sound" -#~ msgstr "Ήχος" - #~ msgid "Special key" #~ msgstr "Ειδικό πλήκτρο" @@ -6340,6 +6507,9 @@ msgstr "Παράλληλο όριο cURL" #~ msgid "You died." #~ msgstr "Πέθανες" +#~ msgid "You have no games installed." +#~ msgstr "Δεν έχετε εγκαταστήσει παιχνίδια." + #~ msgid "Z" #~ msgstr "Z" diff --git a/po/eo/minetest.po b/po/eo/minetest.po index 217b7e1d6..19c22d4c6 100644 --- a/po/eo/minetest.po +++ b/po/eo/minetest.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: Esperanto (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" -"PO-Revision-Date: 2023-10-19 04:10+0000\n" -"Last-Translator: Tirifto \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" "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.1\n" +"X-Generator: Weblate 5.6-rc\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -71,7 +71,8 @@ msgid "Command not available: " msgstr "Komando ne uzeblas: " #: builtin/common/chatcommands.lua -msgid "Get help for commands" +#, fuzzy +msgid "Get help for commands (-t: output in chat)" msgstr "Trovu helpon pri komandoj" #: builtin/common/chatcommands.lua @@ -82,13 +83,10 @@ msgstr "" "ĉion." #: builtin/common/chatcommands.lua -msgid "[all | ]" +#, fuzzy +msgid "[all | ] [-t]" msgstr "[all | ]" -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" -msgstr "Bone" - #: builtin/fstk/ui.lua msgid "" msgstr "" @@ -105,6 +103,10 @@ msgstr "Eraro okazis:" msgid "Main menu" msgstr "Ĉefmenuo" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "Bone" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Rekonekti" @@ -133,19 +135,26 @@ msgstr "Ni nur subtenas protokolan version $1." msgid "We support protocol versions between version $1 and $2." msgstr "Ni subtenas protokolajn versiojn inter versioj $1 kaj $2." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "«$ 1» jam ekzistas. Ĉu superskribi ĝin?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" +msgstr "Eraro dum instalo de \"$1\": $2" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." -msgstr "Dependaĵoj $1 kaj $2 estos instalitaj." +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download \"$1\"" +msgstr "Malsukcesis elŝuti «$1»" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" -msgstr "$1 de $2" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr "Malsukcesis elŝuti $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "Malsukcesis elpaki «$1» (nesubtenata dosierspeco aŭ rompita arĥivo)" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" @@ -153,156 +162,157 @@ msgstr "" "elŝutante $1,\n" "atendante $2" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." msgstr "Elŝutante $1…" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "$1 nepraj dependaĵoj ne estis troveblaj." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "$ 1 estos instalita, ignorante $2 dependaĵojn." - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "Ĉiuj pakaĵoj" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "Jam instalita" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "Reen al ĉefmenuo" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "ContentDB ne estas disponebla per Minetest kodotradukita sen cURL" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "Elŝutante…" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "Ludoj" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +msgstr "Instali" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp +msgid "Loading..." +msgstr "Enlegante…" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Mods" +msgstr "Modifaĵoj" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "Neniun pakaĵon sukcesis ricevi" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "Neniuj rezultoj" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "Neniuj ĝisdatigoj" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "Atendata" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "Teksturaroj" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "La pakaĵo $1 estas ne trovita." + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "Malinstali" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "Ĝisdatigi" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "Ĝisdatigi Ĉiujn [$1]" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "View more information in a web browser" +msgstr "Vidi pli da informoj per TTT-legilo" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "You need to install a game before you can install a mod" +msgstr "Vi devos instali ludon antaŭ vi povos instali modifaĵon" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 and $2 dependencies will be installed." +msgstr "Dependaĵoj $1 kaj $2 estos instalitaj." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "$1 de $2" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "$1 nepraj dependaĵoj ne estis troveblaj." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "$ 1 estos instalita, ignorante $2 dependaĵojn." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "Jam instalita" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "Baza Ludo:" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "Nuligi" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "ContentDB ne estas disponebla per Minetest kodotradukita sen cURL" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "Dependas de:" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "Elŝutante…" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "Eraro dum instalo de \"$1\": $2" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download \"$1\"" -msgstr "Malsukcesis elŝuti «$1»" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "Malsukcesis elŝuti $1" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "Malsukcesis elpaki «$1» (nesubtenata dosierspeco aŭ rompita arĥivo)" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "Ludoj" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "Instali" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "Instali $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "Instali mankantajn dependaĵojn" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "Enlegante…" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "Modifaĵoj" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "Neniujn pakaĵojn eblis ricevi" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "Neniuj rezultoj" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "Neniuj ĝisdatigoj" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "Ne trovita" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "Superskribi" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "Bonvolu kontroli, ke la baza ludo estas ĝusta." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" -msgstr "Atendata" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" +msgstr "«$ 1» jam ekzistas. Ĉu superskribi ĝin?" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "Teksturaroj" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "Malinstali" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "Ĝisdatigi" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "Ĝisdatigi Ĉiujn [$1]" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "Vidi pli da informoj per TTT-legilo" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" -msgstr "" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" +msgstr "Superskribi" #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" @@ -451,10 +461,20 @@ msgstr "Krei" msgid "Decorations" msgstr "Ornamoj" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." msgstr "La programista testo estas intencita por programistoj." +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "Forgeskeloj" @@ -650,7 +670,7 @@ msgstr "Registriĝi" #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "Dismiss" -msgstr "" +msgstr "Lasi" #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "" @@ -658,21 +678,25 @@ msgid "" "\"Minetest Game\". Since Minetest 5.8.0, Minetest ships without a default " "game." msgstr "" +"Dum jaroj, la ludmotoro Minetest instaliĝis kun implicita ludo nomita " +"«Minetest Game». Ekde Minetest versio 5.8.0, Minetest instaliĝas sen " +"implicita ludo." #: 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 "" +"Se vi volus ankoraŭ ludi viajn mondojn de Minetest Game, vi devos reinstali " +"Minetest Game." #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "Minetest Game is no longer installed by default" -msgstr "" +msgstr "Minetest Game estas ne plu implicite instalita" #: builtin/mainmenu/dlg_reinstall_mtg.lua -#, fuzzy msgid "Reinstall Minetest Game" -msgstr "Instali alian ludon" +msgstr "Reinstali Minetest Game" #: builtin/mainmenu/dlg_rename_modpack.lua msgid "Accept" @@ -748,9 +772,8 @@ msgid "Select file" msgstr "Elekti dosieron" #: builtin/mainmenu/settings/components.lua -#, fuzzy msgid "Set" -msgstr "Elekti" +msgstr "Agordi" #: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua msgid "(No description of setting given)" @@ -819,20 +842,16 @@ msgstr "faciligita" #: builtin/mainmenu/settings/dlg_settings.lua msgid "(Use system language)" -msgstr "" +msgstr "(Uzu lingvon de la sistemo)" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Accessibility" -msgstr "" +msgstr "Faciluzo" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Back" msgstr "Reeniri" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "Ŝanĝi klavojn" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -842,27 +861,26 @@ msgstr "Babilo" msgid "Clear" msgstr "Vakigo" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "Stirado" #: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp msgid "General" -msgstr "" +msgstr "Ĝenerale" #: builtin/mainmenu/settings/dlg_settings.lua -#, fuzzy msgid "Movement" -msgstr "Rapida moviĝo" +msgstr "Moviĝo" #: builtin/mainmenu/settings/dlg_settings.lua -#, fuzzy msgid "Reset setting to default" -msgstr "Restarigi pravaloron" +msgstr "Reagordi al implicita valoro" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Reset setting to default ($1)" -msgstr "" +msgstr "Reagordi al implicita valoro ($1)" #: builtin/mainmenu/settings/dlg_settings.lua builtin/mainmenu/tab_online.lua msgid "Search" @@ -870,7 +888,7 @@ msgstr "Serĉi" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Show advanced settings" -msgstr "" +msgstr "Montri porspertulajn agordojn" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Show technical names" @@ -890,11 +908,11 @@ msgstr "Enhavo: Modifaĵoj" #: builtin/mainmenu/settings/shadows_component.lua msgid "(The game will need to enable shadows as well)" -msgstr "" +msgstr "(La ludo bezonos ŝalti ankaŭ ombrojn)" #: builtin/mainmenu/settings/shadows_component.lua msgid "Custom" -msgstr "" +msgstr "Propra" #: builtin/mainmenu/settings/shadows_component.lua msgid "Disabled" @@ -947,7 +965,7 @@ msgstr "Ĉefaj zorgantoj" #: builtin/mainmenu/tab_about.lua msgid "Irrlicht device:" -msgstr "" +msgstr "Irrlicht aparato:" #: builtin/mainmenu/tab_about.lua msgid "Open User Data Directory" @@ -978,18 +996,16 @@ msgid "Browse online content" msgstr "Foliumi enretan enhavon" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Browse online content [$1]" -msgstr "Foliumi enretan enhavon" +msgstr "Foliumi ĉeretajn pakaĵojn [$1]" #: builtin/mainmenu/tab_content.lua msgid "Content" msgstr "Enhavo" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Content [$1]" -msgstr "Enhavo" +msgstr "Enhavo [$1]" #: builtin/mainmenu/tab_content.lua msgid "Disable Texture Pack" @@ -1012,9 +1028,8 @@ msgid "Rename" msgstr "Alinomi" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Update available?" -msgstr "" +msgstr "Ĉu akireblas ĝisdatigo?" #: builtin/mainmenu/tab_content.lua msgid "Use Texture Pack" @@ -1052,6 +1067,17 @@ msgstr "Instali ludon" msgid "Install games from ContentDB" msgstr "Instali ludojn de ContentDB" +#: builtin/mainmenu/tab_local.lua +#, fuzzy +msgid "Minetest doesn't come with a game by default." +msgstr "Minetest Game estas ne plu implicite instalita" + +#: builtin/mainmenu/tab_local.lua +msgid "" +"Minetest is a game-creation platform that allows you to play many different " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "Nova" @@ -1085,8 +1111,9 @@ msgid "Start Game" msgstr "Ekigi ludon" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." -msgstr "Vi havas neniujn instalitajn ludojn." +#, fuzzy +msgid "You need to install a game before you can create a world." +msgstr "Vi devos instali ludon antaŭ vi povos instali modifaĵon" #: builtin/mainmenu/tab_online.lua msgid "Address" @@ -1165,18 +1192,10 @@ msgstr "Enlegante teksturojn…" msgid "Rebuilding shaders..." msgstr "Refarante ombrigilojn…" -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "Konekta eraro (ĉu eltempiĝo?)" - #: src/client/clientlauncher.cpp msgid "Could not find or load game: " msgstr "Ne povis trovi aŭ enlegi ludon: " -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "Nevalida ludspecifo." - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "Ĉefmenuo" @@ -1201,7 +1220,11 @@ msgstr "Malsukcesis malfermi donitan pasvortan dosieron: " msgid "Provided world path doesn't exist: " msgstr "Donita monda dosierindiko ne ekzistas: " -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "Vidaŭdaĵoj…" + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp msgid "" "\n" "Check debug.txt for details." @@ -1209,18 +1232,10 @@ msgstr "" "\n" "Rigardu dosieron debug.txt por detaloj." -#: src/client/game.cpp -msgid "- Address: " -msgstr "– Adreso: " - #: src/client/game.cpp msgid "- Mode: " msgstr "– Reĝimo: " -#: src/client/game.cpp -msgid "- Port: " -msgstr "– Pordo: " - #: src/client/game.cpp msgid "- Public: " msgstr "– Publika: " @@ -1255,10 +1270,6 @@ msgstr "Memaga pluigo ŝaltita" msgid "Block bounds hidden" msgstr "Bloklimoj kaŝitaj" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "Monderlimoj montritaj por ĉiuj blokoj" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "Monderlimoj montritaj por nuna mondero" @@ -1276,7 +1287,6 @@ msgid "Camera update enabled" msgstr "Ĝisdatigo de vidpunkto ŝaltita" #: src/client/game.cpp -#, fuzzy msgid "Can't show block bounds (disabled by game or mod)" msgstr "Ne povas montri monderlimojn (malŝaltita de ludo aŭ modifaĵo)" @@ -1304,6 +1314,10 @@ msgstr "Klient-flanka skriptado malŝaltita" msgid "Connecting to server..." msgstr "Konektante al servilo…" +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "Konekta eraro (ĉu eltempiĝo?)" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "Konekto malsukcesis pro nekonata kialo" @@ -1312,47 +1326,14 @@ msgstr "Konekto malsukcesis pro nekonata kialo" msgid "Continue" msgstr "Daŭrigi" -#: src/client/game.cpp -#, fuzzy, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" -"Stirado:\n" -"– %s: moviĝi antaŭen\n" -"– %s: moviĝi posten\n" -"– %s: moviĝi maldekstren\n" -"– %s: moviĝi dekstren\n" -"– %s: salti/supreniri\n" -"- %s: fosi/bati\n" -"- %s: meti/uzi\n" -"– %s: kaŝiri/malsupreniri\n" -"– %s: demeti portaĵojn\n" -"– %s: portaĵujo\n" -"– Muso: turniĝi/rigardi\n" -"– Musrado: elekti portaĵon\n" -"– %s: babili\n" - #: src/client/game.cpp #, fuzzy msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1363,11 +1344,11 @@ msgid "" msgstr "" "Implicita stirado:\n" "Senmenue:\n" -"- unuobla tuŝeto: aktivigi butonon\n" -"- duobla tuŝeto: meti/uzi\n" -"- ŝova fingro: rigardi\n" -"Videbla menuo/portaĵujo:\n" -"- duobla tuŝeto (ekstere):\n" +"- tiri: rigardi ĉirkaŭen\n" +"- tuŝeti: meti/uzi\n" +"- longe tuŝeti: fosi/frapi/uzi\n" +"Menue/portaĵuje:\n" +"- dufoje tuŝeti (ekstere):\n" " -->fermi\n" "- tuŝi portaĵaron, tuŝi portaĵingon:\n" " --> movi portaĵaron\n" @@ -1444,6 +1425,11 @@ msgstr "Nebulo malŝaltita" msgid "Fog enabled" msgstr "Nebulo ŝaltita" +#: src/client/game.cpp +#, fuzzy +msgid "Fog enabled by game or mod" +msgstr "Zomado nuntempe malŝaltita de ludo aŭ modifaĵo" + #: src/client/game.cpp msgid "Game info:" msgstr "Ludaj informoj:" @@ -1464,10 +1450,6 @@ msgstr "Objektaj difinoj…" msgid "KiB/s" msgstr "KiB/s" -#: src/client/game.cpp -msgid "Media..." -msgstr "Vidaŭdaĵoj…" - #: src/client/game.cpp msgid "MiB/s" msgstr "MiB/s" @@ -1568,28 +1550,28 @@ msgid "Unable to listen on %s because IPv6 is disabled" msgstr "Ne povas aŭskulti je %s ĉar IPv6 estas malŝaltita" #: src/client/game.cpp -#, fuzzy msgid "Unlimited viewing range disabled" -msgstr "Ŝaltis senliman vidodistancon" +msgstr "Malŝaltis senliman vidodistancon" #: src/client/game.cpp -#, fuzzy msgid "Unlimited viewing range enabled" msgstr "Ŝaltis senliman vidodistancon" #: src/client/game.cpp msgid "Unlimited viewing range enabled, but forbidden by game or mod" -msgstr "" +msgstr "Senlima vidodistanco ŝaltita, sed ĝin malpermesas ludo aŭ modifaĵo" #: src/client/game.cpp -#, fuzzy, c-format +#, c-format msgid "Viewing changed to %d (the minimum)" -msgstr "Vidodistanco je la minimumo: %d" +msgstr "Vidodistanco agordita al %d (la minimumo)" #: src/client/game.cpp #, c-format msgid "Viewing changed to %d (the minimum), but limited to %d by game or mod" msgstr "" +"Vidodistanco agordita al %d (la minimumo), sed ĝin limigas al %d ludo aŭ " +"modifaĵo" #: src/client/game.cpp #, c-format @@ -1597,20 +1579,22 @@ msgid "Viewing range changed to %d" msgstr "Vidodistanco agordita al %d" #: src/client/game.cpp -#, fuzzy, c-format +#, c-format msgid "Viewing range changed to %d (the maximum)" -msgstr "Vidodistanco agordita al %d" +msgstr "Vidodistanco agordita al %d (la maksimumo)" #: src/client/game.cpp #, c-format msgid "" "Viewing range changed to %d (the maximum), but limited to %d by game or mod" msgstr "" +"Vidodistanco agordita al %d (la maksimumo), sed ĝin limigas al %d ludo aŭ " +"modifaĵo" #: src/client/game.cpp -#, fuzzy, c-format +#, c-format msgid "Viewing range changed to %d, but limited to %d by game or mod" -msgstr "Vidodistanco agordita al %d" +msgstr "Vidodistanco agordita al %d, sed limigas ĝin al %d ludo aŭ modifaĵo" #: src/client/game.cpp #, c-format @@ -1625,10 +1609,6 @@ msgstr "Dratostaro montrita" msgid "Zoom currently disabled by game or mod" msgstr "Zomado nuntempe malŝaltita de ludo aŭ modifaĵo" -#: src/client/game.cpp -msgid "ok" -msgstr "bone" - #: src/client/gameui.cpp msgid "Chat currently disabled by game or mod" msgstr "Babilado nun estas malŝaltita de ludo aŭ modifaĵo" @@ -1677,23 +1657,20 @@ msgid "Caps Lock" msgstr "Majuskla baskulo" #: src/client/keycode.cpp -#, fuzzy msgid "Clear Key" msgstr "Vakigo" #: src/client/keycode.cpp -#, fuzzy msgid "Control Key" -msgstr "Stiro" +msgstr "Stirklavo" #: src/client/keycode.cpp -#, fuzzy msgid "Delete Key" -msgstr "Forigi" +msgstr "Forigo" #: src/client/keycode.cpp msgid "Down Arrow" -msgstr "" +msgstr "Malsupren" #: src/client/keycode.cpp msgid "End" @@ -1740,9 +1717,8 @@ msgid "Insert" msgstr "Enmeti" #: src/client/keycode.cpp -#, fuzzy msgid "Left Arrow" -msgstr "Maldekstra Stiro" +msgstr "Maldekstren" #: src/client/keycode.cpp msgid "Left Button" @@ -1766,7 +1742,6 @@ msgstr "Maldekstra Vindozo" #. ~ Key name, common on Windows keyboards #: src/client/keycode.cpp -#, fuzzy msgid "Menu Key" msgstr "Menuo" @@ -1843,20 +1818,17 @@ msgid "OEM Clear" msgstr "OEM Vakigi" #: src/client/keycode.cpp -#, fuzzy msgid "Page Down" -msgstr "Paĝon malsupren" +msgstr "Paĝon suben" #: src/client/keycode.cpp -#, fuzzy msgid "Page Up" msgstr "Paĝon supren" #. ~ Usually paired with the Break key #: src/client/keycode.cpp -#, fuzzy msgid "Pause Key" -msgstr "Haltigo" +msgstr "Paŭzo" #: src/client/keycode.cpp msgid "Play" @@ -1868,14 +1840,12 @@ msgid "Print" msgstr "Presi" #: src/client/keycode.cpp -#, fuzzy msgid "Return Key" -msgstr "Enen" +msgstr "Enigo" #: src/client/keycode.cpp -#, fuzzy msgid "Right Arrow" -msgstr "Dekstra Stiro" +msgstr "Dekstren" #: src/client/keycode.cpp msgid "Right Button" @@ -1907,7 +1877,6 @@ msgid "Select" msgstr "Elekti" #: src/client/keycode.cpp -#, fuzzy msgid "Shift Key" msgstr "Majuskligo" @@ -1929,7 +1898,7 @@ msgstr "Tabo" #: src/client/keycode.cpp msgid "Up Arrow" -msgstr "" +msgstr "Supren" #: src/client/keycode.cpp msgid "X Button 1" @@ -1940,7 +1909,6 @@ msgid "X Button 2" msgstr "X-Butono 2" #: src/client/keycode.cpp -#, fuzzy msgid "Zoom Key" msgstr "Zomo" @@ -1962,6 +1930,15 @@ msgstr "Mapeto en supraĵa reĝimo, zomo ×%d" msgid "Minimap in texture mode" msgstr "Mapeto en tekstura reĝimo" +#: src/client/shader.cpp +#, fuzzy, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "Malsukcesis malfermi retpaĝon" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2155,6 +2132,19 @@ msgstr "Zomo" msgid "press key" msgstr "premi klavon" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +#, fuzzy +msgid "Unable to open URL" +msgstr "Malsukcesis malfermi retpaĝon" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "Ŝanĝi" @@ -2188,6 +2178,7 @@ msgstr "Laŭteco: %d%%" #. 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 "eo" @@ -2203,9 +2194,9 @@ msgid "Name is taken. Please choose another name" msgstr "La nomo jam estas prenita. Bonvolu elekti alian nomon." #: src/server.cpp -#, fuzzy, c-format +#, c-format msgid "%s while shutting down: " -msgstr "Malŝaltiĝante…" +msgstr "%s dum malstarto: " #: src/settings_translation_file.cpp msgid "" @@ -2276,7 +2267,7 @@ msgstr "2d-a bruo, kiu lokas la riverajn valojn kaj kanalojn." #: src/settings_translation_file.cpp msgid "3D" -msgstr "" +msgstr "3D" #: src/settings_translation_file.cpp msgid "3D clouds" @@ -2411,14 +2402,6 @@ msgstr "Aktiva senda amplekso de objektoj" msgid "Adds particles when digging a node." msgstr "Aldonas partiklojn ĉe fosado de mondero." -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" -"Ĝustigi punktojn cole al via ekrano (ekster X11/Android), ekzemple por " -"kvarmilaj ekranoj." - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "Alĝustigi trovitan ekran-densecon, por aligrandigi la fasadon." @@ -2446,6 +2429,10 @@ msgstr "Nomo de administranto" msgid "Advanced" msgstr "Specialaj" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2485,14 +2472,12 @@ msgid "Announce to this serverlist." msgstr "Anonci al ĉi tiu servillisto." #: src/settings_translation_file.cpp -#, fuzzy msgid "Anti-aliasing scale" -msgstr "Glatigo:" +msgstr "Skalo de glatigo" #: src/settings_translation_file.cpp -#, fuzzy msgid "Antialiasing method" -msgstr "Glatigo:" +msgstr "Metodo de glatigo" #: src/settings_translation_file.cpp msgid "Append item name" @@ -2506,6 +2491,17 @@ msgstr "Almeti nomon de portaĵo al ŝpruchelplio." msgid "Apple trees noise" msgstr "Bruo de pomujoj" +#: 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 "Arm inertia" msgstr "Braka movofirmo" @@ -2523,18 +2519,37 @@ msgid "Ask to reconnect after crash" msgstr "Demandi pri rekonekto fiaskinte" #: src/settings_translation_file.cpp +#, fuzzy 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 will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +msgstr "" +"Je ĉi tiu distanco, la servilo fervore alĝustigos la nombron de monderoj\n" +"sendataj al klientoj.\n" +"Malgrandaj valoroj povas multe plibonigi efikecon, je la kosto de videblaj\n" +"bildigaj eraroj (iuj monderoj ne bildiĝos sub akvo kaj en kavernoj, kaj iam\n" +"eĉ ne surtere).\n" +"Valoro pli granda ol tiu de «max_block_send_distance» malŝaltas ĉi tiun\n" +"plibonigon.\n" +"Donita en mondopecoj (16 monderoj)." + +#: src/settings_translation_file.cpp +#, fuzzy +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 "" "Je ĉi tiu distanco, la servilo fervore alĝustigos la nombron de monderoj\n" "sendataj al klientoj.\n" @@ -2574,9 +2589,8 @@ msgid "Base terrain height." msgstr "Baza alteco de tereno." #: src/settings_translation_file.cpp -#, fuzzy msgid "Base texture size" -msgstr "Minimuma grandeco de teksturoj" +msgstr "Baza grandeco de teksturoj" #: src/settings_translation_file.cpp msgid "Basic privileges" @@ -2599,21 +2613,25 @@ msgid "Bind address" msgstr "Bindi adreson" #: src/settings_translation_file.cpp -#, fuzzy msgid "Biome API" -msgstr "Klimatoj" +msgstr "API de klimatoj" #: src/settings_translation_file.cpp msgid "Biome noise" msgstr "Klimata bruo" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Block cull optimize distance" +msgstr "Optimuma distanco de monder-sendado" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "Optimuma distanco de monder-sendado" #: src/settings_translation_file.cpp msgid "Bloom" -msgstr "Lumvastiĝo" +msgstr "Lumado" #: src/settings_translation_file.cpp msgid "Bloom Intensity" @@ -2810,9 +2828,8 @@ msgid "Clouds" msgstr "Nuboj" #: src/settings_translation_file.cpp -#, fuzzy msgid "Clouds are a client-side effect." -msgstr "Nuboj kreiĝas klient-flanke." +msgstr "Nuboj fariĝas klient-flanke." #: src/settings_translation_file.cpp msgid "Clouds in menu" @@ -2826,6 +2843,12 @@ msgstr "Kolora nebulo" msgid "Colored shadows" msgstr "Koloraj ombroj" +#: 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -2943,6 +2966,8 @@ msgid "" "Controls sinking speed in liquid when idling. Negative values will cause\n" "you to rise instead." msgstr "" +"Decidas rapidecon de malsupreniro en fluaĵo sen aktiva moviĝo.\n" +"Minusaj valoroj kaŭzos supreniron anstataŭe." #: src/settings_translation_file.cpp msgid "Controls steepness/depth of lake depressions." @@ -2971,13 +2996,12 @@ msgid "Crosshair alpha" msgstr "Travidebleco de celilo" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" "This also applies to the object crosshair." msgstr "" "Travidebleco de celilo (maltravidebleco, inter 0 kaj 255).\n" -"Ankaŭ determinas la koloron de la celilo de objekto." +"Ankaŭ decidas la koloron de la celilo de objekto." #: src/settings_translation_file.cpp msgid "Crosshair color" @@ -2991,10 +3015,6 @@ msgstr "" "Koloro de celilo (Ruĝo, Verdo, Bluo).\n" "Ankaŭ determinas la koloron de la celilo de objekto" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "Punktoj cole" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "Sojlo de grandeco de protokola dosiero" @@ -3049,6 +3069,24 @@ msgstr "" "Ĉi tio imitas la efekton de molaj ombroj per PCF aŭ disko de Poisson,\n" "sed samtempe bezonas pli da komputaj rimedoj." +#: 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 " +"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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" +"Ŝalti por malpermesi konekton de malnovaj klientoj.\n" +"Malnovaj klientoj estas akordaj tiel, ke ili ne fiaskas konektante al novaj " +"serviloj,\n" +"sed eble ili ne subtenos ĉiujn atendatajn funkciojn." + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "Difinas zonojn kie arboj donas pomojn." @@ -3250,6 +3288,11 @@ msgstr "Ŝalti ĉiujn" msgid "Enable Bloom Debug" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Debanding" +msgstr "Ŝalti difektadon" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3273,6 +3316,11 @@ msgid "" "filtering." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Post Processing" +msgstr "Ŝalti stirstangojn" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "" @@ -3322,6 +3370,11 @@ msgstr "Ŝalti modifaĵan sekurecon" 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 "Ŝalti hazardan uzulan enigon (nur por testado)." + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "Ŝalti hazardan uzulan enigon (nur por testado)." @@ -3351,6 +3404,11 @@ msgstr "" "serviloj,\n" "sed eble ili ne subtenos ĉiujn atendatajn funkciojn." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable touchscreen" +msgstr "Sojlo de tuŝekrano" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3362,14 +3420,6 @@ msgstr "" "Foraj serviloj prezentas ege pli rapidon manieron elŝuti vidaŭdaĵojn\n" "(ekzemple teksturojn) konektante al la servilo." -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" -"Ŝalti verticajn bufrajn objektojn.\n" -"Ĉi tio devus multe plibonigi efikecon de grafiko." - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3408,6 +3458,19 @@ msgstr "Ŝaltas movbildojn en portaĵujo." msgid "Enables caching of facedir rotated meshes." msgstr "Ŝaltas kaŝmemoradon de maŝoj turnitaj per «facedir»." +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -3796,7 +3859,7 @@ msgstr "HTTP-modifaĵoj" #: src/settings_translation_file.cpp msgid "HUD" -msgstr "" +msgstr "Travida fasado" #: src/settings_translation_file.cpp #, fuzzy @@ -4339,9 +4402,10 @@ msgstr "" #: src/settings_translation_file.cpp #, fuzzy msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" "Longeco de servila agociklo, kaj la intervalo dum kiu objektoj ĝenerale " "ĝisdatiĝas\n" @@ -4517,10 +4581,6 @@ msgstr "" "Dependigi kolorojn de nebulo kaj ĉielo de tagtempo (sunleviĝo/sunsubiro)\n" "kaj direkto de rigardo." -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "Igas fluaĵojn netravideblaj" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "Nivelo de densigo de mondopecoj por konservado sur disko" @@ -4576,11 +4636,14 @@ msgid "Map generation attributes specific to Mapgen v5." msgstr "Mapestigaj ecoj speciale por Mapestigilo 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" "When the 'snowbiomes' flag is enabled jungles are automatically enabled and\n" -"the 'jungles' flag is ignored." +"the 'jungles' flag is ignored.\n" +"The 'temples' flag disables generation of desert temples. Normal dungeons " +"will appear instead." msgstr "" "Mondestigaj ecoj apartaj al Mondestigilo v6.\n" "La flago «snowbiomes» ŝaltas la novan 5-klimatan sistemon.\n" @@ -4625,10 +4688,6 @@ msgstr "Prokrasto de estigo de maŝoj de mondopecoj" msgid "Mapblock mesh generation threads" msgstr "Prokrasto de estigo de maŝoj de mondopecoj" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "Grando (en megabitokoj) de la kaŝmemoro de la estiganto de mondopecoj" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "Tempolimo de mallego de mondopecoj" @@ -4900,6 +4959,11 @@ msgstr "Minimuma nivelo de protokolado skribota al la babilujo." msgid "Minimap scan height" msgstr "Alteco de mapeta skanado" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Minimum dig repetition interval" +msgstr "Intertempo inter ripetaj metoj" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "Minimuma limo de hazarda nombro de grandaj kavernoj en mondoparto." @@ -4972,6 +5036,11 @@ msgstr "Respondemo de muso" msgid "Mouse sensitivity multiplier." msgstr "Obligilo por respondeco de muso." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Movement threshold" +msgstr "Sojlo de kavernoj" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "Bruo de koto" @@ -5113,10 +5182,6 @@ msgstr "" msgid "Occlusion Culling" msgstr "Servilflanka elektado de postkaŝitoj" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "Netralumeblaj fluidoj" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -5133,6 +5198,11 @@ msgstr "" "enluda\n" "fenestro estas malfermita." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "OpenGL debug" +msgstr "Mapestigila erarserĉilo" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "" @@ -5277,6 +5347,15 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "Proporcio de grandaj kavernoj, kiu enhavas fluaĵon." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Protocol version minimum" +msgstr "Protokola versia miskongruo. " + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -5294,6 +5373,10 @@ msgstr "Levas terenon por krei valojn ĉirkaŭ la riveroj." msgid "Random input" msgstr "Hazarda enigo" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "Freŝaj mesaĝoj de babilo" @@ -5504,8 +5587,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5647,8 +5730,9 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" "Agordi la lingvon. Lasu malplena por uzi la sisteman.\n" @@ -5688,6 +5772,10 @@ msgid "" "Bright colors will bleed over the neighboring objects." 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 #, fuzzy msgid "Set to true to enable waving leaves." @@ -5733,11 +5821,11 @@ msgid "Shaders" msgstr "Ombrigiloj" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" "Ombrigiloj ebligas specialaj vidajn efektojn kaj povas plibonigi efikecon je " "kelkaj vidkartoj.\n" @@ -5824,16 +5912,6 @@ msgstr "" "Malpliigo de la valoro plialtigas densecon de kavernoj kaj forgeskeloj.\n" "Ŝanĝeblo de la valoro celas specialajn uzojn; senŝanĝo estas rekomendata." -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" -"Grandeco de la mondopeca kaŝmemoro de la meŝestigilo. Plialtigo ankaŭ\n" -"plialtigos la elcenton de kaŝmemoraj trafoj, kaj malpliigos la datenojn\n" -"kopiatajn de la ĉefa fadeno, malhelpante skuadon." - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "" @@ -5870,7 +5948,7 @@ msgstr "Glata lumado" #, fuzzy msgid "" "Smooths rotation of camera when in cinematic mode, 0 to disable. Enter " -"cinematic mode by using the key set in Change Keys." +"cinematic mode by using the key set in Controls." msgstr "Glatigas la turnadon de vidpunkto en glita reĝimo. 0 por malŝalti." #: src/settings_translation_file.cpp @@ -5892,6 +5970,15 @@ msgstr "Rapido de kaŝirado, en monderoj sekunde." msgid "Soft shadow radius" msgstr "Radiuso de mola ombro" +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "Sono" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sound Extensions Blacklist" +msgstr "Malpermesitaj flagoj de ContentDB" + #: src/settings_translation_file.cpp msgid "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -6090,6 +6177,12 @@ msgstr "" "La norma formo, en kiu konserviĝas profiloj, kiam\n" "vokiĝas «/profiler save [formo]» sen formo." +#: 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 #, fuzzy msgid "" @@ -6097,13 +6190,27 @@ msgid "" msgstr "" "La dosierindiko relativa al via mondoindiko, kien konserviĝos profiloj." +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "Identigilo de la uzota stirstango" #: src/settings_translation_file.cpp #, fuzzy -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "Longeco (en bilderoj) necesa por komenco de interago kun tuŝekrano." #: src/settings_translation_file.cpp @@ -6120,6 +6227,15 @@ msgstr "" "La antaŭagordo estas 1.0 (duono de mondero).\n" "Bezonas ŝaltitajn ondantajn fluaĵojn." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"The minimum time in seconds it takes between digging nodes when holding\n" +"the dig button." +msgstr "" +"Tempo (en sekundoj) inter ripetaj metoj de monderoj dum premado de\n" +"la butono por meti." + #: src/settings_translation_file.cpp msgid "The network interface that the server listens on." msgstr "La reta interfaco kie la servilo aŭskultas." @@ -6158,7 +6274,7 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" "La bildiga internaĵo.\n" "Relanĉo necesas post ĉi tiu ŝanĝo.\n" @@ -6242,6 +6358,10 @@ msgstr "" msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "Tria el la 4 3d-aj bruoj, kiuj kune difinas altecon de mont(et)aroj." +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -6298,15 +6418,15 @@ msgstr "Respondemo de muso" msgid "Touchscreen sensitivity multiplier." msgstr "Obligilo por respondeco de muso." -#: src/settings_translation_file.cpp -#, fuzzy -msgid "Touchscreen threshold" -msgstr "Sojlo de tuŝekrano" - #: src/settings_translation_file.cpp msgid "Tradeoffs for performance" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Translucent liquids" +msgstr "Netralumeblaj fluidoj" + #: src/settings_translation_file.cpp msgid "Transparency Sorting Distance" msgstr "" @@ -6345,7 +6465,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 "" #: src/settings_translation_file.cpp @@ -6456,10 +6578,6 @@ msgstr "" msgid "User Interfaces" msgstr "" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "Vertica bufrobjekto" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "Vertikala akordigo" @@ -6552,6 +6670,10 @@ msgstr "Virtuala stirstango premas specialan klavon" msgid "Volume" msgstr "Laŭteco" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Volume of all sounds.\n" @@ -6560,6 +6682,16 @@ msgstr "" "Laŭteco de ĉiuj sonoj\n" "Bezonas ŝaltitan sonsistemon." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volume when unfocused" +msgstr "Maksimuma nombro de kadroj en sekundo dum paŭzo aŭ sen fokuso" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volumetric lighting" +msgstr "Glata lumado" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6852,12 +6984,18 @@ msgstr "Samtempa limo de cURL" #~ msgid "(game support required)" #~ msgstr "(subteno de ludo bezonata)" +#~ msgid "- Address: " +#~ msgstr "– Adreso: " + #~ msgid "- Creative Mode: " #~ msgstr "– Krea reĝimo: " #~ msgid "- Damage: " #~ msgstr "– Difekto: " +#~ msgid "- Port: " +#~ msgstr "– Pordo: " + #~ msgid "" #~ "0 = parallax occlusion with slope information (faster).\n" #~ "1 = relief mapping (slower, more accurate)." @@ -6895,6 +7033,13 @@ msgstr "Samtempa limo de cURL" #~ "Lasu ĝin malplena por komenci lokan servilon.\n" #~ "La adresa kampo en la ĉefmenuo transpasas ĉi tiun agordon." +#~ msgid "" +#~ "Adjust dpi configuration to your screen (non X11/Android only) e.g. for " +#~ "4k screens." +#~ msgstr "" +#~ "Ĝustigi punktojn cole al via ekrano (ekster X11/Android), ekzemple por " +#~ "kvarmilaj ekranoj." + #~ msgid "" #~ "Adjust the gamma encoding for the light tables. Higher numbers are " #~ "brighter.\n" @@ -6939,6 +7084,9 @@ msgstr "Samtempa limo de cURL" #~ msgid "Bits per pixel (aka color depth) in fullscreen mode." #~ msgstr "Bitoj bildere (aŭ kolornombro) en tutekrana reĝimo." +#~ msgid "Block bounds shown for all blocks" +#~ msgstr "Monderlimoj montritaj por ĉiuj blokoj" + #~ msgid "Bump Mapping" #~ msgstr "Tubera mapado" @@ -6961,6 +7109,9 @@ msgstr "Samtempa limo de cURL" #~ msgid "Camera update toggle key" #~ msgstr "Baskula klavo de ĝisdatigo de vidpunkto" +#~ msgid "Change Keys" +#~ msgstr "Ŝanĝi klavojn" + #, fuzzy #~ msgid "Change keys" #~ msgstr "Ŝanĝi klavojn" @@ -7035,6 +7186,38 @@ msgstr "Samtempa limo de cURL" #~ "Regas larĝecon de tuneloj; pli malgranda valoro kreas pri larĝajn " #~ "tunelojn." +#, c-format +#~ msgid "" +#~ "Controls:\n" +#~ "- %s: move forwards\n" +#~ "- %s: move backwards\n" +#~ "- %s: move left\n" +#~ "- %s: move right\n" +#~ "- %s: jump/climb up\n" +#~ "- %s: dig/punch/use\n" +#~ "- %s: place/use\n" +#~ "- %s: sneak/climb down\n" +#~ "- %s: drop item\n" +#~ "- %s: inventory\n" +#~ "- Mouse: turn/look\n" +#~ "- Mouse wheel: select item\n" +#~ "- %s: chat\n" +#~ msgstr "" +#~ "Stirado:\n" +#~ "– %s: moviĝi antaŭen\n" +#~ "– %s: moviĝi posten\n" +#~ "– %s: moviĝi maldekstren\n" +#~ "– %s: moviĝi dekstren\n" +#~ "– %s: salti/supreniri\n" +#~ "- %s: fosi/bati\n" +#~ "- %s: meti/uzi\n" +#~ "– %s: kaŝiri/malsupreniri\n" +#~ "– %s: demeti portaĵojn\n" +#~ "– %s: portaĵujo\n" +#~ "– Muso: turniĝi/rigardi\n" +#~ "– Musrado: elekti portaĵon\n" +#~ "– %s: babili\n" + #~ msgid "Creative" #~ msgstr "Krea" @@ -7044,6 +7227,9 @@ msgstr "Samtempa limo de cURL" #~ msgid "Crosshair color (R,G,B)." #~ msgstr "Koloro de celilo (R,V,B)." +#~ msgid "DPI" +#~ msgstr "Punktoj cole" + #~ msgid "Damage" #~ msgstr "Difekto" @@ -7138,6 +7324,13 @@ msgstr "Samtempa limo de cURL" #~ msgid "Enable register confirmation" #~ msgstr "Ŝalti konfirmon de registriĝo" +#~ msgid "" +#~ "Enable vertex buffer objects.\n" +#~ "This should greatly improve graphics performance." +#~ msgstr "" +#~ "Ŝalti verticajn bufrajn objektojn.\n" +#~ "Ĉi tio devus multe plibonigi efikecon de grafiko." + #~ msgid "Enabled" #~ msgstr "Ŝaltita" @@ -7441,6 +7634,9 @@ msgstr "Samtempa limo de cURL" #~ msgid "Instrumentation" #~ msgstr "Ekzamenado" +#~ msgid "Invalid gamespec." +#~ msgstr "Nevalida ludspecifo." + #~ msgid "Inventory key" #~ msgstr "Klavo de portaĵujo" @@ -8134,6 +8330,13 @@ msgstr "Samtempa limo de cURL" #~ "Funkciigas programaron «DirectX» kun «LuaJIT». Malŝaltu okaze de " #~ "problemoj." +#~ msgid "Makes all liquids opaque" +#~ msgstr "Igas fluaĵojn netravideblaj" + +#~ msgid "Mapblock mesh generator's MapBlock cache size in MB" +#~ msgstr "" +#~ "Grando (en megabitokoj) de la kaŝmemoro de la estiganto de mondopecoj" + #~ msgid "Menus" #~ msgstr "Menuoj" @@ -8362,15 +8565,21 @@ msgstr "Samtempa limo de cURL" #~ msgid "Simple Leaves" #~ msgstr "Simplaj folioj" +#~ msgid "" +#~ "Size of the MapBlock cache of the mesh generator. Increasing this will\n" +#~ "increase the cache hit %, reducing the data being copied from the main\n" +#~ "thread, thus reducing jitter." +#~ msgstr "" +#~ "Grandeco de la mondopeca kaŝmemoro de la meŝestigilo. Plialtigo ankaŭ\n" +#~ "plialtigos la elcenton de kaŝmemoraj trafoj, kaj malpliigos la datenojn\n" +#~ "kopiatajn de la ĉefa fadeno, malhelpante skuadon." + #~ msgid "Smooth Lighting" #~ msgstr "Glata lumado" #~ msgid "Smooths rotation of camera. 0 to disable." #~ msgstr "Glitigas turnadon de la vidpunkto. 0 por malŝalti." -#~ msgid "Sound" -#~ msgstr "Sono" - #~ msgid "Special" #~ msgstr "Speciala" @@ -8425,6 +8634,10 @@ msgstr "Samtempa limo de cURL" #~ msgid "Touch threshold (px):" #~ msgstr "Tuŝa sojlo (px):" +#, fuzzy +#~ msgid "Touchscreen threshold" +#~ msgstr "Sojlo de tuŝekrano" + #~ msgid "Trilinear Filter" #~ msgstr "Trilineara filtrilo" @@ -8469,6 +8682,9 @@ msgstr "Samtempa limo de cURL" #~ "malŝaltita.\n" #~ "Vi devas relanĉi post ŝanĝo de ĉi tiu elekteblo." +#~ msgid "VBO" +#~ msgstr "Vertica bufrobjekto" + #~ msgid "Variation of hill height and lake depth on floatland smooth terrain." #~ msgstr "" #~ "Variaĵo de alteco de montetoj kaj profundeco de lagoj sur glata tereno de " @@ -8553,8 +8769,14 @@ msgstr "Samtempa limo de cURL" #~ msgid "You died." #~ msgstr "Vi mortis." +#~ msgid "You have no games installed." +#~ msgstr "Vi havas neniujn instalitajn ludojn." + #~ msgid "Z" #~ msgstr "Z" #~ msgid "needs_fallback_font" #~ msgstr "no" + +#~ msgid "ok" +#~ msgstr "bone" diff --git a/po/es/minetest.po b/po/es/minetest.po index e352e3b95..45b0a46a2 100644 --- a/po/es/minetest.po +++ b/po/es/minetest.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: Spanish (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" -"PO-Revision-Date: 2023-12-02 05:17+0000\n" -"Last-Translator: chocomint \n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" +"PO-Revision-Date: 2024-07-14 21:23+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.3-dev\n" +"X-Generator: Weblate 5.7-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -71,8 +71,8 @@ msgid "Command not available: " msgstr "Comando no disponible: " #: builtin/common/chatcommands.lua -msgid "Get help for commands" -msgstr "Obtener ayuda para los comandos" +msgid "Get help for commands (-t: output in chat)" +msgstr "Obtener ayuda para los comandos (-t: salida en el chat)" #: builtin/common/chatcommands.lua msgid "" @@ -82,12 +82,8 @@ msgstr "" "todo." #: builtin/common/chatcommands.lua -msgid "[all | ]" -msgstr "[todo | ]" - -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" -msgstr "Aceptar" +msgid "[all | ] [-t]" +msgstr "[all | ] [-t]" #: builtin/fstk/ui.lua msgid "" @@ -105,6 +101,10 @@ msgstr "Ha ocurrido un error:" msgid "Main menu" msgstr "Menú principal" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "Aceptar" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Reconectar" @@ -133,19 +133,27 @@ msgstr "Solo se soporta la versión de protocolo $1." msgid "We support protocol versions between version $1 and $2." msgstr "Nosotros soportamos versiones de protocolo entre la versión $1 y $2." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "\"$1\" ya existe. Quieres remplazarlo?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" +msgstr "Error instalando \"$1\": $2" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." -msgstr "$1 y $2 dependencias serán instaladas." +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download \"$1\"" +msgstr "Fallo al descargar \"$1\"" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" -msgstr "$1 por $2" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr "Fallo al descargar $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "" +"No se pudo extraer \"$1\" (espacio en disco insuficiente, tipo de archivo no " +"compatible o archivo dañado)" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" @@ -153,158 +161,158 @@ msgstr "" "$1 descargando,\n" "$2 en espera" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." msgstr "$1 descargando..." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "$1 dependencias requeridas no se encuentren." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "$1 será instalado, y $2 dependencias serán ignoradas." - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "Todos los paquetes" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "Ya está instalado" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "Volver al menú principal" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "" +"ContentDB no se encuentra disponible cuando Minetest se compiló sin cURL" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "Descargando..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "Error obteniendo dependencias para el paquete" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "Juegos" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +msgstr "Instalar" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp +msgid "Loading..." +msgstr "Cargando..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Mods" +msgstr "Mods" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "No se ha podido obtener ningún paquete" + +#: 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 "No updates" +msgstr "No hay actualizaciones" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "En cola" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "Paq. de texturas" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "No se encontró el paquete $1." + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "Desinstalar" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "Actualizar" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "Actualizar Todo [$1]" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "View more information in a web browser" +msgstr "Ver más información en un navegador web" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "You need to install a game before you can install a mod" +msgstr "Necesitas instalar un juego antes de que puedas instalar un mod" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 and $2 dependencies will be installed." +msgstr "$1 y $2 dependencias serán instaladas." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "$1 por $2" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "$1 dependencias requeridas no se encuentren." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "$1 será instalado, y $2 dependencias serán ignoradas." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "Ya está instalado" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "Juego Base:" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "Cancelar" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "" -"ContentDB no se encuentra disponible cuando Minetest se compiló sin cURL" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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_contentstore.lua -msgid "Downloading..." -msgstr "Descargando..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "Error instalando \"$1\": $2" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download \"$1\"" -msgstr "Fallo al descargar \"$1\"" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "Fallo al descargar $1" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "" -"Fallo al extraer \"$1\" (Formato de archivo no soportado o archivo corrupto)" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "Juegos" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "Instalar" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "Instalar $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "Instalar dependencias faltantes" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "Cargando..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "Mods" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "No se ha podido obtener ningún paquete" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "Sin resultados" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "No hay actualizaciones" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "No encontrado" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "Sobreescribir" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "Por favor verifica que el juego base está bien." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" -msgstr "En cola" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" +msgstr "\"$1\" ya existe. Quieres remplazarlo?" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "Paq. de texturas" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "No se encontró el paquete $1." - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "Desinstalar" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "Actualizar" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "Actualizar Todo [$1]" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "Ver más información en un navegador web" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" -msgstr "Necesitas instalar un juego antes de que puedas instalar un mod" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" +msgstr "Sobreescribir" #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" @@ -454,10 +462,22 @@ msgstr "Crear" msgid "Decorations" msgstr "Decoraciones" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "Templos del desierto" + #: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." msgstr "Development Test está destinado para desarrolladores." +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" +"Variante de mazmorras diferente generada en biomas de desierto (solo si las " +"mazmorras están activadas)" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "Mazmorras" @@ -837,10 +857,6 @@ msgstr "Accesibilidad" msgid "Back" msgstr "Atrás" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "Configurar teclas" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -850,7 +866,8 @@ msgstr "Chat" msgid "Clear" msgstr "Limpiar" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "Controles" @@ -1055,6 +1072,18 @@ msgstr "Instalar un juego" msgid "Install games from ContentDB" 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." + +#: builtin/mainmenu/tab_local.lua +msgid "" +"Minetest 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." + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "Nuevo" @@ -1088,8 +1117,8 @@ msgid "Start Game" msgstr "Empezar juego" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." -msgstr "No tienes juegos instalados." +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_online.lua msgid "Address" @@ -1168,18 +1197,10 @@ msgstr "Cargando texturas..." msgid "Rebuilding shaders..." msgstr "Reconstruyendo sombreadores..." -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "Error de conexión (¿tiempo agotado?)" - #: src/client/clientlauncher.cpp msgid "Could not find or load game: " msgstr "No se puede encontrar o cargar el juego: " -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "Juego especificado no válido." - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "Menú principal" @@ -1206,7 +1227,11 @@ msgstr "Fallo para abrir el archivo con la contraseña proveída: " msgid "Provided world path doesn't exist: " msgstr "La ruta del mundo especificada no existe: " -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "Multimedia..." + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp msgid "" "\n" "Check debug.txt for details." @@ -1214,18 +1239,10 @@ msgstr "" "\n" "Revisa debug.txt para más detalles." -#: src/client/game.cpp -msgid "- Address: " -msgstr "- Dirección: " - #: src/client/game.cpp msgid "- Mode: " msgstr "- Modo: " -#: src/client/game.cpp -msgid "- Port: " -msgstr "- Puerto: " - #: src/client/game.cpp msgid "- Public: " msgstr "- Público: " @@ -1260,10 +1277,6 @@ msgstr "Avance automático activado" msgid "Block bounds hidden" msgstr "Límites de bloque ocultos" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "Límites de bloque mostrados para todos los bloques" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "Límites de bloque mostrados para el bloque actual" @@ -1310,6 +1323,10 @@ msgstr "El Scripting en el lado del cliente está desactivado" msgid "Connecting to server..." msgstr "Conectando al servidor..." +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "Error de conexión (¿tiempo agotado?)" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "La conexión falló por razones desconocidas" @@ -1319,45 +1336,13 @@ msgid "Continue" msgstr "Continuar" #: src/client/game.cpp -#, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" -"Controles:\n" -"- %s: moverse hacia adelante\n" -"- %s: moverse hacia atras\n" -"- %s: moverse a la izquierda\n" -"- %s: moverse a la derecha\n" -"- %s: saltar/escalar\n" -"- %s: excavar/golpear\n" -"- %s: colocar/usar\n" -"- %s: agacharse/bajar\n" -"- %s: soltar objeto\n" -"- %s: inventario\n" -"- Ratón: girar/mirar\n" -"- Rueda del ratón: elegir objeto\n" -"- %s: chat\n" - -#: src/client/game.cpp +#, fuzzy msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1449,6 +1434,11 @@ msgstr "Niebla desactivada" 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" + #: src/client/game.cpp msgid "Game info:" msgstr "Información del juego:" @@ -1469,10 +1459,6 @@ msgstr "Definiciones de objetos..." msgid "KiB/s" msgstr "KiB/s" -#: src/client/game.cpp -msgid "Media..." -msgstr "Multimedia..." - #: src/client/game.cpp msgid "MiB/s" msgstr "MiB/s" @@ -1633,10 +1619,6 @@ msgstr "Estructura alámbricas mostradas" msgid "Zoom currently disabled by game or mod" msgstr "El zoom está actualmente desactivado por el juego o un mod" -#: src/client/game.cpp -msgid "ok" -msgstr "Aceptar" - #: src/client/gameui.cpp msgid "Chat currently disabled by game or mod" msgstr "Chat deshabilitado por el juego o un mod" @@ -1692,13 +1674,12 @@ msgid "Control Key" msgstr "Tecla de control" #: src/client/keycode.cpp -#, fuzzy msgid "Delete Key" -msgstr "Borrar" +msgstr "Tecla de borrar" #: src/client/keycode.cpp msgid "Down Arrow" -msgstr "" +msgstr "Flecha por abajo" #: src/client/keycode.cpp msgid "End" @@ -1745,9 +1726,8 @@ msgid "Insert" msgstr "Insertar" #: src/client/keycode.cpp -#, fuzzy msgid "Left Arrow" -msgstr "Control izquierdo" +msgstr "Control izquerda" #: src/client/keycode.cpp msgid "Left Button" @@ -1771,9 +1751,8 @@ msgstr "Win izq" #. ~ Key name, common on Windows keyboards #: src/client/keycode.cpp -#, fuzzy msgid "Menu Key" -msgstr "Menú" +msgstr "Tecla de Menú" #: src/client/keycode.cpp msgid "Middle Button" @@ -1848,20 +1827,17 @@ msgid "OEM Clear" msgstr "Limpiar OEM" #: src/client/keycode.cpp -#, fuzzy msgid "Page Down" -msgstr "Re. pág" +msgstr "Página abajo" #: src/client/keycode.cpp -#, fuzzy msgid "Page Up" -msgstr "Av. pág" +msgstr "Página arriba" #. ~ Usually paired with the Break key #: src/client/keycode.cpp -#, fuzzy msgid "Pause Key" -msgstr "Pausa" +msgstr "Tecla de Pausa" #: src/client/keycode.cpp msgid "Play" @@ -1873,14 +1849,12 @@ msgid "Print" msgstr "Captura" #: src/client/keycode.cpp -#, fuzzy msgid "Return Key" -msgstr "Retorno" +msgstr "Tecla de retorno" #: src/client/keycode.cpp -#, fuzzy msgid "Right Arrow" -msgstr "Control der" +msgstr "flechas de dirección" #: src/client/keycode.cpp msgid "Right Button" @@ -1912,9 +1886,8 @@ msgid "Select" msgstr "Seleccionar" #: src/client/keycode.cpp -#, fuzzy msgid "Shift Key" -msgstr "Shift" +msgstr "Mayús" #: src/client/keycode.cpp msgid "Sleep" @@ -1934,7 +1907,7 @@ msgstr "Tabulador" #: src/client/keycode.cpp msgid "Up Arrow" -msgstr "" +msgstr "Flecha por arriba" #: src/client/keycode.cpp msgid "X Button 1" @@ -1967,6 +1940,15 @@ msgstr "Minimapa en modo superficie, Zoom x%d" msgid "Minimap in texture mode" msgstr "Minimapa en modo textura" +#: src/client/shader.cpp +#, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "Fallo al compilar el shader \"%s\"." + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "Los shaders están activados pero el driver no soporta GLSL." + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2160,6 +2142,19 @@ msgstr "Zoom" msgid "press key" msgstr "pulsa una tecla" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "Abrir URL?" + +#: src/gui/guiOpenURL.cpp +#, fuzzy +msgid "Unable to open URL" +msgstr "Fallo al abrir la página web" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "Cambiar" @@ -2193,6 +2188,7 @@ msgstr "Volumen del sonido: %d%%" #. 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 "es" @@ -2286,7 +2282,7 @@ msgstr "Ruido 2D para ubicar los ríos, valles y canales." #: src/settings_translation_file.cpp msgid "3D" -msgstr "" +msgstr "3D" #: src/settings_translation_file.cpp msgid "3D clouds" @@ -2427,14 +2423,6 @@ msgstr "Rango de envío en objetos activos" msgid "Adds particles when digging a node." msgstr "Añade partículas al excavar un nodo." -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" -"Ajustar la configuración de puntos por pulgada a tu pantalla (no X11/Android " -"sólo), por ejemplo para pantallas 4K." - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2465,6 +2453,10 @@ msgstr "Nombre del administrador" msgid "Advanced" msgstr "Avanzado" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "Permite que los líquidos sean traslúcidos." + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2525,6 +2517,17 @@ msgstr "Añadir nombre de objeto a la burbuja informativa." msgid "Apple trees noise" msgstr "Ruido de manzanos" +#: 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 "Arm inertia" msgstr "Inercia de brazo" @@ -2542,18 +2545,39 @@ 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" "clients.\n" "Small values potentially improve performance a lot, at the expense of " "visible\n" -"rendering glitches (some blocks will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"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)." + +#: src/settings_translation_file.cpp +#, fuzzy +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 "" "A esta distancia el servidor optimizará agresivamente qué bloques son " "enviados a\n" @@ -2627,13 +2651,18 @@ msgstr "Biomas" msgid "Biome noise" msgstr "Ruido de bioma" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Block cull optimize distance" +msgstr "Optimizar la distancia del envío de bloques" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "Optimizar la distancia del envío de bloques" #: src/settings_translation_file.cpp msgid "Bloom" -msgstr "Destello de lente" +msgstr "Floración" #: src/settings_translation_file.cpp msgid "Bloom Intensity" @@ -2845,6 +2874,12 @@ msgstr "Niebla colorida" msgid "Colored shadows" msgstr "Sombras coloridas" +#: 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -3014,10 +3049,6 @@ msgstr "" "Color del punto de mira (R,G,B).\n" "También controla el color del objeto punto de mira" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "DPI" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "Umbral del tamaño del archivo de registro de depuración" @@ -3072,6 +3103,24 @@ msgstr "" "Esto simula el efecto de sombras suaves aplicando un PCF o Poisson disk\n" "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 " +"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" +"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." + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "Define las áreas donde los árboles tienen manzanas." @@ -3282,6 +3331,11 @@ msgstr "Activar Destello de Lente" msgid "Enable Bloom Debug" msgstr "Habilitar Debug del Destello de Lente" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Debanding" +msgstr "Permitir daños" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3308,6 +3362,11 @@ msgstr "" "Si el valor es verdadero, utiliza \"poisson disk\" para proyectar sombras " "suaves. De otro modo utiliza filtrado PCF." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Post Processing" +msgstr "Posprocesamiento" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "Habilitar Culling por Trazado de Rayos" @@ -3359,6 +3418,11 @@ msgstr "" "Habilita la rueda del ratón (Desplazando) para seleccionar los items en la " "hotbar." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable random mod loading (mainly used for testing)." +msgstr "Habilitar entrada aleatoria (solo usar para pruebas)." + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "Habilitar entrada aleatoria (solo usar para pruebas)." @@ -3388,6 +3452,11 @@ msgstr "" "servidores,\n" "pero pueden no soportar nuevas características." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable touchscreen" +msgstr "Pantalla táctil" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3399,14 +3468,6 @@ msgstr "" "Servidores remotos ofrecen una manera significativamente más rápida de\n" "descargar medios (por ej. texturas) cuando se conecta a un servidor." -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" -"Habilitar los objetos vértices del buffer.\n" -"Esto debería mejorar enormemente el rendimiento de los gráficos." - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3447,6 +3508,20 @@ msgstr "Habilita la animación de objetos en el inventario." msgid "Enables caching of facedir rotated meshes." msgstr "Habilitar cacheado de mallas giradas." +#: 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 +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." +msgstr "" +"Activa el modo de pantalla táctil, permitiendote jugar con pantalla táctil." + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -3763,7 +3838,6 @@ msgid "Fullscreen mode." msgstr "Modo de pantalla completa." #: src/settings_translation_file.cpp -#, fuzzy msgid "GUI" msgstr "Interfaz gráfica de usuario" @@ -4402,13 +4476,14 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" -"Duración de un tick del servidor y el intervalo en el que los objetos se " -"actualizan generalmente sobre la\n" -"red, expresada en segundos." +"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." #: src/settings_translation_file.cpp msgid "Length of liquid waves." @@ -4587,10 +4662,6 @@ msgstr "" "Hace que la niebla y los colores del cielo dependan de la hora del día " "(amanecer / atardecer) y la dirección de vista." -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "Vuelve opacos a todos los líquidos" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "Nivel de comprensión del mapa para almacenamiento de disco" @@ -4647,11 +4718,14 @@ 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" "When the 'snowbiomes' flag is enabled jungles are automatically enabled and\n" -"the 'jungles' flag is ignored." +"the 'jungles' flag is ignored.\n" +"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" @@ -4695,11 +4769,6 @@ msgstr "Retraso de generación de la malla del Mapblock" msgid "Mapblock mesh generation threads" msgstr "Hilos para la generación de la malla del Mapblock" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "" -"Tamaño de cache en MB del Mapblock del generador de la malla del Mapblock" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "Expirado de descarga de Mapblock" @@ -4976,6 +5045,11 @@ msgstr "Nivel mínimo de logging a ser escrito al chat." 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" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "Límite mínimo de número aleatorio de cuevas grandes por mapchunk." @@ -4991,7 +5065,7 @@ msgstr "Mapa mip" #: src/settings_translation_file.cpp msgid "Miscellaneous" -msgstr "" +msgstr "De todo tipo" #: src/settings_translation_file.cpp msgid "Mod Profiler" @@ -5045,6 +5119,11 @@ msgstr "Sensibilidad del ratón" 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" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "Ruido del barro" @@ -5187,10 +5266,6 @@ msgstr "Oclusión de Culler" msgid "Occlusion Culling" msgstr "Eliminación de oclusión" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "Líquidos opacos" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -5208,6 +5283,11 @@ msgstr "" "un formulario\n" "abierto." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "OpenGL debug" +msgstr "Depuración del generador de mapas" + #: 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." @@ -5342,6 +5422,14 @@ msgstr "" msgid "Proportion of large caves that contain liquid." 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" + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "Gesto para golpear" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -5360,6 +5448,10 @@ msgstr "Levanta terreno para hacer valles alrededor de los ríos." msgid "Random input" msgstr "Entrada aleatoria" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "Orden aleatorio de carga de mods" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "Mensajes Recientes del Chat" @@ -5578,13 +5670,14 @@ 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" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5749,8 +5842,9 @@ msgstr "" "Rango: de -1 a 1.0" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Set the language. Leave empty to use the system language.\n" +"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" @@ -5797,6 +5891,10 @@ msgstr "" "Establecer como cierto para habilitar el efecto de resplandor (bloom).\n" "Los colores brillantes se mezclarán con los objetos circundantes." +#: 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 "Set to true to enable waving leaves." msgstr "Establece en true para permitir la ondulación de hojas." @@ -5846,13 +5944,12 @@ msgstr "Shaders (Sombreador)" msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" "Los sombreadores permiten efectos visuales avanzados y pueden aumentar el " -"rendimiento en algunas tarjetas de\n" -"vídeo.\n" -"Esto solo funciona con el motor de vídeo OpenGL." +"rendimiento\n" +"en algunas tarjetas de vídeo. Esto solo funciona con el motor de vídeo " +"OpenGL." #: src/settings_translation_file.cpp msgid "Shadow filter quality" @@ -5914,6 +6011,14 @@ msgid "" "draw calls, benefiting especially high-end GPUs.\n" "Systems with a low-end GPU (or no GPU) would benefit from smaller values." msgstr "" +"Longitud lateral de un cubo de bloques de mapa que el cliente considerará " +"juntos\n" +"al generar mallas.\n" +"Los valores más grandes aumentan la utilización de la GPU al reducir el " +"número de\n" +"llamar, beneficiando especialmente a las GPU de gama alta.\n" +"Los sistemas con una GPU de gama baja (o sin GPU) se beneficiarían de " +"valores más pequeños." #: src/settings_translation_file.cpp msgid "" @@ -5924,41 +6029,44 @@ msgid "" "Altering this value is for special usage, leaving it unchanged is\n" "recommended." msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" +"Tamaño de los mapchunks generados por mapgen, expresado en mapblocks (16 " +"nodos).\n" +"ADVERTENCIA: No hay ningún beneficio, y hay varios peligros, en\n" +"aumentar este valor por encima de 5.\n" +"Reducir este valor aumenta la densidad de cuevas y mazmorras.\n" +"Alterar este valor es para uso especial, dejarlo sin cambios es\n" +"recomendable." #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" -msgstr "" +msgstr "Inclinación orbital del cuerpo celeste" #: src/settings_translation_file.cpp msgid "Slice w" -msgstr "" +msgstr "Porción w" #: src/settings_translation_file.cpp msgid "Slope and fill work together to modify the heights." -msgstr "" +msgstr "La pendiente y el relleno trabajan juntos para modificar las alturas." #: src/settings_translation_file.cpp msgid "Small cave maximum number" -msgstr "" +msgstr "Cantidad máxima de cuevas pequeñas" #: src/settings_translation_file.cpp msgid "Small cave minimum number" -msgstr "" +msgstr "Cantidad mínima de cuevas pequeñas" #: src/settings_translation_file.cpp msgid "Small-scale humidity variation for blending biomes on borders." msgstr "" +"Variación de humedad a pequeña escala para mezclar en los límites de los " +"biomas." #: src/settings_translation_file.cpp msgid "Small-scale temperature variation for blending biomes on borders." msgstr "" +"Variación de temperatura a pequeña escala para mezclar biomas en bordes." #: src/settings_translation_file.cpp msgid "Smooth lighting" @@ -5968,7 +6076,7 @@ msgstr "Iluminación suave" #, fuzzy msgid "" "Smooths rotation of camera when in cinematic mode, 0 to disable. Enter " -"cinematic mode by using the key set in Change Keys." +"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." @@ -5992,6 +6100,15 @@ msgstr "Velocidad agachado, en nodos por segundo." msgid "Soft shadow radius" msgstr "Radio de sombra suave" +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "Sonido" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sound Extensions Blacklist" +msgstr "Lista negra de Contenido de la Base de Datos" + #: src/settings_translation_file.cpp msgid "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -6066,7 +6183,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Strip color codes" -msgstr "" +msgstr "Quitar códigos de color" #: src/settings_translation_file.cpp msgid "" @@ -6164,19 +6281,56 @@ msgid "" "The default format in which profiles are being saved,\n" "when calling `/profiler save [format]` without format." msgstr "" +"El formato predefinido en que se guardan los perfiles\n" +"al llamar `/profiler save [format]` sin especificar formato." + +#: src/settings_translation_file.cpp +msgid "" +"The delay in milliseconds after which a touch interaction is considered a " +"long tap." +msgstr "" +"El retraso en milisegundos a partir del cual una interacción táctil es " +"considerada un toque prolongado." #: src/settings_translation_file.cpp msgid "" "The file path relative to your world path in which profiles will be saved to." msgstr "" +"La ruta de archivos relativa a la ruta de los mundos en la que se guardarán " +"los perfiles." + +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" +"El gesto para golpear jugadores/entidades.\n" +"Los juegos y mods pueden ignorar esto.\n" +"\n" +"* sort_tap\n" +"Fácil de usar y muy conocido por otros juegos que no se mencionarán.\n" +"\n" +"* long_tap\n" +"Conocido por los controles clásicos para móviles de Minetest.\n" +"El combate es más o menos imposible." #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" -msgstr "" +msgstr "El identificador del joystick a usar" #: src/settings_translation_file.cpp -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" +"La longitud en píxeles a partir de la cual una interacción táctil es " +"considerada movimiento." #: src/settings_translation_file.cpp msgid "" @@ -6186,6 +6340,15 @@ msgid "" "Default is 1.0 (1/2 node)." msgstr "" +#: 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." + #: src/settings_translation_file.cpp msgid "The network interface that the server listens on." msgstr "" @@ -6195,6 +6358,9 @@ msgid "" "The privileges that new users automatically get.\n" "See /privs in game for a full list on your server and mod configuration." msgstr "" +"Los privilegios que reciben los usuarios nuevos automaticamente.\n" +"Véase /privs en el juego para una lista completa en tu servidor y " +"configuración de mods." #: src/settings_translation_file.cpp msgid "" @@ -6212,8 +6378,12 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" +"El back-end de renderizado.\n" +"Nota: ¡se requiere reinicio 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." #: src/settings_translation_file.cpp msgid "" @@ -6247,6 +6417,8 @@ msgid "" "The time in seconds it takes between repeated events\n" "when holding down a joystick button combination." msgstr "" +"El tiempo en segundos entre eventos repetidos al mantener\n" +"presionada una combinación de botones del joystick." #: src/settings_translation_file.cpp msgid "" @@ -6266,6 +6438,10 @@ msgid "" "enabled. Also, the vertical distance over which humidity drops by 10 if\n" "'altitude_dry' is enabled." msgstr "" +"La distancia vertical sobre la cuál el calor decae a 20 si 'altitude_chill' " +"está activo.\n" +"También, la distancia vertical sobre la cual la humedad decae a 10 si\n" +"'altitude_dry' está activo." #: src/settings_translation_file.cpp msgid "Third of 4 2D noises that together define hill/mountain range height." @@ -6273,11 +6449,17 @@ msgstr "" "Tercero de 4 ruidos en 2D que juntos definen el rango de altura de colinas y " "montañas." +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "Umbral para toques prolongados" + #: 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 "" +"Tiempo, en segundos, de vida de las entidades objeto (objetos soltados).\n" +"Establecerla a -1 desactiva esta característica." #: src/settings_translation_file.cpp msgid "Time of day when a new world is started, in millihours (0-23999)." @@ -6321,15 +6503,15 @@ msgstr "Sensibilidad del ratón" msgid "Touchscreen sensitivity multiplier." msgstr "Multiplicador de sensiblidad del ratón." -#: src/settings_translation_file.cpp -#, fuzzy -msgid "Touchscreen threshold" -msgstr "Umbral de la pantalla táctil" - #: src/settings_translation_file.cpp msgid "Tradeoffs for performance" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Translucent liquids" +msgstr "Líquidos opacos" + #: src/settings_translation_file.cpp msgid "Transparency Sorting Distance" msgstr "" @@ -6368,7 +6550,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 "" #: src/settings_translation_file.cpp @@ -6394,15 +6578,15 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Unload unused server data" -msgstr "" +msgstr "Liberar datos no usados del servidor" #: src/settings_translation_file.cpp msgid "Update information URL" -msgstr "" +msgstr "Actualizar información de URLs" #: src/settings_translation_file.cpp msgid "Upper Y limit of dungeons." -msgstr "" +msgstr "Límite Y superior de las mazmorras." #: src/settings_translation_file.cpp msgid "Upper Y limit of floatlands." @@ -6428,13 +6612,15 @@ msgstr "Usar filtrado bilinear al escalar texturas." #: src/settings_translation_file.cpp msgid "Use crosshair for touch screen" -msgstr "" +msgstr "Usar retícula en pantalla táctil" #: 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 "" +"Usar la retícula para seleccionar objetos en lugar de usar la pantalla.\n" +"Si está activo, una retícula se mostrará y se usará para seleccionar objetos." #: src/settings_translation_file.cpp msgid "" @@ -6456,6 +6642,9 @@ 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." #: src/settings_translation_file.cpp #, fuzzy @@ -6472,10 +6661,6 @@ msgstr "" msgid "User Interfaces" msgstr "Interfaces de usuario" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "Sincronización vertical" @@ -6506,17 +6691,19 @@ msgstr "Variación de la altura maxima de las montañas (En nodos)." #: src/settings_translation_file.cpp msgid "Variation of number of caves." -msgstr "" +msgstr "Variación en el número de cuevas." #: src/settings_translation_file.cpp msgid "" "Variation of terrain vertical scale.\n" "When noise is < -0.55 terrain is near-flat." msgstr "" +"Variación de la escala vertical.\n" +"Cuando el ruido es < -0.55 el terreno es casi plano." #: src/settings_translation_file.cpp msgid "Varies depth of biome surface nodes." -msgstr "" +msgstr "Varía la profundidad de los nodos de la superficie de los biomas." #: src/settings_translation_file.cpp msgid "" @@ -6537,10 +6724,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." #: src/settings_translation_file.cpp msgid "Video driver" -msgstr "" +msgstr "Driver de video" #: src/settings_translation_file.cpp msgid "View bobbing factor" @@ -6562,6 +6751,10 @@ msgstr "" msgid "Volume" msgstr "Volumen" +#: src/settings_translation_file.cpp +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 "" @@ -6571,6 +6764,16 @@ msgstr "" "Volumen de todos los sonidos.\n" "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" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volumetric lighting" +msgstr "Iluminación suave" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6591,6 +6794,7 @@ msgstr "Velocidad del caminar" #: src/settings_translation_file.cpp msgid "Walking, flying and climbing speed in fast mode, in nodes per second." msgstr "" +"Velocidad al caminar, volar y escalar en modo rápido, en nodos por segundo." #: src/settings_translation_file.cpp msgid "Water level" @@ -6598,7 +6802,7 @@ msgstr "Nivel del agua" #: src/settings_translation_file.cpp msgid "Water surface level of the world." -msgstr "" +msgstr "Nivel de superficie de agua del mundo." #: src/settings_translation_file.cpp msgid "Waving Nodes" @@ -6631,7 +6835,7 @@ msgstr "Movimiento de plantas" #: src/settings_translation_file.cpp msgid "Weblink color" -msgstr "" +msgstr "Color de los enlaces web" #: src/settings_translation_file.cpp msgid "" @@ -6712,11 +6916,11 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Width of the selection box lines around nodes." -msgstr "" +msgstr "Ancho de las líneas de la caja de selección alrededor de los nodos." #: src/settings_translation_file.cpp msgid "Window maximized" -msgstr "" +msgstr "Ventana maximizada" #: src/settings_translation_file.cpp msgid "" @@ -6769,6 +6973,7 @@ msgstr "\"Y\" del límite superior de las grandes cuevas." #: src/settings_translation_file.cpp msgid "Y-distance over which caverns expand to full size." msgstr "" +"Distancia en Y sobre la cual las cavernas se expanden a su tamaño completo." #: src/settings_translation_file.cpp msgid "" @@ -6780,7 +6985,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Y-level of average terrain surface." -msgstr "" +msgstr "Nivel Y de superficie de terreno promedio." #: src/settings_translation_file.cpp msgid "Y-level of cavern upper limit." @@ -6788,7 +6993,7 @@ msgstr "Nivel Y del límite superior de las cavernas." #: src/settings_translation_file.cpp msgid "Y-level of higher terrain that creates cliffs." -msgstr "" +msgstr "Nivel Y de terreno más elevado que crea acantilados." #: src/settings_translation_file.cpp msgid "Y-level of lower terrain and seabed." @@ -6817,12 +7022,18 @@ msgstr "Límite de cURL en paralelo" #~ msgid "(game support required)" #~ msgstr "(se requiere soporte de juego)" +#~ msgid "- Address: " +#~ msgstr "- Dirección: " + #~ msgid "- Creative Mode: " #~ msgstr "- Modo creativo: " #~ msgid "- Damage: " #~ msgstr "- Daño: " +#~ msgid "- Port: " +#~ msgstr "- Puerto: " + #~ msgid "" #~ "0 = parallax occlusion with slope information (faster).\n" #~ "1 = relief mapping (slower, more accurate)." @@ -6860,6 +7071,13 @@ msgstr "Límite de cURL en paralelo" #~ "Dejar esto vacío para iniciar un servidor local.\n" #~ "Nótese que el campo de dirección del menú principal anula este ajuste." +#~ msgid "" +#~ "Adjust dpi configuration to your screen (non X11/Android only) e.g. for " +#~ "4k screens." +#~ msgstr "" +#~ "Ajustar la configuración de puntos por pulgada a tu pantalla (no X11/" +#~ "Android sólo), por ejemplo para pantallas 4K." + #~ msgid "" #~ "Adjust the gamma encoding for the light tables. Higher numbers are " #~ "brighter.\n" @@ -6935,6 +7153,9 @@ msgstr "Límite de cURL en paralelo" #~ "Bits por píxel (también conocido como profundidad de color) en modo de " #~ "pantalla completa." +#~ msgid "Block bounds shown for all blocks" +#~ msgstr "Límites de bloque mostrados para todos los bloques" + #~ msgid "Bump Mapping" #~ msgstr "Mapeado de relieve" @@ -6957,6 +7178,9 @@ msgstr "Límite de cURL en paralelo" #~ msgid "Camera update toggle key" #~ msgstr "Tecla alternativa para la actualización de la cámara" +#~ msgid "Change Keys" +#~ msgstr "Configurar teclas" + #~ msgid "Change keys" #~ msgstr "Cambiar teclas" @@ -7033,6 +7257,38 @@ msgstr "Límite de cURL en paralelo" #~ msgstr "" #~ "Controla el ancho de los túneles, un valor menor crea túneles más anchos." +#, c-format +#~ msgid "" +#~ "Controls:\n" +#~ "- %s: move forwards\n" +#~ "- %s: move backwards\n" +#~ "- %s: move left\n" +#~ "- %s: move right\n" +#~ "- %s: jump/climb up\n" +#~ "- %s: dig/punch/use\n" +#~ "- %s: place/use\n" +#~ "- %s: sneak/climb down\n" +#~ "- %s: drop item\n" +#~ "- %s: inventory\n" +#~ "- Mouse: turn/look\n" +#~ "- Mouse wheel: select item\n" +#~ "- %s: chat\n" +#~ msgstr "" +#~ "Controles:\n" +#~ "- %s: moverse hacia adelante\n" +#~ "- %s: moverse hacia atras\n" +#~ "- %s: moverse a la izquierda\n" +#~ "- %s: moverse a la derecha\n" +#~ "- %s: saltar/escalar\n" +#~ "- %s: excavar/golpear\n" +#~ "- %s: colocar/usar\n" +#~ "- %s: agacharse/bajar\n" +#~ "- %s: soltar objeto\n" +#~ "- %s: inventario\n" +#~ "- Ratón: girar/mirar\n" +#~ "- Rueda del ratón: elegir objeto\n" +#~ "- %s: chat\n" + #~ msgid "Creative" #~ msgstr "Creativo" @@ -7042,6 +7298,9 @@ msgstr "Límite de cURL en paralelo" #~ msgid "Crosshair color (R,G,B)." #~ msgstr "Color de la cruz (R,G,B)." +#~ msgid "DPI" +#~ msgstr "DPI" + #~ msgid "Damage" #~ msgstr "Daño" @@ -7131,6 +7390,13 @@ msgstr "Límite de cURL en paralelo" #~ msgid "Enable register confirmation" #~ msgstr "Habilitar confirmación de registro" +#~ msgid "" +#~ "Enable vertex buffer objects.\n" +#~ "This should greatly improve graphics performance." +#~ msgstr "" +#~ "Habilitar los objetos vértices del buffer.\n" +#~ "Esto debería mejorar enormemente el rendimiento de los gráficos." + #~ msgid "Enabled" #~ msgstr "Activado" @@ -7450,6 +7716,9 @@ msgstr "Límite de cURL en paralelo" #~ msgid "Instrumentation" #~ msgstr "Instrumentación" +#~ msgid "Invalid gamespec." +#~ msgstr "Juego especificado no válido." + #~ msgid "Inventory key" #~ msgstr "Tecla Inventario" @@ -8149,6 +8418,13 @@ msgstr "Límite de cURL en paralelo" #~ msgstr "" #~ "Hace que DirectX funcione con LuaJIT. Desactivar si ocasiona problemas." +#~ msgid "Makes all liquids opaque" +#~ msgstr "Vuelve opacos a todos los líquidos" + +#~ msgid "Mapblock mesh generator's MapBlock cache size in MB" +#~ msgstr "" +#~ "Tamaño de cache en MB del Mapblock del generador de la malla del Mapblock" + #~ msgid "Menus" #~ msgstr "Menús" @@ -8351,15 +8627,23 @@ msgstr "Límite de cURL en paralelo" #~ msgid "Simple Leaves" #~ msgstr "Hojas simples" +#~ msgid "" +#~ "Size of the MapBlock cache of the mesh generator. Increasing this will\n" +#~ "increase the cache hit %, reducing the data being copied from the main\n" +#~ "thread, thus reducing jitter." +#~ msgstr "" +#~ "Tamaño de caché del generador de terreno del generador de malla. Esto " +#~ "hace que\n" +#~ "aumenta el porcentaje de aciertos de caché al reducir los datos que se " +#~ "copian del hilo\n" +#~ "principal, reducindo así la fluctuación." + #~ msgid "Smooth Lighting" #~ msgstr "Iluminación suave" #~ msgid "Smooths rotation of camera. 0 to disable." #~ msgstr "Suaviza la rotación de la cámara. 0 para desactivar." -#~ msgid "Sound" -#~ msgstr "Sonido" - #~ msgid "Special" #~ msgstr "Especial" @@ -8412,6 +8696,10 @@ 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" @@ -8506,8 +8794,14 @@ msgstr "Límite de cURL en paralelo" #~ msgid "You died." #~ msgstr "Has muerto." +#~ msgid "You have no games installed." +#~ msgstr "No tienes juegos instalados." + #~ msgid "Z" #~ msgstr "Z" #~ msgid "needs_fallback_font" #~ msgstr "no" + +#~ msgid "ok" +#~ msgstr "Aceptar" diff --git a/po/et/minetest.po b/po/et/minetest.po index efc788ea3..b2f48ed1f 100644 --- a/po/et/minetest.po +++ b/po/et/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Estonian (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" "PO-Revision-Date: 2023-10-22 17:18+0000\n" "Last-Translator: Janar Leas \n" "Language-Team: Estonian ]" +#, fuzzy +msgid "[all | ] [-t]" msgstr "[all | ]" -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" -msgstr "Valmis" - #: builtin/fstk/ui.lua msgid "" msgstr "" @@ -105,6 +103,10 @@ msgstr "Ilmnes viga:" msgid "Main menu" msgstr "Peamenüü" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "Valmis" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Taasühenda" @@ -133,19 +135,26 @@ msgstr "Meie toetame ainult protokolli versiooni $1." msgid "We support protocol versions between version $1 and $2." msgstr "Meie toetame protokolli versioone $1 kuni $2." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "\"$1\" on juba olemas. Kas sa tahad seda üle kirjutada?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" +msgstr "Viga \"$1\" paigaldamisel: $2" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." -msgstr "Paigaldatakse sõltuvused $1 ja $2." +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download \"$1\"" +msgstr "\"$1\" allalaadimine nurjus" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" -msgstr "$1 $2 poolt" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr "$1 allalaadimine nurjus" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "\"$1\" eraldamine nurjus (failitüüpi ei toetata või on arhiiv vigane)" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" @@ -153,156 +162,157 @@ msgstr "" "$1 allalaadimisel,\n" "$2 ootel" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." msgstr "$1 allalaadimine..." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "$1 vajaliku sõltuvust polnud leida." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "Installitakse $1 ja $2 sõltuvus jäetakse vahele." - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "Kõik pakid" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "Juba installeeritud" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "Tagasi peamenüüsse" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "ContentDB ei ole olemas kui Minetest on kompileeritud ilma cURL'ita" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "Allalaadimine..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "Mängud" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +msgstr "Paigalda" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp +msgid "Loading..." +msgstr "Laadimine..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Mods" +msgstr "Mod-id" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "Ei õnnestunud ühtki pakki vastu võtta" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "Tulemused puuduvad" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "Värskendusi pole" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "Ootel" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "Tekstuuripakid" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "Eemalda" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "Värskenda" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "Värskenda kõiki [$1]" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "View more information in a web browser" +msgstr "Vaata rohkem infot veebibrauseris" + +#: 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 "Paigaldatakse sõltuvused $1 ja $2." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "$1 $2 poolt" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "$1 vajaliku sõltuvust polnud leida." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "Installitakse $1 ja $2 sõltuvus jäetakse vahele." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "Juba installeeritud" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "Põhi Mäng:" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "Tühista" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "ContentDB ei ole olemas kui Minetest on kompileeritud ilma cURL'ita" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "Sõltuvused:" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "Allalaadimine..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "Viga \"$1\" paigaldamisel: $2" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download \"$1\"" -msgstr "\"$1\" allalaadimine nurjus" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "$1 allalaadimine nurjus" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "\"$1\" eraldamine nurjus (failitüüpi ei toetata või on arhiiv vigane)" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "Mängud" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "Paigalda" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "Paigalda $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "Paigalda puuduvad sõltuvused" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "Laadimine..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "Mod-id" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "Ei õnnestunud ühtki pakki vastu võtta" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "Tulemused puuduvad" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "Värskendusi pole" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "Ei leitud" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "Kirjuta üle" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "Palun tee kindlaks et põhi mäng on õige." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" -msgstr "Ootel" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" +msgstr "\"$1\" on juba olemas. Kas sa tahad seda üle kirjutada?" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "Tekstuuripakid" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "Eemalda" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "Värskenda" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "Värskenda kõiki [$1]" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "Vaata rohkem infot veebibrauseris" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" -msgstr "" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" +msgstr "Kirjuta üle" #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" @@ -450,10 +460,20 @@ msgstr "Loo" msgid "Decorations" msgstr "Ilmestused" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." msgstr "\"Arendustest\" on mõeldud arendajatele." +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "Keldrid" @@ -829,10 +849,6 @@ msgstr "" msgid "Back" msgstr "Tagasi" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "Vaheta klahve" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -842,7 +858,8 @@ msgstr "Jututuba" msgid "Clear" msgstr "Tühjenda" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "Juhtklahvid" @@ -1051,6 +1068,16 @@ msgstr "Paigalda mäng" msgid "Install games from ContentDB" msgstr "Paigalda mänge sisuvaramust" +#: builtin/mainmenu/tab_local.lua +msgid "Minetest 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 " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "Uus" @@ -1084,8 +1111,8 @@ msgid "Start Game" msgstr "Alusta mängu" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." -msgstr "Sul pole ühtki mängu paigaldatud." +msgid "You need to install a game before you can create a world." +msgstr "" #: builtin/mainmenu/tab_online.lua msgid "Address" @@ -1164,18 +1191,10 @@ msgstr "Tekstuuride laadimine ..." msgid "Rebuilding shaders..." msgstr "Varjutajate taasloomine..." -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "Ühenduse viga (Aeg otsas?)" - #: src/client/clientlauncher.cpp msgid "Could not find or load game: " msgstr "Ei suutnud leida või laadida mängu: " -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "Vale mängu ID." - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "Menüü" @@ -1200,7 +1219,11 @@ msgstr "Salasõnafaili avamine ebaõnnestus: " msgid "Provided world path doesn't exist: " msgstr "Maailma failiteed pole olemas: " -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "Meedia..." + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp msgid "" "\n" "Check debug.txt for details." @@ -1208,18 +1231,10 @@ msgstr "" "\n" "Vaata debug.txt info jaoks." -#: src/client/game.cpp -msgid "- Address: " -msgstr "- Aadress: " - #: src/client/game.cpp msgid "- Mode: " msgstr "- Režiim: " -#: src/client/game.cpp -msgid "- Port: " -msgstr "- Port: " - #: src/client/game.cpp msgid "- Public: " msgstr "- Avalik: " @@ -1254,10 +1269,6 @@ msgstr "Automaatne edastus lubatud" msgid "Block bounds hidden" msgstr "Klotsi servade peitmine" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "Ääriste kuvamine kõigil klotsidel" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "Ääriste kuvamine hoitavale klotsile" @@ -1303,6 +1314,10 @@ msgstr "Kliendipoolne skriptimine on keelatud" msgid "Connecting to server..." msgstr "Serveriga ühenduse loomine..." +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "Ühenduse viga (Aeg otsas?)" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "Ühendus nurjus teadmata põhjusel" @@ -1311,47 +1326,14 @@ msgstr "Ühendus nurjus teadmata põhjusel" msgid "Continue" msgstr "Jätka" -#: src/client/game.cpp -#, fuzzy, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" -"Klahvid:\n" -"- %s: liigu edasi\n" -"- %s: liigu tagasi\n" -"- %s: liigu vasakule\n" -"- %s: liigu paremale\n" -"- %s: hüppa/roni\n" -"- %s: kaeva/viruta\n" -"- %s: paigalda/kasuta\n" -"- %s: hiili/mine alla\n" -"- %s: viska ese\n" -"- %s: seljakott\n" -"- Hiir: keera/vaata\n" -"- Hiireratas: vali ese\n" -"- %s: vestlus\n" - #: src/client/game.cpp #, fuzzy msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1443,6 +1425,11 @@ msgstr "Udu keelatud" msgid "Fog enabled" msgstr "Udu lubatud" +#: src/client/game.cpp +#, fuzzy +msgid "Fog enabled by game or mod" +msgstr "Suumimine on praegu mängu või modi tõttu keelatud" + #: src/client/game.cpp msgid "Game info:" msgstr "Mängu teave:" @@ -1463,10 +1450,6 @@ msgstr "Esemete määratlused..." msgid "KiB/s" msgstr "KiB/s" -#: src/client/game.cpp -msgid "Media..." -msgstr "Meedia..." - #: src/client/game.cpp msgid "MiB/s" msgstr "MiB/s" @@ -1624,10 +1607,6 @@ msgstr "Raamvõrgustiku paljastus" msgid "Zoom currently disabled by game or mod" msgstr "Suumimine on praegu mängu või modi tõttu keelatud" -#: src/client/game.cpp -msgid "ok" -msgstr "sobib" - #: src/client/gameui.cpp msgid "Chat currently disabled by game or mod" msgstr "Vestlus on hetkel tõkestatud mängu või mod-i poolt" @@ -1961,6 +1940,15 @@ msgstr "Pinnakaart, Suurendus ×%d" msgid "Minimap in texture mode" msgstr "Pisikaart tekstuur-laadis" +#: src/client/shader.cpp +#, fuzzy, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "Veebilehe avamine ebaõnnestus" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2150,6 +2138,19 @@ msgstr "Suumi" msgid "press key" msgstr "Vajuta nuppu" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +#, fuzzy +msgid "Unable to open URL" +msgstr "Veebilehe avamine ebaõnnestus" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "Muuda" @@ -2183,6 +2184,7 @@ msgstr "Heli valjus: %d%%" #. 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 "et" @@ -2369,12 +2371,6 @@ msgstr "" msgid "Adds particles when digging a node." msgstr "Lendlevad osakesed klotsi kaevandamisel." -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2397,6 +2393,10 @@ msgstr "Haldaja nimi" msgid "Advanced" msgstr "Arenenud sätted" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2452,6 +2452,17 @@ msgstr "" msgid "Apple trees noise" 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 "Arm inertia" msgstr "" @@ -2473,12 +2484,21 @@ msgid "" "clients.\n" "Small values potentially improve performance a lot, at the expense of " "visible\n" -"rendering glitches (some blocks will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +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 @@ -2543,6 +2563,10 @@ msgstr "Loodusvööndid" msgid "Biome noise" msgstr "" +#: src/settings_translation_file.cpp +msgid "Block cull optimize distance" +msgstr "" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "" @@ -2755,6 +2779,12 @@ msgstr "" msgid "Colored shadows" 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -2886,10 +2916,6 @@ msgid "" "Also controls the object crosshair color" msgstr "" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "" @@ -2939,6 +2965,19 @@ msgid "" "but also uses more resources." 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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "" @@ -3125,6 +3164,11 @@ msgstr "Luba sära" msgid "Enable Bloom Debug" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Debanding" +msgstr "Ellujääja" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3144,6 +3188,10 @@ msgid "" "filtering." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable Post Processing" +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "" @@ -3186,6 +3234,10 @@ msgstr "" msgid "Enable mouse wheel (scroll) for item selection in hotbar." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable random mod loading (mainly used for testing)." +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3209,6 +3261,11 @@ msgid "" "expecting." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable touchscreen" +msgstr "Puuteekraan" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3217,12 +3274,6 @@ msgid "" "when connecting to the server." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3252,6 +3303,19 @@ msgstr "" msgid "Enables caching of facedir rotated meshes." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -4053,9 +4117,10 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" #: src/settings_translation_file.cpp @@ -4202,10 +4267,6 @@ msgid "" "Make fog and sky colors depend on daytime (dawn/sunset) and view direction." msgstr "" -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "" @@ -4250,11 +4311,14 @@ msgid "Map generation attributes specific to Mapgen v5." msgstr "" #: 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" "When the 'snowbiomes' flag is enabled jungles are automatically enabled and\n" -"the 'jungles' flag is ignored." +"the 'jungles' flag is ignored.\n" +"The 'temples' flag disables generation of desert temples. Normal dungeons " +"will appear instead." msgstr "" "Maailma-loome v6 spetsiifilised omadused. \n" "Lipp 'lumistud' võimaldab uudse 5-e loodusvööndi süsteemi.\n" @@ -4294,10 +4358,6 @@ msgstr "" msgid "Mapblock mesh generation threads" msgstr "" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "" @@ -4540,6 +4600,10 @@ msgstr "" msgid "Minimap scan height" msgstr "" +#: src/settings_translation_file.cpp +msgid "Minimum dig repetition interval" +msgstr "" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "" @@ -4608,6 +4672,11 @@ msgstr "" msgid "Mouse sensitivity multiplier." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Movement threshold" +msgstr "Koobaste läve" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "" @@ -4716,10 +4785,6 @@ msgstr "" msgid "Occlusion Culling" msgstr "" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -4732,6 +4797,11 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "OpenGL debug" +msgstr "Maailmaloome: veaproov" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "" @@ -4841,6 +4911,15 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Protocol version minimum" +msgstr "Ebaühilduv protokolli versioon. " + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -4856,6 +4935,10 @@ msgstr "" msgid "Random input" msgstr "" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "" @@ -5043,8 +5126,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5162,7 +5245,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" @@ -5195,6 +5278,10 @@ msgid "" "Bright colors will bleed over the neighboring objects." 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 "Set to true to enable waving leaves." msgstr "" @@ -5234,8 +5321,7 @@ msgstr "Varjutajad" msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" #: src/settings_translation_file.cpp @@ -5305,13 +5391,6 @@ msgid "" "recommended." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "" @@ -5347,7 +5426,7 @@ msgstr "Hajus valgus" #: 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 Change Keys." +"cinematic mode by using the key set in Controls." msgstr "" #: src/settings_translation_file.cpp @@ -5368,6 +5447,15 @@ msgstr "" msgid "Soft shadow radius" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sound" +msgstr "Heli vaigistatud" + +#: src/settings_translation_file.cpp +msgid "Sound Extensions Blacklist" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -5524,17 +5612,37 @@ msgid "" "when calling `/profiler save [format]` without format." 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 "" "The file path relative to your world path in which profiles will be saved to." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "" #: src/settings_translation_file.cpp -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" #: src/settings_translation_file.cpp @@ -5545,6 +5653,12 @@ msgid "" "Default is 1.0 (1/2 node)." 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 "The network interface that the server listens on." msgstr "" @@ -5571,7 +5685,7 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" #: src/settings_translation_file.cpp @@ -5628,6 +5742,10 @@ msgstr "" msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "" +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -5675,15 +5793,15 @@ msgstr "Puuteekraan" msgid "Touchscreen sensitivity multiplier." msgstr "" -#: src/settings_translation_file.cpp -#, fuzzy -msgid "Touchscreen threshold" -msgstr "Puuteekraani lävi" - #: src/settings_translation_file.cpp msgid "Tradeoffs for performance" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Translucent liquids" +msgstr "Lainetavad vedelikud" + #: src/settings_translation_file.cpp msgid "Transparency Sorting Distance" msgstr "" @@ -5719,7 +5837,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 "" #: src/settings_translation_file.cpp @@ -5820,10 +5940,6 @@ msgstr "" msgid "User Interfaces" msgstr "" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "" @@ -5910,12 +6026,25 @@ msgstr "" msgid "Volume" msgstr "Valjus" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +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 +#, fuzzy +msgid "Volumetric lighting" +msgstr "Hajus valgus" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6152,12 +6281,18 @@ msgstr "cURL-i interaktiivne aegumine" msgid "cURL parallel limit" msgstr "" +#~ msgid "- Address: " +#~ msgstr "- Aadress: " + #~ msgid "- Creative Mode: " #~ msgstr "- Kujunduslik mängumood: " #~ msgid "- Damage: " #~ msgstr "- Valu: " +#~ msgid "- Port: " +#~ msgstr "- Port: " + #~ msgid "2x" #~ msgstr "2x" @@ -6197,12 +6332,18 @@ msgstr "" #~ msgid "Bilinear Filter" #~ msgstr "Bi-lineaarne filtreerimine" +#~ msgid "Block bounds shown for all blocks" +#~ msgstr "Ääriste kuvamine kõigil klotsidel" + #~ msgid "Bump Mapping" #~ msgstr "Konarlik tapeet" #~ msgid "Bumpmapping" #~ msgstr "Muhkkaardistamine" +#~ msgid "Change Keys" +#~ msgstr "Vaheta klahve" + #, fuzzy #~ msgid "Change keys" #~ msgstr "Vaheta klahve" @@ -6234,6 +6375,38 @@ msgstr "" #~ msgid "Connected Glass" #~ msgstr "Ühendatud klaas" +#, fuzzy, c-format +#~ msgid "" +#~ "Controls:\n" +#~ "- %s: move forwards\n" +#~ "- %s: move backwards\n" +#~ "- %s: move left\n" +#~ "- %s: move right\n" +#~ "- %s: jump/climb up\n" +#~ "- %s: dig/punch/use\n" +#~ "- %s: place/use\n" +#~ "- %s: sneak/climb down\n" +#~ "- %s: drop item\n" +#~ "- %s: inventory\n" +#~ "- Mouse: turn/look\n" +#~ "- Mouse wheel: select item\n" +#~ "- %s: chat\n" +#~ msgstr "" +#~ "Klahvid:\n" +#~ "- %s: liigu edasi\n" +#~ "- %s: liigu tagasi\n" +#~ "- %s: liigu vasakule\n" +#~ "- %s: liigu paremale\n" +#~ "- %s: hüppa/roni\n" +#~ "- %s: kaeva/viruta\n" +#~ "- %s: paigalda/kasuta\n" +#~ "- %s: hiili/mine alla\n" +#~ "- %s: viska ese\n" +#~ "- %s: seljakott\n" +#~ "- Hiir: keera/vaata\n" +#~ "- Hiireratas: vali ese\n" +#~ "- %s: vestlus\n" + #~ msgid "Creative" #~ msgstr "Loominguline" @@ -6326,6 +6499,9 @@ msgstr "" #~ msgid "Install: file: \"$1\"" #~ msgstr "Paigaldus: fail: \"$1\"" +#~ msgid "Invalid gamespec." +#~ msgstr "Vale mängu ID." + #~ msgid "Inventory key" #~ msgstr "Varustuse klahv" @@ -6484,6 +6660,10 @@ msgstr "" #~ msgid "Touch threshold (px):" #~ msgstr "Puutelävi (px):" +#, fuzzy +#~ msgid "Touchscreen threshold" +#~ msgstr "Puuteekraani lävi" + #~ msgid "Trilinear Filter" #~ msgstr "Tri-lineaar filtreerimine" @@ -6545,8 +6725,14 @@ msgstr "" #~ msgid "You died." #~ msgstr "Said otsa." +#~ msgid "You have no games installed." +#~ msgstr "Sul pole ühtki mängu paigaldatud." + #~ msgid "Z" #~ msgstr "Z" #~ msgid "needs_fallback_font" #~ msgstr "no" + +#~ msgid "ok" +#~ msgstr "sobib" diff --git a/po/eu/minetest.po b/po/eu/minetest.po index bb86c118f..48782539f 100644 --- a/po/eu/minetest.po +++ b/po/eu/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" "PO-Revision-Date: 2022-04-29 20:12+0000\n" "Last-Translator: JonAnder Oier \n" "Language-Team: Basque ]" +#, fuzzy +msgid "[all | ] [-t]" msgstr "[guztia | ]" -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" -msgstr "Ados" - #: builtin/fstk/ui.lua msgid "" msgstr "" @@ -106,6 +104,10 @@ msgstr "Errore bat gertatu da:" msgid "Main menu" msgstr "Menu nagusia" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "Ados" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Birkonektatu" @@ -134,19 +136,27 @@ msgstr "$1 bertsioa soilik onartzen dugu." msgid "We support protocol versions between version $1 and $2." msgstr "$1 eta $2 arteko protokolo bertsioak onartzen ditugu." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "\"$1\" existitzen da. Gainidatzi egin nahi al duzu?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" +msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." -msgstr "$1 et $2 mendekotasunak instalatuko dira." +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "Failed to download \"$1\"" +msgstr "Huts egin du $1 deskargatzean" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" -msgstr "$1 bider $2" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr "Huts egin du $1 deskargatzean" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "Instalazioa: Fitxategi ez bateragarria edo fitxategi hautsia" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" @@ -154,159 +164,158 @@ msgstr "" "$1 deskargatzen,\n" "$2 ilaran" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." msgstr "$1 deskargatzen..." -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "All packages" +msgstr "Pakete guztiak" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Back to Main Menu" +msgstr "Itzuli menu nagusira" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "ContentDB ez dago erabilgarri Minetest cURL gabe konpilatzean" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "Deskargatzen..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "Jolasak" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +msgstr "Instalatu" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp +msgid "Loading..." +msgstr "Kargatzen..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Mods" +msgstr "Mod-ak" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "Ezin izan da paketerik eskuratu" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "Emaitzarik ez" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "Eguneraketarik ez" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "Ilaran" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "testura paketeak" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "Desinstalatu" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "Eguneratu" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "Guztia eguneratu [$1]" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "View more information in a web browser" +msgstr "Ikusi informazio gehiago web nabigatzailean" + +#: 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 et $2 mendekotasunak instalatuko dira." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "$1 bider $2" + +#: builtin/mainmenu/content/dlg_install.lua msgid "$1 required dependencies could not be found." msgstr "$1-ek behar dituen mendekotasunak ezin dira aurkitu." -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "$1 will be installed, and $2 dependencies will be skipped." msgstr "" "$1 instalatua izango da, eta $2-ren mendekotasunak baztertu egingo dira." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "All packages" -msgstr "Pakete guztiak" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Already installed" msgstr "Instalaturik jada" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Back to Main Menu" -msgstr "Itzuli menu nagusira" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "Oinarri jokoa:" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "Utzi" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "ContentDB ez dago erabilgarri Minetest cURL gabe konpilatzean" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "Mendekotasunak:" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "Deskargatzen..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to download \"$1\"" -msgstr "Huts egin du $1 deskargatzean" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "Huts egin du $1 deskargatzean" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "Instalazioa: Fitxategi ez bateragarria edo fitxategi hautsia" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "Jolasak" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "Instalatu" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "$1 Instalatu" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "Falta diren mendekotasunak instalatu" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "Kargatzen..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "Mod-ak" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "Ezin izan da paketerik eskuratu" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "Emaitzarik ez" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "Eguneraketarik ez" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "Ez da aurkitu" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "Gainidatzi" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "Mesedez, egiaztatu oinarri jokoa zuzena dela." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" -msgstr "Ilaran" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" +msgstr "\"$1\" existitzen da. Gainidatzi egin nahi al duzu?" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "testura paketeak" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "Desinstalatu" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "Eguneratu" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "Guztia eguneratu [$1]" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "Ikusi informazio gehiago web nabigatzailean" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" -msgstr "" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" +msgstr "Gainidatzi" #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" @@ -458,11 +467,21 @@ msgstr "Sortu" msgid "Decorations" msgstr "Apaingarriak" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua #, fuzzy msgid "Development Test is meant for developers." msgstr "Abisua: Garapen Testa garatzaileentzat da." +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "Leotzak" @@ -837,10 +856,6 @@ msgstr "" msgid "Back" msgstr "Atzera" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "Aldatu teklak" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -850,7 +865,8 @@ msgstr "Txata" msgid "Clear" msgstr "Garbi" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "" @@ -1064,6 +1080,16 @@ msgstr "$1 Instalatu" msgid "Install games from ContentDB" msgstr "Instalatu ContentDB-ko jolasak" +#: builtin/mainmenu/tab_local.lua +msgid "Minetest 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 " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "Berria" @@ -1097,8 +1123,8 @@ msgid "Start Game" msgstr "Hasi partida" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." -msgstr "Ez duzu jolasik instalatuta." +msgid "You need to install a game before you can create a world." +msgstr "" #: builtin/mainmenu/tab_online.lua msgid "Address" @@ -1180,18 +1206,10 @@ msgstr "Testurak kargatzen..." msgid "Rebuilding shaders..." msgstr "Itzalgailuak berreraikitzen..." -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "Konexio-errorea (denbora agortua?)" - #: src/client/clientlauncher.cpp msgid "Could not find or load game: " msgstr "Ezin izan da jokoa aurkitu edo kargatu: " -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "Jokoaren espezifikazioa ez da baliozkoa." - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "Menu nagusia" @@ -1216,24 +1234,20 @@ msgstr "Ezin izan da ireki emandako pasahitzaren fitxategia: " msgid "Provided world path doesn't exist: " msgstr "Zehaztutako munduaren ibilbidea ez da existitzen: " -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "Multimedia..." + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp msgid "" "\n" "Check debug.txt for details." msgstr "" -#: src/client/game.cpp -msgid "- Address: " -msgstr "- Helbidea: " - #: src/client/game.cpp msgid "- Mode: " msgstr "- Modua: " -#: src/client/game.cpp -msgid "- Port: " -msgstr "- Ataka: " - #: src/client/game.cpp msgid "- Public: " msgstr "- Publikoa: " @@ -1269,10 +1283,6 @@ msgstr "" msgid "Block bounds hidden" msgstr "" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "" @@ -1317,6 +1327,10 @@ msgstr "" msgid "Connecting to server..." msgstr "Zerbitzarira konektatzen..." +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "Konexio-errorea (denbora agortua?)" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "Konexioak huts egin du arrazoi ezezagun batengatik" @@ -1325,32 +1339,13 @@ msgstr "Konexioak huts egin du arrazoi ezezagun batengatik" msgid "Continue" msgstr "Jarraitu" -#: src/client/game.cpp -#, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" - #: src/client/game.cpp msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1430,6 +1425,10 @@ msgstr "Lainoa desaktibatuta" msgid "Fog enabled" msgstr "Lainoa gaituta" +#: src/client/game.cpp +msgid "Fog enabled by game or mod" +msgstr "" + #: src/client/game.cpp msgid "Game info:" msgstr "Jokoari buruzko informazioa:" @@ -1450,10 +1449,6 @@ msgstr "Itemen definizioak..." msgid "KiB/s" msgstr "" -#: src/client/game.cpp -msgid "Media..." -msgstr "Multimedia..." - #: src/client/game.cpp msgid "MiB/s" msgstr "" @@ -1611,10 +1606,6 @@ msgstr "" msgid "Zoom currently disabled by game or mod" msgstr "" -#: src/client/game.cpp -msgid "ok" -msgstr "Ados" - #: src/client/gameui.cpp msgid "Chat currently disabled by game or mod" msgstr "" @@ -1948,6 +1939,15 @@ msgstr "" msgid "Minimap in texture mode" msgstr "" +#: src/client/shader.cpp +#, fuzzy, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "Huts egin du $1 deskargatzean" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2139,6 +2139,19 @@ msgstr "Zoom" msgid "press key" msgstr "sakatu tekla" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +#, fuzzy +msgid "Unable to open URL" +msgstr "Huts egin du $1 deskargatzean" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "Aldatu" @@ -2172,6 +2185,7 @@ msgstr "" #. 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 "eu" @@ -2358,12 +2372,6 @@ msgstr "Objektu aktiboak bidaltzeko barrutia" msgid "Adds particles when digging a node." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2387,6 +2395,10 @@ msgstr "Munduaren izena" msgid "Advanced" msgstr "" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2442,6 +2454,17 @@ msgstr "" msgid "Apple trees noise" 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 "Arm inertia" msgstr "" @@ -2463,12 +2486,21 @@ msgid "" "clients.\n" "Small values potentially improve performance a lot, at the expense of " "visible\n" -"rendering glitches (some blocks will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +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 @@ -2533,6 +2565,10 @@ msgstr "Biomak" msgid "Biome noise" msgstr "" +#: src/settings_translation_file.cpp +msgid "Block cull optimize distance" +msgstr "" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "" @@ -2747,6 +2783,12 @@ msgstr "" msgid "Colored shadows" 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -2879,10 +2921,6 @@ msgid "" "Also controls the object crosshair color" msgstr "" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "" @@ -2932,6 +2970,19 @@ msgid "" "but also uses more resources." 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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "" @@ -3120,6 +3171,11 @@ msgstr "Gaitu denak" msgid "Enable Bloom Debug" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Debanding" +msgstr "Kalteak baimendu" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3139,6 +3195,10 @@ msgid "" "filtering." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable Post Processing" +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "" @@ -3181,6 +3241,10 @@ msgstr "" msgid "Enable mouse wheel (scroll) for item selection in hotbar." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable random mod loading (mainly used for testing)." +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3204,6 +3268,10 @@ msgid "" "expecting." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable touchscreen" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3216,12 +3284,6 @@ msgstr "" "Urruneko zerbitzariek deskarga azkarragoa eskaini dezakete multimedia " "deskargatzeko (adib. testurak)." -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3251,6 +3313,19 @@ msgstr "" msgid "Enables caching of facedir rotated meshes." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -4056,9 +4131,10 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" #: src/settings_translation_file.cpp @@ -4208,10 +4284,6 @@ msgid "" "Make fog and sky colors depend on daytime (dawn/sunset) and view direction." msgstr "" -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "" @@ -4260,7 +4332,9 @@ 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." +"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 @@ -4295,10 +4369,6 @@ msgstr "" msgid "Mapblock mesh generation threads" msgstr "" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "" @@ -4541,6 +4611,10 @@ msgstr "" msgid "Minimap scan height" msgstr "" +#: src/settings_translation_file.cpp +msgid "Minimum dig repetition interval" +msgstr "" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "" @@ -4610,6 +4684,10 @@ msgstr "" msgid "Mouse sensitivity multiplier." msgstr "" +#: src/settings_translation_file.cpp +msgid "Movement threshold" +msgstr "" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "" @@ -4719,10 +4797,6 @@ msgstr "" msgid "Occlusion Culling" msgstr "" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -4735,6 +4809,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "OpenGL debug" +msgstr "" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "" @@ -4844,6 +4922,15 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Protocol version minimum" +msgstr "Protokoloaren bertsioen desadostasuna. " + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -4859,6 +4946,10 @@ msgstr "" msgid "Random input" msgstr "" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "" @@ -5048,8 +5139,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5171,7 +5262,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" @@ -5204,6 +5295,10 @@ msgid "" "Bright colors will bleed over the neighboring objects." 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 "Set to true to enable waving leaves." msgstr "" @@ -5243,8 +5338,7 @@ msgstr "Itzalgailuak" msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" #: src/settings_translation_file.cpp @@ -5314,13 +5408,6 @@ msgid "" "recommended." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "" @@ -5356,7 +5443,7 @@ 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 Change Keys." +"cinematic mode by using the key set in Controls." msgstr "" #: src/settings_translation_file.cpp @@ -5377,6 +5464,14 @@ msgstr "" msgid "Soft shadow radius" 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 "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -5536,17 +5631,37 @@ msgstr "" "Profilak gordetzeko lehenetsitako formatua,\n" "`/profiler save [format]` formaturik gabe deitzean erabilia." +#: 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 "" "The file path relative to your world path in which profiles will be saved to." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "" #: src/settings_translation_file.cpp -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" #: src/settings_translation_file.cpp @@ -5557,6 +5672,12 @@ msgid "" "Default is 1.0 (1/2 node)." 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 "The network interface that the server listens on." msgstr "" @@ -5583,7 +5704,7 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" #: src/settings_translation_file.cpp @@ -5640,6 +5761,10 @@ msgstr "" msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "" +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -5690,11 +5815,11 @@ msgid "Touchscreen sensitivity multiplier." msgstr "" #: src/settings_translation_file.cpp -msgid "Touchscreen threshold" +msgid "Tradeoffs for performance" msgstr "" #: src/settings_translation_file.cpp -msgid "Tradeoffs for performance" +msgid "Translucent liquids" msgstr "" #: src/settings_translation_file.cpp @@ -5732,7 +5857,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 "" #: src/settings_translation_file.cpp @@ -5830,10 +5957,6 @@ msgstr "" msgid "User Interfaces" msgstr "" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "" @@ -5920,12 +6043,25 @@ msgstr "" msgid "Volume" msgstr "" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +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 +#, fuzzy +msgid "Volumetric lighting" +msgstr "Nabarmendu nodoak" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6165,12 +6301,18 @@ msgstr "cURL-en denbora muga" msgid "cURL parallel limit" msgstr "" +#~ msgid "- Address: " +#~ msgstr "- Helbidea: " + #~ msgid "- Creative Mode: " #~ msgstr "- Sormen modua: " #~ msgid "- Damage: " #~ msgstr "- Kaltea: " +#~ msgid "- Port: " +#~ msgstr "- Ataka: " + #~ msgid "2x" #~ msgstr "2x" @@ -6205,6 +6347,9 @@ msgstr "" #~ msgid "Camera update toggle key" #~ msgstr "Kameraren eguneraketa txandakatzeko tekla" +#~ msgid "Change Keys" +#~ msgstr "Aldatu teklak" + #, fuzzy #~ msgid "Change keys" #~ msgstr "Aldatu teklak" @@ -6300,6 +6445,9 @@ msgstr "" #~ msgid "Install: file: \"$1\"" #~ msgstr "Instalakuntza: fitxategia: \"$1\"" +#~ msgid "Invalid gamespec." +#~ msgstr "Jokoaren espezifikazioa ez da baliozkoa." + #~ msgid "Inventory key" #~ msgstr "Inbentarioa tekla" @@ -6406,9 +6554,6 @@ msgstr "" #~ msgid "No Mipmap" #~ msgstr "Mipmap gabe" -#~ msgid "Node Highlighting" -#~ msgstr "Nabarmendu nodoak" - #~ msgid "Node Outlining" #~ msgstr "Nodoen ingerada" @@ -6520,8 +6665,14 @@ msgstr "" #~ msgid "You died." #~ msgstr "Hil zara" +#~ msgid "You have no games installed." +#~ msgstr "Ez duzu jolasik instalatuta." + #~ msgid "Z" #~ msgstr "Z" #~ msgid "needs_fallback_font" #~ msgstr "no" + +#~ msgid "ok" +#~ msgstr "Ados" diff --git a/po/fa/minetest.po b/po/fa/minetest.po index ead6b4e4b..6071e15c9 100644 --- a/po/fa/minetest.po +++ b/po/fa/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" "PO-Revision-Date: 2023-12-03 17:17+0000\n" "Last-Translator: Krock \n" "Language-Team: Persian ]" -msgstr "" - -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" +msgid "[all | ] [-t]" msgstr "" #: builtin/fstk/ui.lua @@ -108,6 +104,10 @@ msgstr "" msgid "Main menu" msgstr "" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "" @@ -136,173 +136,180 @@ msgstr "" msgid "We support protocol versions between version $1 and $2." msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download \"$1\"" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +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 "Mods" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "" + +#: 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 "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download \"$1\"" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" msgstr "" #: builtin/mainmenu/content/pkgmgr.lua @@ -449,10 +456,20 @@ msgstr "" msgid "Decorations" msgstr "" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." msgstr "" +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "" @@ -815,10 +832,6 @@ msgstr "" msgid "Back" msgstr "" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -828,7 +841,8 @@ msgstr "" msgid "Clear" msgstr "" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "" @@ -1031,6 +1045,16 @@ msgstr "" msgid "Install games from ContentDB" msgstr "" +#: builtin/mainmenu/tab_local.lua +msgid "Minetest 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 " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "" @@ -1064,7 +1088,7 @@ msgid "Start Game" msgstr "" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." +msgid "You need to install a game before you can create a world." msgstr "" #: builtin/mainmenu/tab_online.lua @@ -1144,18 +1168,10 @@ msgstr "" msgid "Rebuilding shaders..." msgstr "" -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "" - #: src/client/clientlauncher.cpp msgid "Could not find or load game: " msgstr "" -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "" - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "" @@ -1180,24 +1196,20 @@ msgstr "" msgid "Provided world path doesn't exist: " msgstr "" -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +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 "- Address: " -msgstr "" - #: src/client/game.cpp msgid "- Mode: " msgstr "" -#: src/client/game.cpp -msgid "- Port: " -msgstr "" - #: src/client/game.cpp msgid "- Public: " msgstr "" @@ -1232,10 +1244,6 @@ msgstr "" msgid "Block bounds hidden" msgstr "" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "" @@ -1280,6 +1288,10 @@ msgstr "" msgid "Connecting to server..." msgstr "" +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "" @@ -1288,32 +1300,13 @@ msgstr "" msgid "Continue" msgstr "" -#: src/client/game.cpp -#, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" - #: src/client/game.cpp msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1393,6 +1386,10 @@ msgstr "" msgid "Fog enabled" msgstr "" +#: src/client/game.cpp +msgid "Fog enabled by game or mod" +msgstr "" + #: src/client/game.cpp msgid "Game info:" msgstr "" @@ -1413,10 +1410,6 @@ msgstr "" msgid "KiB/s" msgstr "" -#: src/client/game.cpp -msgid "Media..." -msgstr "" - #: src/client/game.cpp msgid "MiB/s" msgstr "" @@ -1572,10 +1565,6 @@ msgstr "" msgid "Zoom currently disabled by game or mod" msgstr "" -#: src/client/game.cpp -msgid "ok" -msgstr "" - #: src/client/gameui.cpp msgid "Chat currently disabled by game or mod" msgstr "" @@ -1896,6 +1885,15 @@ msgstr "" msgid "Minimap in texture mode" msgstr "" +#: src/client/shader.cpp +#, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2085,6 +2083,18 @@ msgstr "" msgid "press key" msgstr "" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Unable to open URL" +msgstr "" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "" @@ -2118,6 +2128,7 @@ msgstr "" #. 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 "fa" @@ -2303,12 +2314,6 @@ msgstr "" msgid "Adds particles when digging a node." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2331,6 +2336,10 @@ msgstr "" msgid "Advanced" msgstr "" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2384,6 +2393,17 @@ msgstr "" msgid "Apple trees noise" 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 "Arm inertia" msgstr "" @@ -2405,12 +2425,21 @@ msgid "" "clients.\n" "Small values potentially improve performance a lot, at the expense of " "visible\n" -"rendering glitches (some blocks will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +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 @@ -2473,6 +2502,10 @@ msgstr "" msgid "Biome noise" msgstr "" +#: src/settings_translation_file.cpp +msgid "Block cull optimize distance" +msgstr "" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "" @@ -2685,6 +2718,12 @@ msgstr "" msgid "Colored shadows" 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -2816,10 +2855,6 @@ msgid "" "Also controls the object crosshair color" msgstr "" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "" @@ -2869,6 +2904,19 @@ msgid "" "but also uses more resources." 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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "" @@ -3053,6 +3101,10 @@ msgstr "" msgid "Enable Bloom Debug" msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable Debanding" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3072,6 +3124,10 @@ msgid "" "filtering." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable Post Processing" +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "" @@ -3114,6 +3170,10 @@ msgstr "" msgid "Enable mouse wheel (scroll) for item selection in hotbar." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable random mod loading (mainly used for testing)." +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3137,6 +3197,10 @@ msgid "" "expecting." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable touchscreen" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3145,12 +3209,6 @@ msgid "" "when connecting to the server." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3180,6 +3238,19 @@ msgstr "" msgid "Enables caching of facedir rotated meshes." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -3974,9 +4045,10 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" #: src/settings_translation_file.cpp @@ -4122,10 +4194,6 @@ msgid "" "Make fog and sky colors depend on daytime (dawn/sunset) and view direction." msgstr "" -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "" @@ -4174,7 +4242,9 @@ 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." +"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 @@ -4209,10 +4279,6 @@ msgstr "" msgid "Mapblock mesh generation threads" msgstr "" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "" @@ -4454,6 +4520,10 @@ msgstr "" msgid "Minimap scan height" msgstr "" +#: src/settings_translation_file.cpp +msgid "Minimum dig repetition interval" +msgstr "" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "" @@ -4522,6 +4592,10 @@ msgstr "" msgid "Mouse sensitivity multiplier." msgstr "" +#: src/settings_translation_file.cpp +msgid "Movement threshold" +msgstr "" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "" @@ -4630,10 +4704,6 @@ msgstr "" msgid "Occlusion Culling" msgstr "" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -4646,6 +4716,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "OpenGL debug" +msgstr "" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "" @@ -4755,6 +4829,14 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "" +#: src/settings_translation_file.cpp +msgid "Protocol version minimum" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -4770,6 +4852,10 @@ msgstr "" msgid "Random input" msgstr "" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "" @@ -4957,8 +5043,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5076,7 +5162,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" @@ -5109,6 +5195,10 @@ msgid "" "Bright colors will bleed over the neighboring objects." 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 "Set to true to enable waving leaves." msgstr "" @@ -5148,8 +5238,7 @@ msgstr "" msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" #: src/settings_translation_file.cpp @@ -5219,13 +5308,6 @@ msgid "" "recommended." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "" @@ -5261,7 +5343,7 @@ 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 Change Keys." +"cinematic mode by using the key set in Controls." msgstr "" #: src/settings_translation_file.cpp @@ -5282,6 +5364,14 @@ msgstr "" msgid "Soft shadow radius" 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 "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -5438,17 +5528,37 @@ msgid "" "when calling `/profiler save [format]` without format." 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 "" "The file path relative to your world path in which profiles will be saved to." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "" #: src/settings_translation_file.cpp -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" #: src/settings_translation_file.cpp @@ -5459,6 +5569,12 @@ msgid "" "Default is 1.0 (1/2 node)." 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 "The network interface that the server listens on." msgstr "" @@ -5485,7 +5601,7 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" #: src/settings_translation_file.cpp @@ -5542,6 +5658,10 @@ msgstr "" msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "" +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -5589,11 +5709,11 @@ msgid "Touchscreen sensitivity multiplier." msgstr "" #: src/settings_translation_file.cpp -msgid "Touchscreen threshold" +msgid "Tradeoffs for performance" msgstr "" #: src/settings_translation_file.cpp -msgid "Tradeoffs for performance" +msgid "Translucent liquids" msgstr "" #: src/settings_translation_file.cpp @@ -5631,7 +5751,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 "" #: src/settings_translation_file.cpp @@ -5729,10 +5851,6 @@ msgstr "" msgid "User Interfaces" msgstr "" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "" @@ -5819,12 +5937,24 @@ msgstr "" msgid "Volume" msgstr "" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +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 "Volumetric lighting" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" diff --git a/po/fi/minetest.po b/po/fi/minetest.po index a56e08780..4d4adb71a 100644 --- a/po/fi/minetest.po +++ b/po/fi/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\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" "Language-Team: Finnish ]" +#, fuzzy +msgid "[all | ] [-t]" msgstr "[kaikki | ]" -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" -msgstr "OK" - #: builtin/fstk/ui.lua msgid "" msgstr "" @@ -105,6 +103,10 @@ msgstr "Tapahtui virhe:" msgid "Main menu" msgstr "Päävalikko" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "OK" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Yhdistä uudelleen" @@ -133,19 +135,27 @@ msgstr "Tuemme vain protokollaversiota $1." msgid "We support protocol versions between version $1 and $2." msgstr "Tuemme protokollaversioita välillä $1 ja $2." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "\"$1\" on jo olemassa. Haluatko korvata sen?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" +msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." -msgstr "Riippuvuudet $1 ja $2 asennetaan." +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "Failed to download \"$1\"" +msgstr "Epäonnistui ladata $1" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" -msgstr "$1, tehnyt $2" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr "Epäonnistui ladata $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "Lataus: Tukematon tiedostotyyppi tai rikkinäinen arkisto" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" @@ -153,158 +163,157 @@ msgstr "" "$1 lataa,\n" "$2 jonossa" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." msgstr "$1 latautuu..." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "$1 tarvittavaa riippuvuutta ei löytynyt." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "$1 asennetaan, ja $2 riippuvuutta sivuutetaan." - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "Kaikki paketit" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "Asennettu jo" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "Palaa päävalikkoon" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "ContentDB ei ole saatavilla, jos Minetest on koottu ilman cURLia" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "Ladataan..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "Pelit" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +msgstr "Asenna" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp +msgid "Loading..." +msgstr "Ladataan..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Mods" +msgstr "Modit" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "Paketteja ei löydetty" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "Ei tuloksia" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "Ei päivityksiä" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "Jonotettu" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "Tekstuuripaketit" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "Poista" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "Päivitä" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "Päivitä kaikki [$1]" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "View more information in a web browser" +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 "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 and $2 dependencies will be installed." +msgstr "Riippuvuudet $1 ja $2 asennetaan." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "$1, tehnyt $2" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "$1 tarvittavaa riippuvuutta ei löytynyt." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "$1 asennetaan, ja $2 riippuvuutta sivuutetaan." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "Asennettu jo" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "Peruspeli:" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "Peruuta" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "ContentDB ei ole saatavilla, jos Minetest on koottu ilman cURLia" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "Riippuvuudet:" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "Ladataan..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to download \"$1\"" -msgstr "Epäonnistui ladata $1" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "Epäonnistui ladata $1" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "Lataus: Tukematon tiedostotyyppi tai rikkinäinen arkisto" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "Pelit" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "Asenna" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "Asenna $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "Asenna puuttuvat riippuvuudet" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "Ladataan..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "Modit" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "Paketteja ei löydetty" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "Ei tuloksia" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "Ei päivityksiä" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "Ei löytynyt" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "Ylikirjoita" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" -msgstr "Jonotettu" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" +msgstr "\"$1\" on jo olemassa. Haluatko korvata sen?" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "Tekstuuripaketit" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "Poista" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "Päivitä" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "Päivitä kaikki [$1]" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "Katso lisätietoja verkkoselaimessa" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" -msgstr "" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" +msgstr "Ylikirjoita" #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" @@ -452,11 +461,21 @@ msgstr "Luo" msgid "Decorations" msgstr "Koristeet" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua #, fuzzy msgid "Development Test is meant for developers." msgstr "Varoitus: Development Test on tarkoitettu kehittäjille." +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "" @@ -827,10 +846,6 @@ msgstr "" msgid "Back" msgstr "Taakse" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "Näppäinasetukset" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -840,7 +855,8 @@ msgstr "Keskustelu" msgid "Clear" msgstr "Tyhjennä" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "Ohjaimet" @@ -1047,6 +1063,16 @@ msgstr "Asenna peli" msgid "Install games from ContentDB" msgstr "Asenna pelejä ContentDB:stä" +#: builtin/mainmenu/tab_local.lua +msgid "Minetest 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 " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "Uusi" @@ -1080,8 +1106,8 @@ msgid "Start Game" msgstr "Aloita peli" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." -msgstr "Sinulla ei ole pelejä asennettuna." +msgid "You need to install a game before you can create a world." +msgstr "" #: builtin/mainmenu/tab_online.lua msgid "Address" @@ -1161,18 +1187,10 @@ msgstr "Ladataan tekstuureja..." msgid "Rebuilding shaders..." msgstr "Rakennetaan uudelleen varjostimia..." -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "" - #: src/client/clientlauncher.cpp msgid "Could not find or load game: " msgstr "" -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "" - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "Päävalikko" @@ -1197,24 +1215,20 @@ msgstr "" msgid "Provided world path doesn't exist: " msgstr "" -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +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 "- Address: " -msgstr "- Osoite: " - #: src/client/game.cpp msgid "- Mode: " msgstr "- Tila: " -#: src/client/game.cpp -msgid "- Port: " -msgstr "- Portti: " - #: src/client/game.cpp msgid "- Public: " msgstr "- Julkinen: " @@ -1250,10 +1264,6 @@ msgstr "" msgid "Block bounds hidden" msgstr "" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "" @@ -1298,6 +1308,10 @@ msgstr "" msgid "Connecting to server..." msgstr "Yhdistetään palvelimeen..." +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "" @@ -1306,46 +1320,13 @@ msgstr "" msgid "Continue" msgstr "Jatka" -#: src/client/game.cpp -#, fuzzy, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" -"Ohjaus:\n" -"- %s: liiku eteenpäin\n" -"- %s: liiku taaksepäin\n" -"- %s: liiku vasemmalle\n" -"- %s: liiku oikealle\n" -"- %s: hypi/kiipeä ylös\n" -"- %s: kaiva/lyö\n" -"- %s: aseta/käytä\n" -"- %s: hiivi/kiipeä alas\n" -"- %s: pudota esine\n" -"- %s: inventaario\n" -"- Hiiri: käänny/katso\n" -"- Hiiren rulla: valitse esine \n" -"- %s: keskustelu\n" - #: src/client/game.cpp msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1425,6 +1406,10 @@ msgstr "Sumu pois käytöstä" msgid "Fog enabled" msgstr "Sumu käytössä" +#: src/client/game.cpp +msgid "Fog enabled by game or mod" +msgstr "" + #: src/client/game.cpp msgid "Game info:" msgstr "Pelin tiedot:" @@ -1445,10 +1430,6 @@ msgstr "" msgid "KiB/s" msgstr "" -#: src/client/game.cpp -msgid "Media..." -msgstr "" - #: src/client/game.cpp msgid "MiB/s" msgstr "" @@ -1604,10 +1585,6 @@ msgstr "" msgid "Zoom currently disabled by game or mod" msgstr "" -#: src/client/game.cpp -msgid "ok" -msgstr "" - #: src/client/gameui.cpp msgid "Chat currently disabled by game or mod" msgstr "" @@ -1934,6 +1911,15 @@ msgstr "" msgid "Minimap in texture mode" msgstr "Pienoiskartta tekstuuritilassa" +#: src/client/shader.cpp +#, fuzzy, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "Verkkosivun avaaminen epäonnistui" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2124,6 +2110,19 @@ msgstr "" msgid "press key" msgstr "paina näppäintä" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +#, fuzzy +msgid "Unable to open URL" +msgstr "Verkkosivun avaaminen epäonnistui" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "" @@ -2157,6 +2156,7 @@ msgstr "Äänenvoimakkuus: %d%%" #. 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 "fi" @@ -2344,12 +2344,6 @@ msgstr "" msgid "Adds particles when digging a node." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2373,6 +2367,10 @@ msgstr "Maailman nimi" msgid "Advanced" msgstr "Lisäasetukset" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2428,6 +2426,17 @@ msgstr "" msgid "Apple trees noise" 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 "Arm inertia" msgstr "" @@ -2449,12 +2458,21 @@ msgid "" "clients.\n" "Small values potentially improve performance a lot, at the expense of " "visible\n" -"rendering glitches (some blocks will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +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 @@ -2519,6 +2537,10 @@ msgstr "Biomit" msgid "Biome noise" msgstr "" +#: src/settings_translation_file.cpp +msgid "Block cull optimize distance" +msgstr "" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "" @@ -2733,6 +2755,12 @@ msgstr "" msgid "Colored shadows" 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -2864,10 +2892,6 @@ msgid "" "Also controls the object crosshair color" msgstr "" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "" @@ -2917,6 +2941,19 @@ msgid "" "but also uses more resources." 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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "" @@ -3102,6 +3139,11 @@ msgstr "Ota kaikki käyttöön" msgid "Enable Bloom Debug" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Debanding" +msgstr "Ota vahinko käyttöön" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3121,6 +3163,11 @@ msgid "" "filtering." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Post Processing" +msgstr "Käytä konsoli-ikkunaa" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "" @@ -3163,6 +3210,10 @@ msgstr "" msgid "Enable mouse wheel (scroll) for item selection in hotbar." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable random mod loading (mainly used for testing)." +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3186,6 +3237,11 @@ msgid "" "expecting." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable touchscreen" +msgstr "Koko näyttö" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3194,12 +3250,6 @@ msgid "" "when connecting to the server." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3229,6 +3279,19 @@ msgstr "" msgid "Enables caching of facedir rotated meshes." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -4025,9 +4088,10 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" #: src/settings_translation_file.cpp @@ -4174,10 +4238,6 @@ msgid "" "Make fog and sky colors depend on daytime (dawn/sunset) and view direction." msgstr "" -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "" @@ -4226,7 +4286,9 @@ 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." +"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 @@ -4261,10 +4323,6 @@ msgstr "" msgid "Mapblock mesh generation threads" msgstr "" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "" @@ -4507,6 +4565,10 @@ msgstr "" msgid "Minimap scan height" msgstr "" +#: src/settings_translation_file.cpp +msgid "Minimum dig repetition interval" +msgstr "" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "" @@ -4576,6 +4638,11 @@ msgstr "Hiiren herkkyys" msgid "Mouse sensitivity multiplier." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Movement threshold" +msgstr "Koko näyttö" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "" @@ -4685,10 +4752,6 @@ msgstr "" msgid "Occlusion Culling" msgstr "" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -4701,6 +4764,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "OpenGL debug" +msgstr "" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "" @@ -4810,6 +4877,15 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Protocol version minimum" +msgstr "Protokollaversiot epäyhteensopivat. " + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -4825,6 +4901,10 @@ msgstr "" msgid "Random input" msgstr "" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "" @@ -5015,8 +5095,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5138,7 +5218,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" @@ -5171,6 +5251,10 @@ msgid "" "Bright colors will bleed over the neighboring objects." 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 "Set to true to enable waving leaves." msgstr "" @@ -5210,8 +5294,7 @@ msgstr "Varjostimet" msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" #: src/settings_translation_file.cpp @@ -5281,13 +5364,6 @@ msgid "" "recommended." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "" @@ -5323,7 +5399,7 @@ 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 Change Keys." +"cinematic mode by using the key set in Controls." msgstr "" #: src/settings_translation_file.cpp @@ -5344,6 +5420,14 @@ msgstr "" msgid "Soft shadow radius" msgstr "" +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "Ääni" + +#: src/settings_translation_file.cpp +msgid "Sound Extensions Blacklist" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -5500,17 +5584,37 @@ msgid "" "when calling `/profiler save [format]` without format." 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 "" "The file path relative to your world path in which profiles will be saved to." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "" #: src/settings_translation_file.cpp -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" #: src/settings_translation_file.cpp @@ -5521,6 +5625,12 @@ msgid "" "Default is 1.0 (1/2 node)." 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 "The network interface that the server listens on." msgstr "" @@ -5547,7 +5657,7 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" #: src/settings_translation_file.cpp @@ -5604,6 +5714,10 @@ msgstr "" msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "" +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -5654,12 +5768,11 @@ msgid "Touchscreen sensitivity multiplier." msgstr "Hiiren herkkyys" #: src/settings_translation_file.cpp -#, fuzzy -msgid "Touchscreen threshold" -msgstr "Koko näyttö" +msgid "Tradeoffs for performance" +msgstr "" #: src/settings_translation_file.cpp -msgid "Tradeoffs for performance" +msgid "Translucent liquids" msgstr "" #: src/settings_translation_file.cpp @@ -5697,7 +5810,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 "" #: src/settings_translation_file.cpp @@ -5795,10 +5910,6 @@ msgstr "" msgid "User Interfaces" msgstr "Käyttöliittymät" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "" @@ -5885,12 +5996,24 @@ msgstr "" msgid "Volume" msgstr "" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +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 "Volumetric lighting" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6130,12 +6253,18 @@ msgstr "" #~ msgid "(game support required)" #~ msgstr "(pelituki vaaditaan)" +#~ msgid "- Address: " +#~ msgstr "- Osoite: " + #~ msgid "- Creative Mode: " #~ msgstr "- Luova tila: " #~ msgid "- Damage: " #~ msgstr "- Vahinko: " +#~ msgid "- Port: " +#~ msgstr "- Portti: " + #~ msgid "2x" #~ msgstr "2x" @@ -6160,6 +6289,9 @@ msgstr "" #~ msgid "Bilinear Filter" #~ msgstr "Bilineaarinen suodatus" +#~ msgid "Change Keys" +#~ msgstr "Näppäinasetukset" + #, fuzzy #~ msgid "Change keys" #~ msgstr "Näppäinasetukset" @@ -6167,6 +6299,38 @@ msgstr "" #~ msgid "Connect" #~ msgstr "Yhdistä" +#, fuzzy, c-format +#~ msgid "" +#~ "Controls:\n" +#~ "- %s: move forwards\n" +#~ "- %s: move backwards\n" +#~ "- %s: move left\n" +#~ "- %s: move right\n" +#~ "- %s: jump/climb up\n" +#~ "- %s: dig/punch/use\n" +#~ "- %s: place/use\n" +#~ "- %s: sneak/climb down\n" +#~ "- %s: drop item\n" +#~ "- %s: inventory\n" +#~ "- Mouse: turn/look\n" +#~ "- Mouse wheel: select item\n" +#~ "- %s: chat\n" +#~ msgstr "" +#~ "Ohjaus:\n" +#~ "- %s: liiku eteenpäin\n" +#~ "- %s: liiku taaksepäin\n" +#~ "- %s: liiku vasemmalle\n" +#~ "- %s: liiku oikealle\n" +#~ "- %s: hypi/kiipeä ylös\n" +#~ "- %s: kaiva/lyö\n" +#~ "- %s: aseta/käytä\n" +#~ "- %s: hiivi/kiipeä alas\n" +#~ "- %s: pudota esine\n" +#~ "- %s: inventaario\n" +#~ "- Hiiri: käänny/katso\n" +#~ "- Hiiren rulla: valitse esine \n" +#~ "- %s: keskustelu\n" + #~ msgid "Download a game, such as Minetest Game, from minetest.net" #~ msgstr "Lataa peli, kuten Minetest Game, minetest.netistä" @@ -6255,9 +6419,6 @@ msgstr "" #~ msgid "Smooth Lighting" #~ msgstr "Tasainen valaistus" -#~ msgid "Sound" -#~ msgstr "Ääni" - #~ msgid "Texturing:" #~ msgstr "Teksturointi:" @@ -6298,6 +6459,9 @@ msgstr "" #~ msgid "You died." #~ msgstr "Kuolit." +#~ msgid "You have no games installed." +#~ msgstr "Sinulla ei ole pelejä asennettuna." + #~ msgid "Z" #~ msgstr "Z" diff --git a/po/fil/minetest.po b/po/fil/minetest.po index cecdef67a..51fc54649 100644 --- a/po/fil/minetest.po +++ b/po/fil/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" "PO-Revision-Date: 2022-06-27 03:16+0000\n" "Last-Translator: Marco Santos \n" "Language-Team: Filipino ]" +#, fuzzy +msgid "[all | ] [-t]" msgstr "[all | ]" -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" -msgstr "Sige" - #: builtin/fstk/ui.lua msgid "" msgstr "" @@ -106,6 +104,10 @@ msgstr "May error:" msgid "Main menu" msgstr "Main menu" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "Sige" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Kumonekta uli" @@ -136,19 +138,27 @@ msgid "We support protocol versions between version $1 and $2." msgstr "" "Suportado lang po namin ang mga bersyon ng protocol sa pagitan ng $1 at $2." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "Meron na'ng \"$1\". Gusto mo bang i-overwrite ito?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" +msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." -msgstr "Ii-install ang mga kailangan na $1 at $2." +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "Failed to download \"$1\"" +msgstr "Bigong ma-download ang $1" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" -msgstr "$1 ni $2" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr "Bigong ma-download ang $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "I-install: Di-suportadong file type o sirang archive" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" @@ -156,159 +166,158 @@ msgstr "" "$1 dina-download,\n" "$2 nakapila" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." msgstr "$1 dina-download..." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "Di makita ang $1 (na) kailangan." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "Ii-install ang $1, at lalaktawan ang %2." - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "Lahat ng package" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "Naka-install na" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "Balik sa Main Menu" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "" +"Di magagamit ang ContentDB kapag na-compile ang Minetest nang walang cURL" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "Dina-download..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "Mga Laro" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +msgstr "I-install" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp +msgid "Loading..." +msgstr "Nilo-load..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Mods" +msgstr "Mga Mod" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "Walang makuhang mga package" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "Walang mga resulta" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "Walang mga update" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "Nakapila" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "Mga Texture Pack" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "Burahin" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "I-update" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "I-update Lahat [$1]" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "View more information in a web browser" +msgstr "Tumingin pa ng mas maraming impormasyon sa web browser" + +#: 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 "Ii-install ang mga kailangan na $1 at $2." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "$1 ni $2" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "Di makita ang $1 (na) kailangan." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "Ii-install ang $1, at lalaktawan ang %2." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "Naka-install na" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "Basehang Laro:" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "Ikansela" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "" -"Di magagamit ang ContentDB kapag na-compile ang Minetest nang walang cURL" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "Mga kailangan:" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "Dina-download..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to download \"$1\"" -msgstr "Bigong ma-download ang $1" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "Bigong ma-download ang $1" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "I-install: Di-suportadong file type o sirang archive" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "Mga Laro" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "I-install" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "I-install ang $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "I-install ang mga nawawalang kailangan" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "Nilo-load..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "Mga Mod" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "Walang makuhang mga package" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "Walang mga resulta" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "Walang mga update" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "Di nakita" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "I-overwrite" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "Siguraduhing tama ang basehang laro." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" -msgstr "Nakapila" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" +msgstr "Meron na'ng \"$1\". Gusto mo bang i-overwrite ito?" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "Mga Texture Pack" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "Burahin" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "I-update" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "I-update Lahat [$1]" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "Tumingin pa ng mas maraming impormasyon sa web browser" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" -msgstr "" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" +msgstr "I-overwrite" #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" @@ -461,11 +470,21 @@ msgstr "Gumawa" msgid "Decorations" msgstr "Mga dekorasyon" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua #, fuzzy msgid "Development Test is meant for developers." msgstr "Babala: Para sa mga developer ang Development Test." +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "Mga dungeon" @@ -841,10 +860,6 @@ msgstr "" msgid "Back" msgstr "Pabalik" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "Baguhin ang mga Key" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -854,7 +869,8 @@ msgstr "Chat" msgid "Clear" msgstr "Linisin" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "" @@ -1068,6 +1084,16 @@ msgstr "I-install ang $1" msgid "Install games from ContentDB" msgstr "Mag-install ng mga laro mula sa ContentDB" +#: builtin/mainmenu/tab_local.lua +msgid "Minetest 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 " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "Bago" @@ -1101,8 +1127,8 @@ msgid "Start Game" msgstr "Magsimula" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." -msgstr "Wala kang na-install na mga laro." +msgid "You need to install a game before you can create a world." +msgstr "" #: builtin/mainmenu/tab_online.lua msgid "Address" @@ -1183,18 +1209,10 @@ msgstr "Nilo-load ang mga texture..." msgid "Rebuilding shaders..." msgstr "Rine-rebuild ang mga shader..." -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "Error sa koneksyon (nag-timeout?)" - #: src/client/clientlauncher.cpp msgid "Could not find or load game: " msgstr "Di mahanap o ma-load ang laro: " -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "Invalid na gamespec." - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "Main Menu" @@ -1219,7 +1237,11 @@ msgstr "Bigong mabuksan ang binigay na password file: " msgid "Provided world path doesn't exist: " msgstr "Walang path sa mundo na tumugma sa binigay: " -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "Media..." + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp msgid "" "\n" "Check debug.txt for details." @@ -1227,18 +1249,10 @@ msgstr "" "\n" "Tingnan ang debug.txt para sa mga detalye." -#: src/client/game.cpp -msgid "- Address: " -msgstr "- Address: " - #: src/client/game.cpp msgid "- Mode: " msgstr "- Mode: " -#: src/client/game.cpp -msgid "- Port: " -msgstr "- Port: " - #: src/client/game.cpp msgid "- Public: " msgstr "- Pampubliko: " @@ -1273,10 +1287,6 @@ msgstr "Nakabukas ang kusang pag-abante" msgid "Block bounds hidden" msgstr "Nakatago ang mga block bound" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "Ipinapakita ang mga block bound para sa lahat ng mga block" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "Ipinapakita ang block bound para sa kasalukuyang block" @@ -1324,6 +1334,10 @@ msgstr "Nakasara ang scripting sa client side" msgid "Connecting to server..." msgstr "Kumokonekta sa server..." +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "Error sa koneksyon (nag-timeout?)" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "Bigong makakonekta dahil sa di matukoy na dahilan" @@ -1332,47 +1346,14 @@ msgstr "Bigong makakonekta dahil sa di matukoy na dahilan" msgid "Continue" msgstr "Magpatuloy" -#: src/client/game.cpp -#, fuzzy, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" -"Mga kontrol:\n" -"- %s: abante paharap\n" -"- %s: abante patalikod\n" -"- %s: kumaliwa\n" -"- %s: kumanan\n" -"- %s: tumalon/umakyat\n" -"- %s: maghukay/sumuntok\n" -"- %s: maglagay/gumamit\n" -"- %s: dahan-dahan/bumaba\n" -"- %s: ihulog ang item\n" -"- %s: inventory\n" -"- Mouse: umikot/tumingin\n" -"- Mouse wheel: pumili ng item\n" -"- %s: chat\n" - #: src/client/game.cpp #, fuzzy msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1464,6 +1445,11 @@ msgstr "Nakasara ang hamog" msgid "Fog enabled" msgstr "Nakabukas ang hamog" +#: src/client/game.cpp +#, fuzzy +msgid "Fog enabled by game or mod" +msgstr "Kasalukuyang sinara ng laro o mod ang pag-zoom" + #: src/client/game.cpp msgid "Game info:" msgstr "Info ng laro:" @@ -1484,10 +1470,6 @@ msgstr "Mga definition ng item..." msgid "KiB/s" msgstr "KiB/s" -#: src/client/game.cpp -msgid "Media..." -msgstr "Media..." - #: src/client/game.cpp msgid "MiB/s" msgstr "MiB/s" @@ -1645,10 +1627,6 @@ msgstr "Ipinapakita ang wireframe" msgid "Zoom currently disabled by game or mod" msgstr "Kasalukuyang sinara ng laro o mod ang pag-zoom" -#: src/client/game.cpp -msgid "ok" -msgstr "sige" - #: src/client/gameui.cpp #, fuzzy msgid "Chat currently disabled by game or mod" @@ -1982,6 +1960,15 @@ msgstr "Minimap sa surface mode, Zoom x%d" msgid "Minimap in texture mode" msgstr "Minimap sa texture mode" +#: src/client/shader.cpp +#, fuzzy, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "Bigong mabuksan ang webpage" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2172,6 +2159,19 @@ msgstr "Zoom" msgid "press key" msgstr "pumindot ng key" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +#, fuzzy +msgid "Unable to open URL" +msgstr "Bigong mabuksan ang webpage" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "Baguhin" @@ -2205,6 +2205,7 @@ msgstr "Volume ng Tunog: %d%%" #. 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 "fil" @@ -2439,14 +2440,6 @@ msgstr "Saklaw na mapapadala sa aktibong bagay" msgid "Adds particles when digging a node." msgstr "Nagdadagdag ng mga particle habang naghuhukay ng node." -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" -"Ayusin ang dpi configuration ayon sa screen mo (non X11/Android lang) hal. " -"para sa mga 4k screen." - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2479,6 +2472,10 @@ msgstr "Idagdag ang pangalan ng item" msgid "Advanced" msgstr "Karagdagan" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2542,6 +2539,17 @@ msgstr "Idagdag ang pangalan ng item sa tooltip." msgid "Apple trees noise" msgstr "Noise ng mga puno ng mansanas" +#: 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 "Arm inertia" msgstr "Inertia ng braso" @@ -2559,18 +2567,38 @@ msgid "Ask to reconnect after crash" msgstr "Tanunging kung kokonekta uli matapos mag-crash" #: src/settings_translation_file.cpp +#, fuzzy 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 will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +msgstr "" +"Sa layong ito, agresibong iooptimisa ng server ang mga\n" +"block na ipapadala sa client.\n" +"Posibleng humusay ang performance kapag mababa ang value, pero may mga " +"makikita lang\n" +"mga glitch sa pag-render (may mga block na hindi mare-render sa\n" +"ilalim ng tubig at kweba, paminsan-minsan sa lupa rin).\n" +"Kung lagpas ang value sa max_block_send_distance,\n" +"isasara ang pag-ooptimisa.\n" +"Tinukoy sa mga mapblock (16 na node)." + +#: src/settings_translation_file.cpp +#, fuzzy +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 "" "Sa layong ito, agresibong iooptimisa ng server ang mga\n" "block na ipapadala sa client.\n" @@ -2644,6 +2672,11 @@ msgstr "Mga biome" msgid "Biome noise" msgstr "Noise ng biome" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Block cull optimize distance" +msgstr "Layo ng pag-optimisa sa pagpadala ng block" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "Layo ng pag-optimisa sa pagpadala ng block" @@ -2866,6 +2899,12 @@ msgstr "May kulay na hamog" msgid "Colored shadows" msgstr "Makukulay na anino" +#: 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -2997,10 +3036,6 @@ msgid "" "Also controls the object crosshair color" msgstr "" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "" @@ -3050,6 +3085,19 @@ msgid "" "but also uses more resources." 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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "" @@ -3236,6 +3284,11 @@ msgstr "Buksan lahat" msgid "Enable Bloom Debug" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Debanding" +msgstr "Buksan ang Pinsala" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3255,6 +3308,10 @@ msgid "" "filtering." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable Post Processing" +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "" @@ -3297,6 +3354,10 @@ msgstr "" msgid "Enable mouse wheel (scroll) for item selection in hotbar." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable random mod loading (mainly used for testing)." +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3320,6 +3381,10 @@ msgid "" "expecting." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable touchscreen" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3328,12 +3393,6 @@ msgid "" "when connecting to the server." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3363,6 +3422,19 @@ msgstr "" msgid "Enables caching of facedir rotated meshes." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -4163,9 +4235,10 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" #: src/settings_translation_file.cpp @@ -4312,10 +4385,6 @@ msgid "" "Make fog and sky colors depend on daytime (dawn/sunset) and view direction." msgstr "" -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "" @@ -4364,7 +4433,9 @@ 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." +"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 @@ -4399,10 +4470,6 @@ msgstr "" msgid "Mapblock mesh generation threads" msgstr "" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "" @@ -4645,6 +4712,10 @@ msgstr "" msgid "Minimap scan height" msgstr "" +#: src/settings_translation_file.cpp +msgid "Minimum dig repetition interval" +msgstr "" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "" @@ -4713,6 +4784,11 @@ msgstr "" msgid "Mouse sensitivity multiplier." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Movement threshold" +msgstr "Threshold ng kweba" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "" @@ -4823,10 +4899,6 @@ msgstr "" msgid "Occlusion Culling" msgstr "" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -4839,6 +4911,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "OpenGL debug" +msgstr "" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "" @@ -4948,6 +5024,15 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Protocol version minimum" +msgstr "Di tumugmang bersyon ng protocol. " + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -4963,6 +5048,10 @@ msgstr "" msgid "Random input" msgstr "" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "" @@ -5153,8 +5242,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5276,7 +5365,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" @@ -5309,6 +5398,10 @@ msgid "" "Bright colors will bleed over the neighboring objects." 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 "Set to true to enable waving leaves." msgstr "" @@ -5348,8 +5441,7 @@ msgstr "Mga Shader" msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" #: src/settings_translation_file.cpp @@ -5419,13 +5511,6 @@ msgid "" "recommended." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "" @@ -5461,7 +5546,7 @@ 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 Change Keys." +"cinematic mode by using the key set in Controls." msgstr "" #: src/settings_translation_file.cpp @@ -5482,6 +5567,15 @@ msgstr "" msgid "Soft shadow radius" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sound" +msgstr "Naka-mute ang tunog" + +#: src/settings_translation_file.cpp +msgid "Sound Extensions Blacklist" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -5638,17 +5732,37 @@ msgid "" "when calling `/profiler save [format]` without format." 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 "" "The file path relative to your world path in which profiles will be saved to." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "" #: src/settings_translation_file.cpp -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" #: src/settings_translation_file.cpp @@ -5659,6 +5773,12 @@ msgid "" "Default is 1.0 (1/2 node)." 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 "The network interface that the server listens on." msgstr "" @@ -5685,7 +5805,7 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" #: src/settings_translation_file.cpp @@ -5742,6 +5862,10 @@ msgstr "" msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "" +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -5789,12 +5913,11 @@ msgid "Touchscreen sensitivity multiplier." msgstr "" #: src/settings_translation_file.cpp -#, fuzzy -msgid "Touchscreen threshold" -msgstr "Touchthreshold: (px)" +msgid "Tradeoffs for performance" +msgstr "" #: src/settings_translation_file.cpp -msgid "Tradeoffs for performance" +msgid "Translucent liquids" msgstr "" #: src/settings_translation_file.cpp @@ -5832,7 +5955,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 "" #: src/settings_translation_file.cpp @@ -5935,10 +6060,6 @@ msgstr "" msgid "User Interfaces" msgstr "" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "" @@ -6025,12 +6146,25 @@ msgstr "" msgid "Volume" msgstr "" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +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 +#, fuzzy +msgid "Volumetric lighting" +msgstr "Pag-highlight sa Node" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6267,6 +6401,12 @@ msgstr "" msgid "cURL parallel limit" msgstr "" +#~ msgid "- Address: " +#~ msgstr "- Address: " + +#~ msgid "- Port: " +#~ msgstr "- Port: " + #~ msgid "2x" #~ msgstr "2x" @@ -6292,6 +6432,13 @@ msgstr "" #~ "Tandaan na ang ino-override ng pagsasaayos na ito ang address field sa " #~ "main menu." +#~ msgid "" +#~ "Adjust dpi configuration to your screen (non X11/Android only) e.g. for " +#~ "4k screens." +#~ msgstr "" +#~ "Ayusin ang dpi configuration ayon sa screen mo (non X11/Android lang) " +#~ "hal. para sa mga 4k screen." + #~ msgid "All Settings" #~ msgstr "Lahat ng Pagsasaayos" @@ -6317,6 +6464,9 @@ msgstr "" #~ msgid "Biome API noise parameters" #~ msgstr "Mga parametro sa noise ng temperatura at halumigmig sa Biome API" +#~ msgid "Block bounds shown for all blocks" +#~ msgstr "Ipinapakita ang mga block bound para sa lahat ng mga block" + #~ msgid "" #~ "Camera 'near clipping plane' distance in nodes, between 0 and 0.25\n" #~ "Only works on GLES platforms. Most users will not need to change this.\n" @@ -6333,6 +6483,9 @@ msgstr "" #~ msgid "Camera update toggle key" #~ msgstr "Toggle key sa pag-update sa kamera" +#~ msgid "Change Keys" +#~ msgstr "Baguhin ang mga Key" + #, fuzzy #~ msgid "Change keys" #~ msgstr "Baguhin ang mga Key" @@ -6358,6 +6511,38 @@ msgstr "" #~ msgid "Connected Glass" #~ msgstr "Konektadong Salamin" +#, fuzzy, c-format +#~ msgid "" +#~ "Controls:\n" +#~ "- %s: move forwards\n" +#~ "- %s: move backwards\n" +#~ "- %s: move left\n" +#~ "- %s: move right\n" +#~ "- %s: jump/climb up\n" +#~ "- %s: dig/punch/use\n" +#~ "- %s: place/use\n" +#~ "- %s: sneak/climb down\n" +#~ "- %s: drop item\n" +#~ "- %s: inventory\n" +#~ "- Mouse: turn/look\n" +#~ "- Mouse wheel: select item\n" +#~ "- %s: chat\n" +#~ msgstr "" +#~ "Mga kontrol:\n" +#~ "- %s: abante paharap\n" +#~ "- %s: abante patalikod\n" +#~ "- %s: kumaliwa\n" +#~ "- %s: kumanan\n" +#~ "- %s: tumalon/umakyat\n" +#~ "- %s: maghukay/sumuntok\n" +#~ "- %s: maglagay/gumamit\n" +#~ "- %s: dahan-dahan/bumaba\n" +#~ "- %s: ihulog ang item\n" +#~ "- %s: inventory\n" +#~ "- Mouse: umikot/tumingin\n" +#~ "- Mouse wheel: pumili ng item\n" +#~ "- %s: chat\n" + #~ msgid "Disabled unlimited viewing range" #~ msgstr "Nakasara ang unlimited na viewing range" @@ -6397,6 +6582,9 @@ msgstr "" #~ msgstr "" #~ "I-install ang Mod: Bigong mahanap ang tunay na pangalan ng mod ng: $1" +#~ msgid "Invalid gamespec." +#~ msgstr "Invalid na gamespec." + #~ msgid "" #~ "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" #~ msgstr "" @@ -6415,9 +6603,6 @@ msgstr "" #~ msgid "No Mipmap" #~ msgstr "Walang Mipmap" -#~ msgid "Node Highlighting" -#~ msgstr "Pag-highlight sa Node" - #~ msgid "Node Outlining" #~ msgstr "Pag-outline sa Node" @@ -6466,6 +6651,10 @@ msgstr "" #~ msgid "Tone Mapping" #~ msgstr "Tone Mapping" +#, fuzzy +#~ msgid "Touchscreen threshold" +#~ msgstr "Touchthreshold: (px)" + #~ msgid "Trilinear Filter" #~ msgstr "Trilinear Filter" @@ -6516,5 +6705,11 @@ msgstr "" #~ "Sumali' para kumpirmahin ang paggawa sa account, o pindutin ang " #~ "'Ikansela' para pigilan ito." +#~ msgid "You have no games installed." +#~ msgstr "Wala kang na-install na mga laro." + #~ msgid "Z" #~ msgstr "Z" + +#~ msgid "ok" +#~ msgstr "sige" diff --git a/po/fr/minetest.po b/po/fr/minetest.po index f340e8b2d..233a963d6 100644 --- a/po/fr/minetest.po +++ b/po/fr/minetest.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: French (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" -"PO-Revision-Date: 2023-11-12 15:37+0000\n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" +"PO-Revision-Date: 2024-07-14 21:24+0000\n" "Last-Translator: waxtatect \n" "Language-Team: French \n" @@ -12,11 +12,11 @@ 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-dev\n" +"X-Generator: Weblate 5.7-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" -msgstr "Effacer la file de sortie de message du tchat" +msgstr "Effacer la file de messages du tchat" #: builtin/client/chatcommands.lua msgid "Empty command." @@ -44,7 +44,7 @@ msgstr "Joueurs en ligne : " #: builtin/client/chatcommands.lua msgid "The out chat queue is now empty." -msgstr "La file de sortie de message du tchat est maintenant vide." +msgstr "La file de messages du tchat est maintenant vide." #: builtin/client/chatcommands.lua msgid "This command is disabled by server." @@ -71,8 +71,8 @@ msgid "Command not available: " msgstr "Commande non disponible : " #: builtin/common/chatcommands.lua -msgid "Get help for commands" -msgstr "Obtenir de l'aide pour les commandes" +msgid "Get help for commands (-t: output in chat)" +msgstr "Obtenir de l'aide pour les commandes (-t : afficher dans le tchat)" #: builtin/common/chatcommands.lua msgid "" @@ -82,12 +82,8 @@ msgstr "" "pour tout lister." #: builtin/common/chatcommands.lua -msgid "[all | ]" -msgstr "[all | ]" - -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" -msgstr "OK" +msgid "[all | ] [-t]" +msgstr "[all | ] [-t]" #: builtin/fstk/ui.lua msgid "" @@ -105,13 +101,17 @@ msgstr "Une erreur est survenue :" msgid "Main menu" msgstr "Menu principal" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "OK" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Se reconnecter" #: builtin/fstk/ui.lua msgid "The server has requested a reconnect:" -msgstr "Le serveur souhaite rétablir une connexion :" +msgstr "Le serveur a demandé une reconnexion :" #: builtin/mainmenu/common.lua msgid "Protocol version mismatch. " @@ -134,19 +134,27 @@ msgid "We support protocol versions between version $1 and $2." msgstr "" "Nous prenons en charge seulement les versions du protocole entre $1 et $2." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "« $1 » existe déjà. Voulez-vous l'écraser ?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" +msgstr "Erreur d'installation de « $1 » : $2" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." -msgstr "« $1 » et $2 dépendances seront installées." +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download \"$1\"" +msgstr "Échec du téléchargement de « $1 »" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" -msgstr "« $1 » de $2" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr "Échec du téléchargement de $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "" +"Échec de l'extraction de « $1 » (espace disque insuffisant, type de fichier " +"non pris en charge ou archive endommagée)" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" @@ -154,158 +162,157 @@ msgstr "" "$1 en téléchargement,\n" "$2 mis en attente" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." msgstr "Téléchargement de $1…" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "$1 dépendances nécessaires n'ont pas pu être trouvées." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "« $1 » sera installé, et $2 dépendances seront ignorées." - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "Tous les paquets" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "Déjà installé" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "Retour au menu principal" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "ContentDB n'est pas disponible quand Minetest est compilé sans cURL" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "Téléchargement…" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "Erreur d'obtention des dépendances pour le paquet" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "Jeux" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +msgstr "Installer" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp +msgid "Loading..." +msgstr "Chargement…" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Mods" +msgstr "Mods" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "Aucun paquet n'a pu être récupéré" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "Pas de résultat" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "Aucune mise à jour" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "En attente" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "Packs de textures" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "Le paquet « $1 » n'a pas été trouvé." + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "Désinstaller" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "Mettre à jour" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "Tout mettre à jour [$1]" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "View more information in a web browser" +msgstr "Voir plus d'informations dans le navigateur web" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "You need to install a game before you can install a mod" +msgstr "Vous devez installer un jeu avant d'installer un mod" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 and $2 dependencies will be installed." +msgstr "« $1 » et $2 dépendances seront installées." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "« $1 » de $2" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "$1 dépendances nécessaires n'ont pas pu être trouvées." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "« $1 » sera installé, et $2 dépendances seront ignorées." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "Déjà installé" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "Jeu de base :" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "Annuler" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "ContentDB n'est pas disponible quand Minetest est compilé sans cURL" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "Dépend de :" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "Téléchargement…" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "Erreur d'installation de « $1 » : $2" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download \"$1\"" -msgstr "Échec du téléchargement de « $1 »" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "Échec du téléchargement de $1" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "" -"Échec de l'extraction de « $1 » (type de fichier non pris en charge ou " -"archive endommagée)" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "Jeux" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "Installer" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "Installer $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "Installer les dépendances manquantes" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "Chargement…" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "Mods" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "Aucun paquet n'a pu être récupéré" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "Pas de résultat" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "Aucune mise à jour" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "Non trouvé" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "Écraser" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "Veuillez vérifier que le jeu de base est correct." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" -msgstr "En attente" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" +msgstr "« $1 » existe déjà. Voulez-vous l'écraser ?" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "Packs de textures" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "Le paquet « $1 » n'a pas été trouvé." - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "Désinstaller" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "Mettre à jour" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "Tout mettre à jour [$1]" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "Voir plus d'informations dans un navigateur web" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" -msgstr "Vous devez installer un jeu avant d'installer un mod" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" +msgstr "Écraser" #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" @@ -326,7 +333,7 @@ msgstr "" #: builtin/mainmenu/content/pkgmgr.lua msgid "Unable to find a valid mod, modpack, or game" -msgstr "Impossible de trouver un mod, un modpack ou un jeu valide" +msgstr "Impossible de trouver un mod, un pack de mods ou un jeu valide" #: builtin/mainmenu/content/pkgmgr.lua msgid "Unable to install a $1 as a $2" @@ -421,7 +428,7 @@ msgstr "Le monde « $1 » existe déjà" #: builtin/mainmenu/dlg_create_world.lua msgid "Additional terrain" -msgstr "Terrain supplémentaire" +msgstr "Terrains supplémentaires" #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Altitude chill" @@ -433,7 +440,7 @@ msgstr "Faible humidité en altitude" #: builtin/mainmenu/dlg_create_world.lua msgid "Biome blending" -msgstr "Mélange de biomes" +msgstr "Transition des biomes" #: builtin/mainmenu/dlg_create_world.lua msgid "Biomes" @@ -455,10 +462,22 @@ msgstr "Créer" msgid "Decorations" msgstr "Décorations" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "Temples du désert" + #: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." msgstr "« Development Test » est destiné aux développeurs." +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" +"Variante de donjon différente générée dans les biomes désertiques (seulement " +"si les donjons sont activés)" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "Donjons" @@ -502,7 +521,8 @@ msgstr "Lacs" #: builtin/mainmenu/dlg_create_world.lua msgid "Low humidity and high heat causes shallow or dry rivers" msgstr "" -"Humidité basse et chaleur élevée rendent les rivières peu profondes ou sèches" +"Humidité faible et chaleur élevée rendent les rivières peu profondes ou " +"sèches" #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Mapgen" @@ -510,11 +530,11 @@ msgstr "Générateur de terrain" #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Mapgen flags" -msgstr "Drapeaux de génération de terrain" +msgstr "Options de génération de terrain" #: builtin/mainmenu/dlg_create_world.lua msgid "Mapgen-specific flags" -msgstr "Drapeaux spécifiques au générateur de terrain" +msgstr "Options spécifiques au générateur de terrain" #: builtin/mainmenu/dlg_create_world.lua msgid "Mountains" @@ -597,7 +617,7 @@ msgstr "Varier la profondeur des rivières" #: builtin/mainmenu/dlg_create_world.lua msgid "Very large caverns deep in the underground" -msgstr "Très grandes cavernes profondes souterraines" +msgstr "Très grandes cavernes loin sous la surface" #: builtin/mainmenu/dlg_create_world.lua msgid "World name" @@ -682,7 +702,7 @@ msgstr "Minetest Game n'est plus installé par défaut" #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "Reinstall Minetest Game" -msgstr "Reinstaller Minetest Game" +msgstr "Réinstaller Minetest Game" #: builtin/mainmenu/dlg_rename_modpack.lua msgid "Accept" @@ -839,10 +859,6 @@ msgstr "Accessibilité" msgid "Back" msgstr "Retour" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "Changer les touches" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -852,7 +868,8 @@ msgstr "Tchat" msgid "Clear" msgstr "Effacer" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "Contrôles" @@ -1020,7 +1037,7 @@ msgstr "Renommer" #: builtin/mainmenu/tab_content.lua msgid "Update available?" -msgstr "Mise à jour disponible ?" +msgstr "Mise à jour disponible ?" #: builtin/mainmenu/tab_content.lua msgid "Use Texture Pack" @@ -1058,6 +1075,18 @@ msgstr "Installer un jeu" msgid "Install games from ContentDB" msgstr "Installer des jeux à partir de ContentDB" +#: builtin/mainmenu/tab_local.lua +msgid "Minetest doesn't come with a game by default." +msgstr "Minetest est livré sans jeu par défaut." + +#: builtin/mainmenu/tab_local.lua +msgid "" +"Minetest 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 " +"jeux différents." + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "Nouveau" @@ -1091,8 +1120,8 @@ msgid "Start Game" msgstr "Démarrer" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." -msgstr "Vous n'avez pas de jeu installé." +msgid "You need to install a game before you can create a world." +msgstr "Vous devez en installer un pour créer un nouveau monde." #: builtin/mainmenu/tab_online.lua msgid "Address" @@ -1169,20 +1198,12 @@ msgstr "Chargement des textures…" #: src/client/client.cpp msgid "Rebuilding shaders..." -msgstr "Reconstruction des shaders…" - -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "Erreur de connexion (perte de connexion ?)" +msgstr "Reconstruction des nuanceurs…" #: src/client/clientlauncher.cpp msgid "Could not find or load game: " msgstr "Impossible de trouver ou charger le jeu : " -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "Jeu spécifié invalide." - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "Menu principal" @@ -1207,7 +1228,11 @@ msgstr "Le fichier de mot de passe fourni n'a pas pu être ouvert : " msgid "Provided world path doesn't exist: " msgstr "Le chemin du monde spécifié n'existe pas : " -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "Média…" + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp msgid "" "\n" "Check debug.txt for details." @@ -1215,18 +1240,10 @@ msgstr "" "\n" "Voir « debug.txt » pour plus d'informations." -#: src/client/game.cpp -msgid "- Address: " -msgstr "– Adresse : " - #: src/client/game.cpp msgid "- Mode: " msgstr "– Mode : " -#: src/client/game.cpp -msgid "- Port: " -msgstr "– Port : " - #: src/client/game.cpp msgid "- Public: " msgstr "– Public : " @@ -1247,7 +1264,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" @@ -1261,10 +1278,6 @@ msgstr "Marche automatique activée" msgid "Block bounds hidden" msgstr "Limites des blocs cachées" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "Limites des blocs affichées pour tous les blocs" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "Limites des blocs affichées pour le bloc actuel" @@ -1310,6 +1323,10 @@ msgstr "Les scripts côté client sont désactivés" msgid "Connecting to server..." msgstr "Connexion au serveur…" +#: src/client/game.cpp +msgid "Connection error (timed out?)" +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" @@ -1318,46 +1335,13 @@ msgstr "La connexion a échoué pour une raison inconnue" msgid "Continue" msgstr "Continuer" -#: src/client/game.cpp -#, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" -"Contrôles :\n" -"– %s : avancer\n" -"– %s : reculer\n" -"– %s : à gauche\n" -"– %s : à droite\n" -"– %s : sauter/grimper\n" -"– %s : creuser/taper/utiliser\n" -"– %s : placer/utiliser\n" -"– %s : marcher lentement/descendre\n" -"– %s : lâcher un objet\n" -"– %s : inventaire\n" -"– Souris : tourner/regarder\n" -"– Molette souris : sélectionner un objet\n" -"– %s : tchat\n" - #: src/client/game.cpp msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1366,15 +1350,15 @@ 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/utiliser\n" -"– appui long : creuser/taper/utiliser\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 @@ -1446,6 +1430,10 @@ msgstr "Brouillard désactivé" msgid "Fog enabled" msgstr "Brouillard activé" +#: src/client/game.cpp +msgid "Fog enabled by game or mod" +msgstr "Brouillard actuellement activé par un jeu ou un mod" + #: src/client/game.cpp msgid "Game info:" msgstr "Infos de jeu :" @@ -1466,10 +1454,6 @@ msgstr "Définitions des objets…" msgid "KiB/s" msgstr "Kio/s" -#: src/client/game.cpp -msgid "Media..." -msgstr "Média…" - #: src/client/game.cpp msgid "MiB/s" msgstr "Mio/s" @@ -1631,10 +1615,6 @@ msgstr "Fils de fer affichés" msgid "Zoom currently disabled by game or mod" msgstr "Zoom actuellement désactivé par un jeu ou un mod" -#: src/client/game.cpp -msgid "ok" -msgstr "ok" - #: src/client/gameui.cpp msgid "Chat currently disabled by game or mod" msgstr "Tchat actuellement désactivé par un jeu ou un mod" @@ -1955,6 +1935,16 @@ msgstr "Mini-carte en mode surface, zoom ×%d" msgid "Minimap in texture mode" msgstr "Mini-carte en mode texture" +#: src/client/shader.cpp +#, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "Échec de la compilation du nuanceur « %s »." + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" +"Les nuanceurs sont activés mais GLSL n'est pas pris en charge par le pilote." + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -1982,7 +1972,7 @@ msgstr "Certains mods ont des dépendances insatisfaites :" #: src/gui/guiChatConsole.cpp msgid "Failed to open webpage" -msgstr "Échec de l'ouverture de la page Web" +msgstr "Échec de l'ouverture de la page web" #: src/gui/guiChatConsole.cpp msgid "Opening webpage" @@ -2148,6 +2138,18 @@ msgstr "Zoom" msgid "press key" msgstr "Appuyer sur une touche" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "Ouvrir" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "Ouvrir l'URL ?" + +#: src/gui/guiOpenURL.cpp +msgid "Unable to open URL" +msgstr "Impossible d'ouvrir l'URL" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "Changer" @@ -2181,6 +2183,7 @@ msgstr "Volume du son : %d %%" #. 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 "fr" @@ -2341,15 +2344,15 @@ 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" -"Noter que le mode entrelacé nécessite que les shaders soient activés." +"– 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 msgid "" @@ -2394,7 +2397,7 @@ msgstr "Modificateurs de Blocs Actifs" #: src/settings_translation_file.cpp msgid "Active block management interval" -msgstr "intervalle de gestion des blocs actifs" +msgstr "Intervalle de gestion des blocs actifs" #: src/settings_translation_file.cpp msgid "Active block range" @@ -2408,14 +2411,6 @@ msgstr "Portée des objets actifs envoyés" msgid "Adds particles when digging a node." msgstr "Ajoute des particules lorsqu'un bloc est creusé." -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" -"Ajuste la configuration des PPP à votre écran (non X11 / Android seulement), " -"par exemple pour les écrans 4k." - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2446,6 +2441,10 @@ msgstr "Nom de l’administrateur" msgid "Advanced" msgstr "Avancé" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "Permet aux liquides d'être translucides." + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2505,6 +2504,26 @@ msgstr "Ajouter un nom d'objet à l'infobulle." msgid "Apple trees noise" msgstr "Bruit appliqué aux pommiers" +#: 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 "" +"Appliquer le tramage pour réduire les artefacts de bandes de couleur.\n" +"Le tramage augmente significativement la taille des captures d'écran " +"compressées sans perte.\n" +"Ne fonctionne pas correctement si l'affichage ou le système d'exploitation " +"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 " +"impact plus important sur les performances." + #: src/settings_translation_file.cpp msgid "Arm inertia" msgstr "Inertie du bras" @@ -2528,23 +2547,39 @@ msgid "" "clients.\n" "Small values potentially improve performance a lot, at the expense of " "visible\n" -"rendering glitches (some blocks will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." msgstr "" -"À cette distance le serveur agressivement optimise quels blocs sont envoyés " -"aux clients.\n" +"À cette distance le serveur optimise agressivement les blocs envoyés aux " +"clients.\n" "Des valeurs faibles peuvent augmenter fortement la performance du serveur, " -"mais peut provoquer l'apparition de problèmes de rendu visibles (certains " -"blocs ne sont pas affichés sous l'eau ou dans les cavernes, ou parfois sur " -"terre).\n" +"mais peut provoquer l'apparition de problèmes de rendu (certains blocs " +"peuvent ne pas être rendus correctement dans les grottes).\n" "Une valeur supérieure à « max_block_send_distance » désactive cette " "optimisation.\n" "Établie en blocs de carte (16 nœuds)." +#: 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 "" +"À cette distance le serveur effectue une vérification d'occlusion plus " +"simple et moins coûteuse.\n" +"Des valeurs plus faibles peuvent augmenter la performance du serveur, mais " +"peut provoquer l'apparition de problèmes de rendu (certains blocs ne sont " +"pas visibles).\n" +"Ceci est particulièrement utile pour les très grandes distances de vue (plus " +"de 500).\n" +"Établie en blocs de carte (16 nœuds)." + #: src/settings_translation_file.cpp msgid "Audio" msgstr "Audio" @@ -2605,6 +2640,10 @@ msgstr "API des biomes" msgid "Biome noise" msgstr "Bruit des biomes" +#: src/settings_translation_file.cpp +msgid "Block cull optimize distance" +msgstr "Distance d'optimisation de sélection des blocs" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "Distance d'optimisation d'envoi des blocs" @@ -2808,7 +2847,7 @@ msgstr "Nuages" #: src/settings_translation_file.cpp msgid "Clouds are a client-side effect." -msgstr "Les nuages ont un effet sur le client exclusivement." +msgstr "Activer les nuages côté client." #: src/settings_translation_file.cpp msgid "Clouds in menu" @@ -2822,6 +2861,15 @@ msgstr "Brouillard coloré" msgid "Colored shadows" msgstr "Ombres colorées" +#: 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 "" +"Liste séparée par des virgules des extensions AL et ALC qui ne doivent pas " +"être utilisées.\n" +"Utile pour les tests. Voir « al_extensions.[h, cpp] » pour plus de détails." + #: src/settings_translation_file.cpp msgid "" "Comma-separated list of flags to hide in the content repository.\n" @@ -2832,13 +2880,13 @@ msgid "" "These flags are independent from Minetest versions,\n" "so see a full list at https://content.minetest.net/help/content_flags/" msgstr "" -"Liste des drapeaux séparés par des virgules des paquets à cacher du dépôt " -"des contenus.\n" +"Liste séparés par des virgules des étiquettes des paquets à cacher du dépôt " +"de contenus.\n" "« 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 drapeaux 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épendants des versions de Minetest, consulter la " +"liste complète à l'adresse https://content.minetest.net/help/content_flags/." #: src/settings_translation_file.cpp msgid "" @@ -2913,7 +2961,7 @@ msgstr "Dépôt de contenu" #: src/settings_translation_file.cpp msgid "ContentDB Flag Blacklist" -msgstr "Drapeaux de la liste noire de ContentDB" +msgstr "Étiquettes de la liste noire de ContentDB" #: src/settings_translation_file.cpp msgid "ContentDB Max Concurrent Downloads" @@ -2939,8 +2987,8 @@ msgid "" "Controls sinking speed in liquid when idling. Negative values will cause\n" "you to rise instead." msgstr "" -"Contrôle la vitesse d'immersion dans un liquide lorsque inactif. Des valeurs " -"négatives font remonter." +"Contrôle la vitesse d'enfoncement sans mouvement dans un liquide. Les " +"valeurs négatives entraînent la montée." #: src/settings_translation_file.cpp msgid "Controls steepness/depth of lake depressions." @@ -2987,11 +3035,7 @@ msgid "" "Also controls the object crosshair color" msgstr "" "Couleur du réticule (R,V,B).\n" -"Contrôle également la couleur du réticule de l'objet." - -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "PPP" +"Ceci s'applique également à la couleur du réticule de l'objet." #: src/settings_translation_file.cpp msgid "Debug log file size threshold" @@ -3047,6 +3091,27 @@ msgstr "" "douces en appliquant un disque PCF ou Poisson mais utilise également plus de " "ressources." +#: 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" +"Minetest 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" +"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." + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "Définit des zones où les arbres ont des pommes." @@ -3137,9 +3202,9 @@ 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 "" -"Délai entre les mises à jour du maillage sur le client en ms.\n" +"Délai entre les mises à jour du maillage du client en ms.\n" "Augmenter ceci ralentit le taux de mise à jour et réduit donc les " -"tremblements sur les client lents." +"tremblements sur les clients lents." #: src/settings_translation_file.cpp msgid "Delay in sending blocks after building" @@ -3179,8 +3244,8 @@ msgid "" "When the 'snowbiomes' flag is enabled, this is ignored." msgstr "" "Des déserts apparaissent lorsque « np_biome » dépasse cette valeur.\n" -"Quand le drapeau « snowbiomes » est activé (avec le nouveau système de " -"biomes), ce paramètre est ignoré." +"Quand l'option « snowbiomes » est activée (avec le nouveau système de biomes)" +", ce paramètre est ignoré." #: src/settings_translation_file.cpp msgid "Desynchronize block animation" @@ -3256,6 +3321,10 @@ msgstr "Activer le flou lumineux" msgid "Enable Bloom Debug" msgstr "Activer le débogage du flou lumineux" +#: src/settings_translation_file.cpp +msgid "Enable Debanding" +msgstr "Activer le tramage" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3269,7 +3338,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 sur le client.\n" +"Active 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 @@ -3282,6 +3351,10 @@ msgstr "" "Si activé, utilise le disque de Poisson pour créer des « ombres douces ». " "Sinon, utilise le filtrage PCF." +#: src/settings_translation_file.cpp +msgid "Enable Post Processing" +msgstr "Activer le post-traitement" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "Activer l'élimination des blocs invisibles par Ray Tracing" @@ -3318,7 +3391,7 @@ msgstr "Activer les manettes" #: src/settings_translation_file.cpp msgid "Enable joysticks. Requires a restart to take effect" -msgstr "Activer les manettes. Nécessite un redémarrage pour prendre effet." +msgstr "Active les manettes. Nécessite un redémarrage pour prendre effet." #: src/settings_translation_file.cpp msgid "Enable mod channels support." @@ -3335,9 +3408,14 @@ msgstr "" "de la barre d'inventaire." #: src/settings_translation_file.cpp -msgid "Enable random user input (only used for testing)." +msgid "Enable random mod loading (mainly used for testing)." msgstr "" -"Active l'entrée aléatoire du joueur (seulement utilisé pour des tests)." +"Active 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)." #: src/settings_translation_file.cpp msgid "" @@ -3364,6 +3442,10 @@ msgstr "" "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 touchscreen" +msgstr "Activer l'écran tactile" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3376,14 +3458,6 @@ msgstr "" "rapide de télécharger des données média (ex. : textures) lors de la " "connexion au serveur." -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" -"Active les « vertex buffer objects ».\n" -"Cela devrait grandement augmenter les performances graphiques." - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3424,15 +3498,27 @@ msgstr "Active l'animation des objets de l'inventaire." msgid "Enables caching of facedir rotated meshes." msgstr "Active la mise en cache des mailles orientés « facedir »." +#: 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 +msgid "Enables the post processing pipeline." +msgstr "Active les opérations de post-traitement." + +#: src/settings_translation_file.cpp +msgid "" +"Enables touchscreen mode, allowing you to play the game with a touchscreen." +msgstr "Active le mode écran tactile." + #: 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 "" -"Active les compromis qui réduisent la charge du CPU ou améliorent les " +"Active les compromis pour réduire la charge du CPU où améliorer les " "performances de rendu.\n" -"Au détriment de problèmes visuels mineurs qui n'ont pas d'impact sur la " -"jouabilité." +"Au détriment de problèmes visuels mineurs sans impact sur la jouabilité." #: src/settings_translation_file.cpp msgid "Engine Profiler" @@ -3470,11 +3556,11 @@ msgstr "Compensation de l'exposition" #: src/settings_translation_file.cpp msgid "FPS" -msgstr "FPS" +msgstr "IPS" #: src/settings_translation_file.cpp msgid "FPS when unfocused or paused" -msgstr "FPS lorsqu’il n’est pas sélectionné ou mis en pause" +msgstr "IPS fenêtre non sélectionnée ou jeu mis en pause" #: src/settings_translation_file.cpp msgid "Factor noise" @@ -3523,7 +3609,7 @@ msgstr "Bruit de profondeur de remplissage" #: src/settings_translation_file.cpp msgid "Filmic tone mapping" -msgstr "Mappage de tons filmique" +msgstr "Activer le mappage de tons filmique" #: src/settings_translation_file.cpp msgid "Filtering and Antialiasing" @@ -3578,7 +3664,7 @@ msgstr "Exposant de l'effilement des terrains flottants" #: src/settings_translation_file.cpp msgid "Floatland tapering distance" -msgstr "Hauteur de la base des terrains flottants" +msgstr "Distance d'effilage des terrains flottantes" #: src/settings_translation_file.cpp msgid "Floatland water level" @@ -3772,10 +3858,10 @@ msgid "" "and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" "Attributs de génération de terrain globaux.\n" -"Dans le générateur de terrain v6, le drapeau « décorations » contrôle toutes " +"Dans le générateur de terrain v6, l'option « décorations » contrôle toutes " "les décorations sauf les arbres et les herbes de la jungle.\n" -"Dans tous les autres générateurs de terrains, ce drapeau contrôle toutes les " -"décorations." +"Dans tous les autres générateurs de terrains, cette option contrôle toutes " +"les décorations." #: src/settings_translation_file.cpp msgid "" @@ -3858,7 +3944,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Heat blend noise" -msgstr "Bruit de mélange de chaleur" +msgstr "Bruit de transition de chaleur" #: src/settings_translation_file.cpp msgid "Heat noise" @@ -3945,8 +4031,9 @@ msgid "" "How fast liquid waves will move. Higher = faster.\n" "If negative, liquid waves will move backwards." msgstr "" -"Vitesse de déplacement des ondes de liquides. Plus élevée = plus rapide.\n" -"Si elle est négative, les ondes de liquides se déplacent en arrière." +"Vitesse de déplacement des ondulations des liquides. Plus élevée = plus " +"rapide.\n" +"Si elle est négative, les ondulations des liquides se déplacent en arrière." #: src/settings_translation_file.cpp msgid "" @@ -3964,7 +4051,7 @@ msgid "" "Decrease this to increase liquid resistance to movement." msgstr "" "Ralentissement lors du déplacement dans un liquide.\n" -"Réduire ceci pour augmenter la résistance liquide au mouvement." +"Réduire ceci pour augmenter la résistance au mouvement." #: src/settings_translation_file.cpp msgid "How wide to make rivers." @@ -3972,7 +4059,7 @@ msgstr "Largeur des rivières." #: src/settings_translation_file.cpp msgid "Humidity blend noise" -msgstr "Bruit de mélange de l'humidité" +msgstr "Bruit de transition de l'humidité" #: src/settings_translation_file.cpp msgid "Humidity noise" @@ -3995,8 +4082,8 @@ msgid "" "If FPS would go higher than this, limit it by sleeping\n" "to not waste CPU power for no benefit." msgstr "" -"Si les FPS (nombre d'images par seconde) sont supérieurs à cette valeur.\n" -"Limite les FPS en les mettant en sommeil pour ne pas gaspiller la puissance " +"Si le nombre d'images par seconde est supérieur à cette valeur.\n" +"Limite les IPS en les mettant en sommeil pour ne pas gaspiller la puissance " "du CPU sans aucun bénéfice." #: src/settings_translation_file.cpp @@ -4031,8 +4118,8 @@ msgid "" "If enabled, actions are recorded for rollback.\n" "This option is only read when server starts." msgstr "" -"Si activé, les actions sont enregistrés pour une restauration éventuelle.\n" -"Cette option est seulement activé quand le serveur démarre." +"Si activé, les actions sont enregistrées pour une restauration éventuelle.\n" +"Cette option est lue seulement au démarrage du serveur." #: src/settings_translation_file.cpp msgid "If enabled, disable cheat prevention in multiplayer." @@ -4377,16 +4464,18 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" -"Durée d'intervalle serveur et intervalle auquel les objets sont généralement " -"mis à jour sur le réseau, établie en secondes." +"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." #: src/settings_translation_file.cpp msgid "Length of liquid waves." -msgstr "Longueur des ondes de liquides." +msgstr "Longueur de l'ondulation des liquides." #: src/settings_translation_file.cpp msgid "" @@ -4492,7 +4581,7 @@ msgstr "Régularité de la fluidité des liquides" #: src/settings_translation_file.cpp msgid "Liquid loop max" -msgstr "Itérations maximales pendant la transformation des liquides" +msgstr "Itérations maximales de transformation des liquides" #: src/settings_translation_file.cpp msgid "Liquid queue purge time" @@ -4500,7 +4589,7 @@ msgstr "Délai de nettoyage d'une file de liquide" #: src/settings_translation_file.cpp msgid "Liquid sinking" -msgstr "Écoulement du liquide" +msgstr "Enfoncement dans un liquide" #: src/settings_translation_file.cpp msgid "Liquid update interval in seconds." @@ -4557,10 +4646,6 @@ msgstr "" "Rendre la couleur du brouillard et du ciel différents selon l'heure du jour " "(aube/crépuscule) et la direction du regard." -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "Rend toutes les liquides opaques." - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "Niveau de compression des cartes pour le stockage sur disque" @@ -4606,11 +4691,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é basse 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." @@ -4621,12 +4706,16 @@ 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." +"the 'jungles' flag is ignored.\n" +"The 'temples' flag disables generation of desert temples. Normal dungeons " +"will appear instead." msgstr "" "Attributs spécifiques au générateur de terrain v6.\n" -"Le drapeau « snowbiomes » active le nouveau système à 5 biomes.\n" -"Lorsque le drapeau « snowbiomes » est activé, les jungles sont " -"automatiquement activées et le drapeau « jungles » est ignoré." +"L'option « snowbiomes » active le nouveau système à 5 biomes.\n" +"Lorsque l'option « snowbiomes » est activée, les jungles sont " +"automatiquement activées et l'option « jungles » est ignorée.\n" +"L'option « temples » désactive la génération de temples dans le désert. Des " +"donjons normaux sont ajoutés à la place." #: src/settings_translation_file.cpp msgid "" @@ -4636,10 +4725,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 » : vaste terrain flottant dans l'atmosphère.\n" -"« cavernes » : cavernes immenses souterraines profondes." +"« 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" @@ -4665,10 +4754,6 @@ msgstr "Délai de génération du maillage de blocs de carte" msgid "Mapblock mesh generation threads" msgstr "Fils de génération du maillage de blocs de carte" -#: src/settings_translation_file.cpp -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" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "Délai d'interruption du déchargement de blocs de carte" @@ -4679,7 +4764,7 @@ msgstr "Générateur de terrain carpatien" #: src/settings_translation_file.cpp msgid "Mapgen Carpathian specific flags" -msgstr "Drapeaux spécifiques au générateur de terrain carpatien" +msgstr "Options spécifiques au générateur de terrain carpatien" #: src/settings_translation_file.cpp msgid "Mapgen Flat" @@ -4687,7 +4772,7 @@ msgstr "Générateur de terrain plat" #: src/settings_translation_file.cpp msgid "Mapgen Flat specific flags" -msgstr "Drapeaux spécifiques au générateur de terrain plat" +msgstr "Options spécifiques au générateur de terrain plat" #: src/settings_translation_file.cpp msgid "Mapgen Fractal" @@ -4695,7 +4780,7 @@ msgstr "Générateur de terrain fractal" #: src/settings_translation_file.cpp msgid "Mapgen Fractal specific flags" -msgstr "Drapeaux spécifiques au générateur de terrain fractal" +msgstr "Options spécifiques au générateur de terrain fractal" #: src/settings_translation_file.cpp msgid "Mapgen V5" @@ -4703,7 +4788,7 @@ msgstr "Générateur de terrain v5" #: src/settings_translation_file.cpp msgid "Mapgen V5 specific flags" -msgstr "Drapeaux spécifiques au générateur de terrain v5" +msgstr "Options spécifiques au générateur de terrain v5" #: src/settings_translation_file.cpp msgid "Mapgen V6" @@ -4711,7 +4796,7 @@ msgstr "Générateur de terrain v6" #: src/settings_translation_file.cpp msgid "Mapgen V6 specific flags" -msgstr "Drapeaux spécifiques au générateur de terrain v6" +msgstr "Options spécifiques au générateur de terrain v6" #: src/settings_translation_file.cpp msgid "Mapgen V7" @@ -4719,7 +4804,7 @@ msgstr "Générateur de terrain v7" #: src/settings_translation_file.cpp msgid "Mapgen V7 specific flags" -msgstr "Drapeaux spécifiques au générateur de terrain v7" +msgstr "Options spécifiques au générateur de terrain v7" #: src/settings_translation_file.cpp msgid "Mapgen Valleys" @@ -4727,7 +4812,7 @@ msgstr "Générateur de terrain vallées" #: src/settings_translation_file.cpp msgid "Mapgen Valleys specific flags" -msgstr "Drapeaux spécifiques au générateur de terrain vallées" +msgstr "Options spécifiques au générateur de terrain vallées" #: src/settings_translation_file.cpp msgid "Mapgen debug" @@ -4759,13 +4844,13 @@ msgstr "Paquets maximaux par itération" #: src/settings_translation_file.cpp msgid "Maximum FPS" -msgstr "FPS maximum" +msgstr "IPS maximum" #: src/settings_translation_file.cpp msgid "Maximum FPS when the window is not focused, or when the game is paused." msgstr "" -"FPS maximum lorsque la fenêtre n'est pas sélectionnée, ou lorsque le jeu est " -"en pause." +"Nombre d'images par seconde maximum lorsque la fenêtre n'est pas " +"sélectionnée, ou lorsque le jeu est en pause." #: src/settings_translation_file.cpp msgid "Maximum distance to render shadows." @@ -4794,8 +4879,8 @@ msgid "" "Maximum liquid resistance. Controls deceleration when entering liquid at\n" "high speed." msgstr "" -"Résistance maximale aux liquides. Contrôle la décélération lorsqu'un joueur " -"entre dans un liquide à haute vitesse." +"Résistance maximale aux liquides. Contrôle la décélération lors de l'entrée " +"dans un liquide à haute vitesse." #: src/settings_translation_file.cpp msgid "" @@ -4837,7 +4922,7 @@ msgid "" "be queued.\n" "This should be lower than curl_parallel_limit." msgstr "" -"Nombre maximal de téléchargements simultanés. Les téléchargements dépassant " +"Nombre maximal de téléchargements simultanés. Les téléchargements au-delà de " "cette limite sont mis en file d'attente.\n" "Ce nombre doit être inférieur à la limite de « curl_parallel_limit »." @@ -4855,9 +4940,10 @@ msgid "" "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. Si vous avez une " -"connexion lente, essayer de réduire cette valeur, mais ne pas réduire cette " -"valeur en-dessous du double du nombre de clients maximum sur le serveur." +"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." #: src/settings_translation_file.cpp msgid "Maximum number of players that can be connected simultaneously." @@ -4945,6 +5031,10 @@ msgstr "Niveau minimal de journalisation à écrire dans le tchat." msgid "Minimap scan height" msgstr "Hauteur de balayage de la mini-carte" +#: src/settings_translation_file.cpp +msgid "Minimum dig repetition interval" +msgstr "Intervalle de répétition minimale du minage" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "" @@ -5015,6 +5105,10 @@ msgstr "Sensibilité de la souris" msgid "Mouse sensitivity multiplier." msgstr "Facteur de sensibilité de la souris." +#: src/settings_translation_file.cpp +msgid "Movement threshold" +msgstr "Sensibilité tactile" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "Bruit de boue" @@ -5131,7 +5225,7 @@ msgid "" "This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" -"Nombre de blocs supplémentaires qui peuvent être chargés par « /" +"Nombre de blocs de carte supplémentaires qui peuvent être chargés par « /" "clearobjects » à la fois.\n" "C'est un compromis entre la surcharge de transaction SQLite et la " "consommation mémoire\n" @@ -5159,10 +5253,6 @@ msgstr "Occlusion Culler" msgid "Occlusion Culling" msgstr "Détermination des blocs invisibles" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "Liquides opaques" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -5178,6 +5268,10 @@ msgstr "" "Ouvre le menu pause lorsque la sélection de la fenêtre est perdue. Ne met " "pas en pause si un formspec est ouvert." +#: src/settings_translation_file.cpp +msgid "OpenGL debug" +msgstr "Débogage OpenGL" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "Remplacement optionnel pour la couleur du lien web du tchat." @@ -5205,8 +5299,8 @@ msgid "" "Path to shader directory. If no path is defined, default location will be " "used." msgstr "" -"Répertoire des shaders. Si le chemin n'est pas défini, le chemin par défaut " -"est utilisé." +"Répertoire des nuanceurs. Si le chemin n'est pas défini, le chemin par " +"défaut est utilisé." #: src/settings_translation_file.cpp msgid "" @@ -5315,6 +5409,14 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "Proportion de grandes grottes qui contiennent du liquide." +#: src/settings_translation_file.cpp +msgid "Protocol version minimum" +msgstr "Version du protocole minimale" + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "Gestes tactiles" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -5333,6 +5435,10 @@ msgstr "Élève le terrain pour former des vallées autour des rivières." msgid "Random input" msgstr "Entrée aléatoire" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "Ordre de chargement aléatoire des mods" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "Messages de discussion récents" @@ -5383,8 +5489,8 @@ msgstr "" "Combiner les « byteflags » ci dessous pour restreindre les fonctionnalités " "client, ou mettre 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" +"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" @@ -5520,8 +5626,8 @@ msgid "" "1 means worst quality; 100 means best quality.\n" "Use 0 for default quality." msgstr "" -"Qualité des captures d'écran. Utilisé uniquement pour le format JPEG.\n" -"1 signifie mauvaise qualité ; 100 signifie la meilleure qualité.\n" +"Qualité des captures d'écran. Utilisé seulement pour le format JPEG.\n" +"1 signifie mauvaise qualité ; 100 signifie la meilleure qualité.\n" "Utiliser 0 pour la qualité par défaut." #: src/settings_translation_file.cpp @@ -5552,8 +5658,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5571,16 +5677,17 @@ msgstr "" "\n" "* Aucun – Pas d'anticrénelage (par défaut)\n" "\n" -"* FSAA – Anticrénelage de la scène complète (incompatible avec les shaders)\n" +"* FSAA – Anticrénelage de la scène complète (incompatible avec « Post-" +"traitement » et « Sous-échantillonnage »)\n" "Alias anticrénelage multi-échantillon (MSAA), lisse les bords des blocs mais " "n'affecte pas l'intérieur des textures.\n" "Un redémarrage est nécessaire pour modifier cette option.\n" "\n" -"* FXAA – Anticrénelage approximatif rapide (nécessite des shaders)\n" +"* FXAA – Anticrénelage approximatif rapide (nécessite des nuanceurs)\n" "Applique un filtre de post-traitement pour détecter et lisser les bords à " "contraste élevé, fournit un équilibre entre vitesse et qualité d'image.\n" "\n" -"* SSAA – Anticrénelage par super-échantillonnage (nécessite des shaders)\n" +"* SSAA – Anticrénelage par super-échantillonnage (nécessite des nuanceurs)\n" "Rendu d'une image haute résolution de la scène, puis réduit l'échelle pour " "diminuer le crénelage. C'est la méthode la plus lente et la plus précise." @@ -5713,10 +5820,10 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" -"Définit la langue. Laisser vide pour utiliser la langue du système.\n" +"Définit la langue. Par défaut, la langue du système est utilisée.\n" "Un redémarrage est nécessaire après cette modification." #: src/settings_translation_file.cpp @@ -5760,6 +5867,10 @@ msgstr "" "Active 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 »)." + #: src/settings_translation_file.cpp msgid "Set to true to enable waving leaves." msgstr "Active l'ondulation des feuilles." @@ -5770,7 +5881,7 @@ msgstr "Active 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 végétaux." +msgstr "Active l'ondulation des plantes." #: src/settings_translation_file.cpp msgid "" @@ -5797,7 +5908,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Shader path" -msgstr "Chemin des shaders" +msgstr "Chemin des nuanceurs" #: src/settings_translation_file.cpp msgid "Shaders" @@ -5807,12 +5918,10 @@ msgstr "Nuanceurs" msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" -"Les nuanceurs (« shaders ») permettent des effets visuels avancés et peuvent " -"améliorer les performances de certaines cartes graphiques.\n" -"Fonctionne seulement avec OpenGL." +"Les nuanceurs permettent des effets visuels avancés et peuvent améliorer les " +"performances de certaines cartes graphiques." #: src/settings_translation_file.cpp msgid "Shadow filter quality" @@ -5900,23 +6009,13 @@ msgstr "" "La modification de cette valeur est réservée à un usage spécial. Il est " "conseillé de la laisser inchangée." -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" -"Taille du cache de blocs de carte du générateur de maillage. Augmenter ceci " -"augmente le % d'interception du cache et réduit la copie de données dans le " -"fil principal, réduisant les tremblements." - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "Inclinaison de l'orbite du corps du ciel" #: src/settings_translation_file.cpp msgid "Slice w" -msgstr "Largeur de part" +msgstr "Tranche w" #: src/settings_translation_file.cpp msgid "Slope and fill work together to modify the heights." @@ -5950,11 +6049,10 @@ msgstr "Lissage de l'éclairage" #: 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 Change Keys." +"cinematic mode by using the key set in Controls." msgstr "" "Lisse la rotation de la caméra en mode cinématique, 0 pour désactiver.\n" -"Entrer le mode cinématique en utilisant la touche définie dans « Changer les " -"touches »." +"Entrer le mode cinématique en utilisant la touche définie dans « Contrôles »." #: src/settings_translation_file.cpp msgid "" @@ -5976,6 +6074,14 @@ msgstr "Vitesse de déplacement lent, en nœuds par seconde." msgid "Soft shadow radius" msgstr "Rayon de l'ombre douce" +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "Audio" + +#: src/settings_translation_file.cpp +msgid "Sound Extensions Blacklist" +msgstr "Extensions de la liste noire audio" + #: src/settings_translation_file.cpp msgid "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -5983,8 +6089,8 @@ msgid "" "(obviously, remote_media should end with a slash).\n" "Files that are not present will be fetched the usual way." msgstr "" -"Spécifie l'URL à laquelle les clients obtiennent les fichiers média au lieu " -"d'utiliser le port UDP.\n" +"URL à laquelle les clients obtiennent les fichiers média au lieu d'utiliser " +"le port UDP.\n" "« $filename » doit être accessible depuis « $remote_media$filename » via " "cURL (évidemment, « remote_media » doit se terminer par une barre oblique).\n" "Les fichiers qui ne sont pas présents sont récupérés de la manière " @@ -6041,7 +6147,7 @@ msgstr "Bruit d'étalement des plateaux montagneux" #: src/settings_translation_file.cpp msgid "Strength of 3D mode parallax." -msgstr "Intensité de parallaxe en mode 3D." +msgstr "Intensité parallaxe en mode 3D." #: src/settings_translation_file.cpp msgid "" @@ -6172,7 +6278,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "The URL for the content repository" -msgstr "L'URL du dépôt de contenu." +msgstr "URL du dépôt de contenu." #: src/settings_translation_file.cpp msgid "The dead zone of the joystick" @@ -6186,6 +6292,14 @@ msgstr "" "Format par défaut dans lequel les profils sont enregistrés, lors de l'appel " "de « /profiler save [format] » sans format." +#: src/settings_translation_file.cpp +msgid "" +"The delay in milliseconds after which a touch interaction is considered a " +"long tap." +msgstr "" +"Délai en millisecondes après lequel une interaction tactile est considérée " +"comme un appui long." + #: src/settings_translation_file.cpp msgid "" "The file path relative to your world path in which profiles will be saved to." @@ -6194,14 +6308,37 @@ msgstr "" "sauvegardés." #: src/settings_translation_file.cpp -msgid "The identifier of the joystick to use" -msgstr "L'identifiant de la manette à utiliser." +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" +"Geste pour frapper les joueurs/entités.\n" +"Il peut être remplacé par les jeux et les mods.\n" +"\n" +"* appui bref\n" +"Facile à utiliser et bien connu dans d'autres jeux.\n" +"\n" +"* appui long\n" +"Connu des contrôles classiques de Minetest mobile.\n" +"Le combat est plus ou moins impossible." #: src/settings_translation_file.cpp -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "The identifier of the joystick to use" +msgstr "Identifiant de la manette à utiliser." + +#: src/settings_translation_file.cpp +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" -"Longueur en pixels nécessaire pour que l'interaction avec l'écran tactile " -"commence." +"Longueur en pixels après laquelle une interaction tactile est considérée " +"comme un mouvement." #: src/settings_translation_file.cpp msgid "" @@ -6210,14 +6347,22 @@ msgid "" "0.0 = Wave doesn't move at all.\n" "Default is 1.0 (1/2 node)." msgstr "" -"Hauteur maximale de la surface des liquides ondulants.\n" +"Hauteur maximale de la surface d'ondulation des liquides.\n" "4,0 – la hauteur des vagues est de deux blocs.\n" "0,0 – la vague ne bouge pas du tout.\n" "Par défaut est de 1,0 (1/2 bloc)." +#: src/settings_translation_file.cpp +msgid "" +"The minimum time in seconds it takes between digging nodes when holding\n" +"the dig button." +msgstr "" +"Durée minimale en secondes entre le minage de blocs lors du maintien du " +"bouton ceuser." + #: src/settings_translation_file.cpp msgid "The network interface that the server listens on." -msgstr "L'interface réseau que le serveur écoute." +msgstr "Interface réseau d'écoute du serveur." #: src/settings_translation_file.cpp msgid "" @@ -6250,13 +6395,13 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." 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 shaders sont pris en charge par OpenGL et OGLES2 (expérimental)." +"Les nuanceurs sont pris en charge par tout sauf OGLES1." #: src/settings_translation_file.cpp msgid "" @@ -6274,8 +6419,8 @@ msgid "" "set to the nearest valid value." msgstr "" "Intensité (obscurité) de l'ombrage des blocs avec l'occlusion ambiante.\n" -"Les valeurs plus basses sont plus sombres, les valeurs plus hautes sont plus " -"claires.\n" +"Les valeurs plus faibles sont plus sombres, les valeurs plus hautes sont " +"plus claires.\n" "Une plage valide de valeurs pour ceci se situe entre 0,25 et 4,0.\n" "Si la valeur est en dehors de cette plage alors elle est définie à la plus " "proche des valeurs valides." @@ -6336,6 +6481,10 @@ msgstr "" "Troisième des 4 bruits 2D qui définissent ensemble la hauteur des collines " "et des montagnes." +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "Sensibilité pour les appuis longs" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -6392,14 +6541,14 @@ msgstr "Sensibilité de l'écran tactile" msgid "Touchscreen sensitivity multiplier." msgstr "Facteur de sensibilité de l'écran tactile." -#: src/settings_translation_file.cpp -msgid "Touchscreen threshold" -msgstr "Sensibilité de l'écran tactile" - #: src/settings_translation_file.cpp msgid "Tradeoffs for performance" msgstr "Compromis pour la performance" +#: src/settings_translation_file.cpp +msgid "Translucent liquids" +msgstr "Liquides translucides" + #: src/settings_translation_file.cpp msgid "Transparency Sorting Distance" msgstr "Distance de tri de la transparence" @@ -6448,10 +6597,13 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 du fichier JSON qui fournit des informations sur la nouvelle version de " -"Minetest" +"Minetest.\n" +"Si ce champ est vide, le moteur ne vérifie pas les mises à jour." #: src/settings_translation_file.cpp msgid "URL to the server list displayed in the Multiplayer Tab." @@ -6503,40 +6655,39 @@ msgstr "Activer les nuages 3D au lieu des nuages 2D (plats)." #: src/settings_translation_file.cpp msgid "Use a cloud animation for the main menu background." -msgstr "" -"Utiliser une animation de nuages pour l'arrière-plan du menu principal." +msgstr "Utiliser l'animation des nuages pour l'arrière-plan du menu principal." #: src/settings_translation_file.cpp msgid "Use anisotropic filtering when looking at textures from an angle." msgstr "" -"Utilise le filtrage anisotrope lorsque l'on regarde les textures sous un " +"Utiliser le filtrage anisotrope lorsque l'on regarde les textures sous un " "certain angle." #: src/settings_translation_file.cpp -#, fuzzy msgid "Use bilinear filtering when scaling textures." -msgstr "Utilisation du filtrage trilinéaire." +msgstr "" +"Utiliser le filtrage bilinéaire lors de la mise à l'échelle des textures." #: src/settings_translation_file.cpp msgid "Use crosshair for touch screen" -msgstr "Utiliser le réticule pour l'écran tactile" +msgstr "Utiliser le réticule" #: 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 "" -"Utiliser le réticule pour la sélection d'objets au lieu de l'écran entier.\n" +"Utiliser le réticule pour la sélection d'objets au lieu de l'ensemble de " +"l'écran.\n" "Si activé, un réticule est affiché et utilisé pour la sélection d'objets." #: src/settings_translation_file.cpp -#, fuzzy 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 "" -"Utilise le mip-mapping lors de la réduction d'échelle des textures.\n" +"Utiliser le mip-mapping lors de la mise à l'échelle des textures.\n" "Peut améliorer légèrement les performances, surtout lors de l'utilisation " "d'un pack de textures haute résolution.\n" "La réduction d'échelle avec correction gamma n'est pas prise en charge." @@ -6547,23 +6698,21 @@ msgid "" "This flag enables use of raytraced occlusion culling test for\n" "client mesh sizes smaller than 4x4x4 map blocks." msgstr "" -"Utiliser l'élimination des blocs invisibles par Ray Tracing dans le nouvel " +"Utiliser l'élimination des blocs invisibles par Ray Tracing avec le nouvel " "algorithme.\n" -"Ce drapeau active l'utilisation du test d'élimination des blocs invisibles " +"Cette option active l'utilisation du test d'élimination des blocs invisibles " "par Ray Tracing,\n" -"pour les maillages clients de taille inférieure à 4×4×4 blocs de carte." +"pour les maillages clients de taille inférieure à 4 × 4 × 4 blocs de carte." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Use trilinear filtering when scaling textures.\n" "If both bilinear and trilinear filtering are enabled, trilinear filtering\n" "is applied." msgstr "" -"Utilisation du filtrage trilinéaire lors de la réduction d'échelle des " -"textures.\n" -"Si le filtrage bilinéaire et le filtrage trilinéaire sont activés, le " -"filtrage trilinéaire est appliqué." +"Utiliser le filtrage trilinéaire lors de la mise à l'échelle des textures.\n" +"Si le filtrage bilinéaire et le filtrage trilinéaire sont tous deux activés, " +"le filtrage trilinéaire est appliqué." #: src/settings_translation_file.cpp msgid "" @@ -6571,7 +6720,7 @@ msgid "" "If enabled, virtual joystick will also tap \"Aux1\" button when out of main " "circle." msgstr "" -"Utilise la manette virtuelle pour déclencher le bouton « Aux1 ».\n" +"Utiliser la manette virtuelle pour déclencher le bouton « Aux1 ».\n" "Si activé, la manette virtuelle appuie également sur le bouton « Aux1 » " "lorsqu'en dehors du cercle principal." @@ -6579,10 +6728,6 @@ msgstr "" msgid "User Interfaces" msgstr "Interfaces utilisateur" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "VBO" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "Synchronisation verticale" @@ -6633,8 +6778,8 @@ msgid "" "Defines the 'persistence' value for terrain_base and terrain_alt noises." msgstr "" "Variation de la rugosité du terrain.\n" -"Définit la valeur de « persistance » pour les bruits terrain_base et " -"terrain_alt." +"Définit la valeur de « persistance » pour les bruits « terrain_base » et « " +"terrain_alt »." #: src/settings_translation_file.cpp msgid "Varies steepness of cliffs." @@ -6676,6 +6821,10 @@ msgstr "Manette virtuelle déclenche le bouton Aux1" msgid "Volume" msgstr "Volume du son" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +msgstr "Facteur du volume fenêtre non sélectionnée." + #: src/settings_translation_file.cpp msgid "" "Volume of all sounds.\n" @@ -6684,6 +6833,14 @@ msgstr "" "Volume de tous les sons.\n" "Nécessite le son système pour être activé." +#: src/settings_translation_file.cpp +msgid "Volume when unfocused" +msgstr "Volume fenêtre non sélectionnée" + +#: src/settings_translation_file.cpp +msgid "Volumetric lighting" +msgstr "Éclairage volumétrique" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6692,8 +6849,8 @@ msgid "" "Has no effect on 3D fractals.\n" "Range roughly -2 to 2." msgstr "" -"Coordonnée W de la couche 3D de la forme 4D.\n" -"Détermine la tranche 3D de la forme 4D qui est générée.\n" +"Coordonnée W de la tranche 3D générée d'une fractale 4D.\n" +"Détermine la tranche 3D de la forme 4D générée.\n" "Transforme la forme de la fractale.\n" "N'a aucun effet sur les fractales 3D.\n" "La plage est d'environ -2 à 2." @@ -6725,27 +6882,27 @@ msgstr "Environnement mouvant" #: src/settings_translation_file.cpp msgid "Waving leaves" -msgstr "Feuilles ondulantes" +msgstr "Ondulation des feuilles" #: src/settings_translation_file.cpp msgid "Waving liquids" -msgstr "Liquides ondulants" +msgstr "Ondulation des liquides" #: src/settings_translation_file.cpp msgid "Waving liquids wave height" -msgstr "Hauteur des vagues des liquides ondulants" +msgstr "Hauteur des vagues de l'ondulation des liquides" #: src/settings_translation_file.cpp msgid "Waving liquids wave speed" -msgstr "Vitesse de déplacement des liquides ondulants" +msgstr "Vitesse de déplacement de l'ondulation des liquides" #: src/settings_translation_file.cpp msgid "Waving liquids wavelength" -msgstr "Longueur d'onde des liquides ondulants" +msgstr "Longueur d'onde de l'ondulation des liquides" #: src/settings_translation_file.cpp msgid "Waving plants" -msgstr "Plantes ondulantes" +msgstr "Ondulation des plantes" #: src/settings_translation_file.cpp msgid "Weblink color" @@ -6787,12 +6944,12 @@ msgid "" msgstr "" "En utilisant le filtrage bilinéaire/trilinéaire/anisotrope, les textures de " "basse résolution peuvent être floues.\n" -"Elles seront donc automatiquement agrandies avec l'interpolation du plus " -"proche voisin pour préserver des pixels nets.\n" -"Ceci détermine la taille de la texture minimale pour les textures " -"agrandies ; les valeurs plus hautes rendent plus détaillées, mais " -"nécessitent plus de mémoire. Les puissances de 2 sont recommandées.\n" -"Ce paramètre est appliqué uniquement si le filtrage bilinéaire/trilinéaire/" +"Elles sont donc agrandies avec l'interpolation au plus proche voisin pour " +"préserver des pixels nets.\n" +"Ceci détermine la taille minimale pour les textures agrandies ;\n" +"les valeurs plus élevées ont un rendu plus net, mais nécessitent plus de " +"mémoire. Les puissances de 2 sont recommandées.\n" +"Ce paramètre est appliqué seulement si le filtrage bilinéaire/trilinéaire/" "anisotrope est activé.\n" "Ceci est également utilisé comme taille de texture de nœud de base pour " "l'agrandissement automatique des textures alignées sur le monde." @@ -6829,8 +6986,7 @@ msgid "" "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" -"Définir sur « Activé » si le serveur est paramétré pour redémarrer " -"automatiquement." +"Activer si le serveur est paramétré pour redémarrer automatiquement." #: src/settings_translation_file.cpp msgid "Whether to fog out the end of the visible area." @@ -6853,7 +7009,7 @@ msgid "" "Whether to show the client debug info (has the same effect as hitting F5)." msgstr "" "Détermine la visibilité des informations de débogage du client (même effet " -"que taper F5)." +"que d'appuyer sur F5)." #: src/settings_translation_file.cpp msgid "Width component of the initial window size." @@ -6874,15 +7030,16 @@ msgid "" "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 " -"commande en arrière-plan. Contient les mêmes informations que le fichier " -"« debug.txt » (nom par défaut)." +"commande en arrière-plan.\n" +"Contient les mêmes informations que le fichier « debug.txt » (nom par " +"défaut)." #: 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 "" -"Chemin du monde (tout ce qui relatif au monde est enregistré ici).\n" +"Chemin du monde (tout ce qui existe dans le monde est enregistré ici).\n" "Inutile si démarré depuis le menu." #: src/settings_translation_file.cpp @@ -6930,7 +7087,7 @@ msgstr "Limite haute Y des grandes grottes." #: src/settings_translation_file.cpp msgid "Y-distance over which caverns expand to full size." msgstr "" -"Distance Y jusqu'à laquelle les cavernes s'étendent à leur taille maximale." +"Distance Y sur laquelle les cavernes s'étendent à leur taille maximale." #: src/settings_translation_file.cpp msgid "" @@ -6939,8 +7096,9 @@ 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 "" -"Hauteur-Y à laquelle les terrains flottants commencent à rétrécir.\n" -"L'effilage commence à cette distance de la limite en Y.\n" +"Distance Y sur laquelle les terrains flottants passent d'une densité " +"maximale à une densité nulle.\n" +"L'effilage commence à cette distance, depuis la limite en Y.\n" "Pour une couche solide de terrain flottant, ceci contrôle la hauteur des " "collines et des montagnes.\n" "Doit être inférieure ou égale à la moitié de la distance entre les limites Y." @@ -6984,12 +7142,18 @@ msgstr "Limite parallèle de cURL" #~ msgid "(game support required)" #~ msgstr "(support du jeu requis)" +#~ msgid "- Address: " +#~ msgstr "– Adresse : " + #~ msgid "- Creative Mode: " #~ msgstr "– Mode créatif : " #~ msgid "- Damage: " #~ msgstr "– Dégâts : " +#~ msgid "- Port: " +#~ msgstr "– Port : " + #~ msgid "" #~ "0 = parallax occlusion with slope information (faster).\n" #~ "1 = relief mapping (slower, more accurate)." @@ -7028,6 +7192,13 @@ msgstr "Limite parallèle de cURL" #~ "Noter que le champ de l'adresse dans le menu principal remplace ce " #~ "paramètre." +#~ msgid "" +#~ "Adjust dpi configuration to your screen (non X11/Android only) e.g. for " +#~ "4k screens." +#~ msgstr "" +#~ "Ajuste la configuration des PPP à votre écran (non X11/Android " +#~ "seulement), par exemple pour les écrans 4k." + #~ msgid "" #~ "Adjust the gamma encoding for the light tables. Higher numbers are " #~ "brighter.\n" @@ -7098,6 +7269,9 @@ msgstr "Limite parallèle de cURL" #~ msgid "Bits per pixel (aka color depth) in fullscreen mode." #~ msgstr "Bits par pixel (profondeur de couleur) en mode plein-écran." +#~ msgid "Block bounds shown for all blocks" +#~ msgstr "Limites des blocs affichées pour tous les blocs" + #~ msgid "Bump Mapping" #~ msgstr "Placage de relief" @@ -7123,6 +7297,9 @@ msgstr "Limite parallèle de cURL" #~ msgid "Center of light curve mid-boost." #~ msgstr "Milieu de la courbe de lumière mi-boost." +#~ msgid "Change Keys" +#~ msgstr "Changer les touches" + #~ msgid "Change keys" #~ msgstr "Changer les touches" @@ -7200,6 +7377,38 @@ msgstr "Limite parallèle de cURL" #~ "Contrôle la largeur des tunnels, une valeur plus petite crée des tunnels " #~ "plus larges." +#, c-format +#~ msgid "" +#~ "Controls:\n" +#~ "- %s: move forwards\n" +#~ "- %s: move backwards\n" +#~ "- %s: move left\n" +#~ "- %s: move right\n" +#~ "- %s: jump/climb up\n" +#~ "- %s: dig/punch/use\n" +#~ "- %s: place/use\n" +#~ "- %s: sneak/climb down\n" +#~ "- %s: drop item\n" +#~ "- %s: inventory\n" +#~ "- Mouse: turn/look\n" +#~ "- Mouse wheel: select item\n" +#~ "- %s: chat\n" +#~ msgstr "" +#~ "Contrôles :\n" +#~ "– %s : avancer\n" +#~ "– %s : reculer\n" +#~ "– %s : à gauche\n" +#~ "– %s : à droite\n" +#~ "– %s : sauter/grimper\n" +#~ "– %s : creuser/frapper/utiliser\n" +#~ "– %s : placer/utiliser\n" +#~ "– %s : marcher lentement/descendre\n" +#~ "– %s : lâcher un objet\n" +#~ "– %s : inventaire\n" +#~ "– Souris : tourner/regarder\n" +#~ "– Molette souris : sélectionner un objet\n" +#~ "– %s : tchat\n" + #~ msgid "Creative" #~ msgstr "Créatif" @@ -7209,6 +7418,9 @@ msgstr "Limite parallèle de cURL" #~ msgid "Crosshair color (R,G,B)." #~ msgstr "Couleur du réticule (R,G,B)." +#~ msgid "DPI" +#~ msgstr "PPP" + #~ msgid "Damage" #~ msgstr "Dégâts" @@ -7297,6 +7509,13 @@ msgstr "Limite parallèle de cURL" #~ msgid "Enable register confirmation" #~ msgstr "Activer la confirmation d'enregistrement" +#~ msgid "" +#~ "Enable vertex buffer objects.\n" +#~ "This should greatly improve graphics performance." +#~ msgstr "" +#~ "Active les « vertex buffer objects ».\n" +#~ "Cela devrait grandement augmenter les performances graphiques." + #~ msgid "Enabled" #~ msgstr "Activé" @@ -7612,6 +7831,9 @@ msgstr "Limite parallèle de cURL" #~ msgid "Instrumentation" #~ msgstr "Instrumentalisation" +#~ msgid "Invalid gamespec." +#~ msgstr "Jeu spécifié invalide." + #~ msgid "Inventory key" #~ msgstr "Touche inventaire" @@ -8308,6 +8530,12 @@ msgstr "Limite parallèle de cURL" #~ "Rendre DirectX compatible avec LuaJIT. Désactiver si cela cause des " #~ "problèmes." +#~ msgid "Makes all liquids opaque" +#~ msgstr "Rend tous les liquides opaques." + +#~ 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 "Menus" #~ msgstr "Menus" @@ -8552,15 +8780,21 @@ msgstr "Limite parallèle de cURL" #~ msgid "Simple Leaves" #~ msgstr "Feuilles simples" +#~ msgid "" +#~ "Size of the MapBlock cache of the mesh generator. Increasing this will\n" +#~ "increase the cache hit %, reducing the data being copied from the main\n" +#~ "thread, thus reducing jitter." +#~ msgstr "" +#~ "Taille du cache de blocs de carte du générateur de maillage.\n" +#~ "Augmenter ceci augmente le % d'interception du cache et réduit la copie " +#~ "de données dans le fil principal, réduisant les tremblements." + #~ msgid "Smooth Lighting" #~ msgstr "Lissage de l'éclairage" #~ msgid "Smooths rotation of camera. 0 to disable." #~ msgstr "Lisse la rotation de la caméra. 0 pour désactiver." -#~ msgid "Sound" -#~ msgstr "Audio" - #~ msgid "Special" #~ msgstr "Spécial" @@ -8626,6 +8860,9 @@ 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" @@ -8680,6 +8917,9 @@ msgstr "Limite parallèle de cURL" #~ "Si définie à 0, MSAA est désactivé.\n" #~ "Un redémarrage est nécessaire après la modification de cette option." +#~ msgid "VBO" +#~ msgstr "VBO" + #~ msgid "Variation of hill height and lake depth on floatland smooth terrain." #~ msgstr "" #~ "Variation de la hauteur des collines et de la profondeur des lacs sur les " @@ -8787,8 +9027,14 @@ msgstr "Limite parallèle de cURL" #~ msgid "You died." #~ msgstr "Vous êtes mort." +#~ msgid "You have no games installed." +#~ msgstr "Vous n'avez pas de jeu installé." + #~ msgid "Z" #~ msgstr "Z" #~ msgid "needs_fallback_font" #~ msgstr "no" + +#~ msgid "ok" +#~ msgstr "ok" diff --git a/po/ga/minetest.po b/po/ga/minetest.po index 69737a270..95384a8c1 100644 --- a/po/ga/minetest.po +++ b/po/ga/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" "PO-Revision-Date: 2023-12-03 17:17+0000\n" "Last-Translator: Krock \n" "Language-Team: Irish ]" -msgstr "" - -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" +msgid "[all | ] [-t]" msgstr "" #: builtin/fstk/ui.lua @@ -109,6 +105,10 @@ msgstr "" msgid "Main menu" msgstr "" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Athcheangail" @@ -137,173 +137,180 @@ msgstr "" msgid "We support protocol versions between version $1 and $2." msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download \"$1\"" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." msgstr "$1 ag íoslódáil..." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "Ag íoslódáil..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "Cluichí" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +msgstr "Suiteáil" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp +msgid "Loading..." +msgstr "Ag lódáil..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Mods" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "" + +#: 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 "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "Cealaigh" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "Ag íoslódáil..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download \"$1\"" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "Cluichí" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "Suiteáil" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "Ag lódáil..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" msgstr "" #: builtin/mainmenu/content/pkgmgr.lua @@ -450,10 +457,20 @@ msgstr "Cruthaigh" msgid "Decorations" msgstr "Maisiúcháin" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." msgstr "" +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "Doinsiúin" @@ -816,10 +833,6 @@ msgstr "" msgid "Back" msgstr "" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -829,7 +842,8 @@ msgstr "" msgid "Clear" msgstr "" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "" @@ -1032,6 +1046,16 @@ msgstr "" msgid "Install games from ContentDB" msgstr "" +#: builtin/mainmenu/tab_local.lua +msgid "Minetest 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 " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "" @@ -1065,7 +1089,7 @@ msgid "Start Game" msgstr "" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." +msgid "You need to install a game before you can create a world." msgstr "" #: builtin/mainmenu/tab_online.lua @@ -1145,18 +1169,10 @@ msgstr "" msgid "Rebuilding shaders..." msgstr "" -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "" - #: src/client/clientlauncher.cpp msgid "Could not find or load game: " msgstr "" -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "" - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "" @@ -1181,24 +1197,20 @@ msgstr "" msgid "Provided world path doesn't exist: " msgstr "" -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +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 "- Address: " -msgstr "" - #: src/client/game.cpp msgid "- Mode: " msgstr "" -#: src/client/game.cpp -msgid "- Port: " -msgstr "" - #: src/client/game.cpp msgid "- Public: " msgstr "" @@ -1233,10 +1245,6 @@ msgstr "" msgid "Block bounds hidden" msgstr "" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "" @@ -1281,6 +1289,10 @@ msgstr "" msgid "Connecting to server..." msgstr "" +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "" @@ -1289,32 +1301,13 @@ msgstr "" msgid "Continue" msgstr "" -#: src/client/game.cpp -#, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" - #: src/client/game.cpp msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1394,6 +1387,10 @@ msgstr "" msgid "Fog enabled" msgstr "" +#: src/client/game.cpp +msgid "Fog enabled by game or mod" +msgstr "" + #: src/client/game.cpp msgid "Game info:" msgstr "" @@ -1414,10 +1411,6 @@ msgstr "" msgid "KiB/s" msgstr "" -#: src/client/game.cpp -msgid "Media..." -msgstr "" - #: src/client/game.cpp msgid "MiB/s" msgstr "" @@ -1573,10 +1566,6 @@ msgstr "" msgid "Zoom currently disabled by game or mod" msgstr "" -#: src/client/game.cpp -msgid "ok" -msgstr "togha" - #: src/client/gameui.cpp msgid "Chat currently disabled by game or mod" msgstr "" @@ -1898,6 +1887,15 @@ msgstr "" msgid "Minimap in texture mode" msgstr "" +#: src/client/shader.cpp +#, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2087,6 +2085,18 @@ msgstr "" msgid "press key" msgstr "" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Unable to open URL" +msgstr "" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "" @@ -2120,6 +2130,7 @@ msgstr "" #. 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 "ga" @@ -2305,12 +2316,6 @@ msgstr "" msgid "Adds particles when digging a node." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2333,6 +2338,10 @@ msgstr "" msgid "Advanced" msgstr "" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2386,6 +2395,17 @@ msgstr "" msgid "Apple trees noise" 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 "Arm inertia" msgstr "" @@ -2407,12 +2427,21 @@ msgid "" "clients.\n" "Small values potentially improve performance a lot, at the expense of " "visible\n" -"rendering glitches (some blocks will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +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 @@ -2476,6 +2505,10 @@ msgstr "Bithóim" msgid "Biome noise" msgstr "" +#: src/settings_translation_file.cpp +msgid "Block cull optimize distance" +msgstr "" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "" @@ -2688,6 +2721,12 @@ msgstr "" msgid "Colored shadows" 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -2819,10 +2858,6 @@ msgid "" "Also controls the object crosshair color" msgstr "" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "" @@ -2872,6 +2907,19 @@ msgid "" "but also uses more resources." 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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "" @@ -3056,6 +3104,10 @@ msgstr "" msgid "Enable Bloom Debug" msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable Debanding" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3075,6 +3127,10 @@ msgid "" "filtering." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable Post Processing" +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "" @@ -3117,6 +3173,10 @@ msgstr "" msgid "Enable mouse wheel (scroll) for item selection in hotbar." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable random mod loading (mainly used for testing)." +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3140,6 +3200,10 @@ msgid "" "expecting." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable touchscreen" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3148,12 +3212,6 @@ msgid "" "when connecting to the server." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3183,6 +3241,19 @@ msgstr "" msgid "Enables caching of facedir rotated meshes." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -3977,9 +4048,10 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" #: src/settings_translation_file.cpp @@ -4125,10 +4197,6 @@ msgid "" "Make fog and sky colors depend on daytime (dawn/sunset) and view direction." msgstr "" -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "" @@ -4177,7 +4245,9 @@ 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." +"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 @@ -4212,10 +4282,6 @@ msgstr "" msgid "Mapblock mesh generation threads" msgstr "" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "" @@ -4457,6 +4523,10 @@ msgstr "" msgid "Minimap scan height" msgstr "" +#: src/settings_translation_file.cpp +msgid "Minimum dig repetition interval" +msgstr "" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "" @@ -4525,6 +4595,11 @@ msgstr "" msgid "Mouse sensitivity multiplier." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Movement threshold" +msgstr "Tairseach ollphluaise" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "" @@ -4633,10 +4708,6 @@ msgstr "" msgid "Occlusion Culling" msgstr "" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -4649,6 +4720,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "OpenGL debug" +msgstr "" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "" @@ -4758,6 +4833,14 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "" +#: src/settings_translation_file.cpp +msgid "Protocol version minimum" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -4773,6 +4856,10 @@ msgstr "" msgid "Random input" msgstr "" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "" @@ -4960,8 +5047,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5079,7 +5166,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" @@ -5112,6 +5199,10 @@ msgid "" "Bright colors will bleed over the neighboring objects." 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 "Set to true to enable waving leaves." msgstr "" @@ -5151,8 +5242,7 @@ msgstr "" msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" #: src/settings_translation_file.cpp @@ -5222,13 +5312,6 @@ msgid "" "recommended." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "" @@ -5264,7 +5347,7 @@ 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 Change Keys." +"cinematic mode by using the key set in Controls." msgstr "" #: src/settings_translation_file.cpp @@ -5285,6 +5368,14 @@ msgstr "" msgid "Soft shadow radius" 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 "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -5441,17 +5532,37 @@ msgid "" "when calling `/profiler save [format]` without format." 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 "" "The file path relative to your world path in which profiles will be saved to." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "" #: src/settings_translation_file.cpp -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" #: src/settings_translation_file.cpp @@ -5462,6 +5573,12 @@ msgid "" "Default is 1.0 (1/2 node)." 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 "The network interface that the server listens on." msgstr "" @@ -5488,7 +5605,7 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" #: src/settings_translation_file.cpp @@ -5545,6 +5662,10 @@ msgstr "" msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "" +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -5592,12 +5713,11 @@ msgid "Touchscreen sensitivity multiplier." msgstr "" #: src/settings_translation_file.cpp -#, fuzzy -msgid "Touchscreen threshold" -msgstr "Tairseach ollphluaise" +msgid "Tradeoffs for performance" +msgstr "" #: src/settings_translation_file.cpp -msgid "Tradeoffs for performance" +msgid "Translucent liquids" msgstr "" #: src/settings_translation_file.cpp @@ -5635,7 +5755,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 "" #: src/settings_translation_file.cpp @@ -5733,10 +5855,6 @@ msgstr "" msgid "User Interfaces" msgstr "" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "" @@ -5823,12 +5941,24 @@ msgstr "" msgid "Volume" msgstr "" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +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 "Volumetric lighting" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6071,3 +6201,10 @@ msgstr "" #~ msgid "Information:" #~ msgstr "Eolas:" + +#, fuzzy +#~ msgid "Touchscreen threshold" +#~ msgstr "Tairseach ollphluaise" + +#~ msgid "ok" +#~ msgstr "togha" diff --git a/po/gd/minetest.po b/po/gd/minetest.po index 6a8173f41..946443d6e 100644 --- a/po/gd/minetest.po +++ b/po/gd/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" "PO-Revision-Date: 2023-08-17 10:48+0000\n" "Last-Translator: Eoghan Murray \n" "Language-Team: Gaelic ]" -msgstr "" - -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" +msgid "[all | ] [-t]" msgstr "" #: builtin/fstk/ui.lua @@ -105,6 +101,10 @@ msgstr "" msgid "Main menu" msgstr "Prìomh chlàr-taice" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "" @@ -136,175 +136,182 @@ msgstr "" msgid "We support protocol versions between version $1 and $2." msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download \"$1\"" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "" +"Stàladh: Faidhle dhen t-seòrsa “$1” ris nach eil taic no tasglann bhriste" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +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 "Mods" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "" + +#: 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 "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download \"$1\"" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "" -"Stàladh: Faidhle dhen t-seòrsa “$1” ris nach eil taic no tasglann bhriste" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" msgstr "" #: builtin/mainmenu/content/pkgmgr.lua @@ -451,10 +458,20 @@ msgstr "" msgid "Decorations" msgstr "" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." msgstr "" +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "" @@ -819,10 +836,6 @@ msgstr "" msgid "Back" msgstr "Backspace" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -832,7 +845,8 @@ msgstr "" msgid "Clear" msgstr "" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "" @@ -1036,6 +1050,16 @@ msgstr "Pacaidean air an stàladh:" msgid "Install games from ContentDB" msgstr "Stàlaich geamannan o ContentDB" +#: builtin/mainmenu/tab_local.lua +msgid "Minetest 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 " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "" @@ -1069,7 +1093,7 @@ msgid "Start Game" msgstr "" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." +msgid "You need to install a game before you can create a world." msgstr "" #: builtin/mainmenu/tab_online.lua @@ -1152,18 +1176,10 @@ msgstr "" msgid "Rebuilding shaders..." msgstr "" -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "" - #: src/client/clientlauncher.cpp msgid "Could not find or load game: " msgstr "" -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "" - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "" @@ -1190,27 +1206,21 @@ msgstr " " msgid "Provided world path doesn't exist: " msgstr " " -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "" + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp msgid "" "\n" "Check debug.txt for details." msgstr "" -#: src/client/game.cpp -#, fuzzy -msgid "- Address: " -msgstr " " - #: src/client/game.cpp #, fuzzy msgid "- Mode: " msgstr " " -#: src/client/game.cpp -#, fuzzy -msgid "- Port: " -msgstr " " - #: src/client/game.cpp #, fuzzy msgid "- Public: " @@ -1248,10 +1258,6 @@ msgstr "" msgid "Block bounds hidden" msgstr "" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "" @@ -1296,6 +1302,10 @@ msgstr "" msgid "Connecting to server..." msgstr "" +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "" @@ -1304,46 +1314,13 @@ msgstr "" msgid "Continue" msgstr "" -#: src/client/game.cpp -#, fuzzy, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" -"Stiùireadh:\n" -"- %s: gluais an comhair a’ bheòil\n" -"- %s: gluais an comhair a’ chùil\n" -"- %s: gluais dhan taobh clì\n" -"- %s: gluais dhan taobh deas\n" -"- %s: leum/sreap\n" -"- %s: tàislich/dìrich\n" -"- %s: leig às nì\n" -"- %s: an tasgadh\n" -"- Luchag: tionndaidh/coimhead\n" -"- Putan clì na luchaige: geàrr/buail\n" -"- Putan deas na luchaige: cuir ann/cleachd\n" -"- Cuibhle na luchaige: tagh nì\n" -"- %s: cabadaich\n" - #: src/client/game.cpp msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1423,6 +1400,10 @@ msgstr "" msgid "Fog enabled" msgstr "" +#: src/client/game.cpp +msgid "Fog enabled by game or mod" +msgstr "" + #: src/client/game.cpp msgid "Game info:" msgstr "Fiosrachadh mun gheama:" @@ -1443,10 +1424,6 @@ msgstr "" msgid "KiB/s" msgstr "" -#: src/client/game.cpp -msgid "Media..." -msgstr "" - #: src/client/game.cpp msgid "MiB/s" msgstr "" @@ -1603,10 +1580,6 @@ msgstr "" msgid "Zoom currently disabled by game or mod" msgstr "" -#: src/client/game.cpp -msgid "ok" -msgstr "" - #: src/client/gameui.cpp msgid "Chat currently disabled by game or mod" msgstr "" @@ -1930,6 +1903,15 @@ msgstr "" msgid "Minimap in texture mode" msgstr "" +#: src/client/shader.cpp +#, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2120,6 +2102,18 @@ msgstr "" msgid "press key" msgstr "brùth air iuchair" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Unable to open URL" +msgstr "" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "" @@ -2153,6 +2147,7 @@ msgstr " " #. 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 "gd" @@ -2346,12 +2341,6 @@ msgstr "" msgid "Adds particles when digging a node." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2374,6 +2363,10 @@ msgstr "" msgid "Advanced" msgstr "" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2433,6 +2426,17 @@ msgstr "" msgid "Apple trees noise" 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 "Arm inertia" msgstr "" @@ -2454,12 +2458,21 @@ msgid "" "clients.\n" "Small values potentially improve performance a lot, at the expense of " "visible\n" -"rendering glitches (some blocks will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +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 @@ -2522,6 +2535,10 @@ msgstr "" msgid "Biome noise" msgstr "" +#: src/settings_translation_file.cpp +msgid "Block cull optimize distance" +msgstr "" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "" @@ -2740,6 +2757,12 @@ msgstr "" msgid "Colored shadows" 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -2872,10 +2895,6 @@ msgid "" "Also controls the object crosshair color" msgstr "" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "" @@ -2925,6 +2944,19 @@ msgid "" "but also uses more resources." 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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "" @@ -3111,6 +3143,10 @@ msgstr "" msgid "Enable Bloom Debug" msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable Debanding" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3130,6 +3166,10 @@ msgid "" "filtering." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable Post Processing" +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "" @@ -3172,6 +3212,10 @@ msgstr "" msgid "Enable mouse wheel (scroll) for item selection in hotbar." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable random mod loading (mainly used for testing)." +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3195,6 +3239,10 @@ msgid "" "expecting." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable touchscreen" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3203,12 +3251,6 @@ msgid "" "when connecting to the server." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3238,6 +3280,19 @@ msgstr "" msgid "Enables caching of facedir rotated meshes." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -4071,9 +4126,10 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" #: src/settings_translation_file.cpp @@ -4232,10 +4288,6 @@ msgid "" "Make fog and sky colors depend on daytime (dawn/sunset) and view direction." msgstr "" -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "Dèan gach lionn trìd-dhoilleir" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "" @@ -4292,11 +4344,14 @@ msgid "Map generation attributes specific to Mapgen v5." msgstr "Buadhan gintinn mapa a tha sònraichte do ghineadair nam mapa 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" "When the 'snowbiomes' flag is enabled jungles are automatically enabled and\n" -"the 'jungles' flag is ignored." +"the 'jungles' flag is ignored.\n" +"The 'temples' flag disables generation of desert temples. Normal dungeons " +"will appear instead." msgstr "" "Buadhan gintinn mapa a tha sònraichte do ghineadair nam mapa v6.\n" "Cuiridh a’ bhratach “snowbiomes” siostam 5 ùr nam bitheom an comas.\n" @@ -4341,10 +4396,6 @@ msgstr "" msgid "Mapblock mesh generation threads" msgstr "Cuingeachadh gintinn mapa" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "" @@ -4592,6 +4643,10 @@ msgstr "An ìre as lugha dhen loga a thèid a sgrìobhadh dhan chabadaich." msgid "Minimap scan height" msgstr "" +#: src/settings_translation_file.cpp +msgid "Minimum dig repetition interval" +msgstr "" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "" @@ -4662,6 +4717,10 @@ msgstr "" msgid "Mouse sensitivity multiplier." msgstr "" +#: src/settings_translation_file.cpp +msgid "Movement threshold" +msgstr "" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "" @@ -4775,10 +4834,6 @@ msgstr "" msgid "Occlusion Culling" msgstr "" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -4793,6 +4848,11 @@ msgstr "" "Fosgail clàr-taice a’ chuir ’na stad nuair a chailleas an uinneag am fòcas.\n" "Cha dèid a chur ’na stad nuair a bhios formspec fosgailte." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "OpenGL debug" +msgstr "Dì-bhugachadh gineadair nam mapa" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "" @@ -4902,6 +4962,15 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Protocol version minimum" +msgstr " " + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -4919,6 +4988,10 @@ msgstr "" msgid "Random input" msgstr "" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "" @@ -5108,8 +5181,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5229,7 +5302,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" @@ -5262,6 +5335,10 @@ msgid "" "Bright colors will bleed over the neighboring objects." 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 "Set to true to enable waving leaves." msgstr "" @@ -5301,8 +5378,7 @@ msgstr "" msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" #: src/settings_translation_file.cpp @@ -5380,13 +5456,6 @@ msgstr "" "mholamaid\n" "nach atharraich thu e." -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "" @@ -5422,7 +5491,7 @@ 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 Change Keys." +"cinematic mode by using the key set in Controls." msgstr "" #: src/settings_translation_file.cpp @@ -5443,6 +5512,14 @@ msgstr "Luaths an tàisleachaidh ann an nòd gach diog." msgid "Soft shadow radius" 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 "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -5615,17 +5692,37 @@ msgid "" "when calling `/profiler save [format]` without format." 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 "" "The file path relative to your world path in which profiles will be saved to." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "" #: src/settings_translation_file.cpp -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" #: src/settings_translation_file.cpp @@ -5636,6 +5733,12 @@ msgid "" "Default is 1.0 (1/2 node)." 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 "The network interface that the server listens on." msgstr "" @@ -5665,7 +5768,7 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" #: src/settings_translation_file.cpp @@ -5722,6 +5825,10 @@ msgstr "" msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "" +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -5769,11 +5876,11 @@ msgid "Touchscreen sensitivity multiplier." msgstr "" #: src/settings_translation_file.cpp -msgid "Touchscreen threshold" +msgid "Tradeoffs for performance" msgstr "" #: src/settings_translation_file.cpp -msgid "Tradeoffs for performance" +msgid "Translucent liquids" msgstr "" #: src/settings_translation_file.cpp @@ -5815,7 +5922,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 "" #: src/settings_translation_file.cpp @@ -5913,10 +6022,6 @@ msgstr "" msgid "User Interfaces" msgstr "" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "" @@ -6003,12 +6108,24 @@ msgstr "" msgid "Volume" msgstr "" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +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 "Volumetric lighting" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6256,6 +6373,10 @@ msgstr "" msgid "cURL parallel limit" msgstr "" +#, fuzzy +#~ msgid "- Address: " +#~ msgstr " " + #, fuzzy #~ msgid "- Creative Mode: " #~ msgstr " " @@ -6263,6 +6384,10 @@ msgstr "" #~ msgid "- Damage: " #~ msgstr "– Dochann: " +#, fuzzy +#~ msgid "- Port: " +#~ msgstr " " + #~ msgid "Address / Port" #~ msgstr "Seòladh / Port" @@ -6270,6 +6395,38 @@ msgstr "" #~ msgid "Change keys" #~ msgstr "Iuchair an sgiathaidh" +#, fuzzy, c-format +#~ msgid "" +#~ "Controls:\n" +#~ "- %s: move forwards\n" +#~ "- %s: move backwards\n" +#~ "- %s: move left\n" +#~ "- %s: move right\n" +#~ "- %s: jump/climb up\n" +#~ "- %s: dig/punch/use\n" +#~ "- %s: place/use\n" +#~ "- %s: sneak/climb down\n" +#~ "- %s: drop item\n" +#~ "- %s: inventory\n" +#~ "- Mouse: turn/look\n" +#~ "- Mouse wheel: select item\n" +#~ "- %s: chat\n" +#~ msgstr "" +#~ "Stiùireadh:\n" +#~ "- %s: gluais an comhair a’ bheòil\n" +#~ "- %s: gluais an comhair a’ chùil\n" +#~ "- %s: gluais dhan taobh clì\n" +#~ "- %s: gluais dhan taobh deas\n" +#~ "- %s: leum/sreap\n" +#~ "- %s: tàislich/dìrich\n" +#~ "- %s: leig às nì\n" +#~ "- %s: an tasgadh\n" +#~ "- Luchag: tionndaidh/coimhead\n" +#~ "- Putan clì na luchaige: geàrr/buail\n" +#~ "- Putan deas na luchaige: cuir ann/cleachd\n" +#~ "- Cuibhle na luchaige: tagh nì\n" +#~ "- %s: cabadaich\n" + #~ msgid "Debug info toggle key" #~ msgstr "Iuchair toglachadh an fhiosrachaidh dì-bhugachaidh" @@ -6792,6 +6949,9 @@ msgstr "" #~ "Faic http://irrlicht.sourceforge.net/docu/namespaceirr." #~ "html#a54da2a0e231901735e3da1b0edf72eb3" +#~ msgid "Makes all liquids opaque" +#~ msgstr "Dèan gach lionn trìd-dhoilleir" + #~ msgid "Noclip" #~ msgstr "Gun bhearradh" diff --git a/po/gl/minetest.po b/po/gl/minetest.po index 06a171108..2f28367e4 100644 --- a/po/gl/minetest.po +++ b/po/gl/minetest.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" -"PO-Revision-Date: 2022-11-21 05:47+0000\n" -"Last-Translator: runs \n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" +"PO-Revision-Date: 2024-07-20 23:09+0000\n" +"Last-Translator: ninjum \n" "Language-Team: Galician \n" "Language: gl\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-dev\n" +"X-Generator: Weblate 5.7-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -71,8 +71,8 @@ msgid "Command not available: " msgstr "Comando non dispoñible: " #: builtin/common/chatcommands.lua -msgid "Get help for commands" -msgstr "Obter axuda para os comandos" +msgid "Get help for commands (-t: output in chat)" +msgstr "Obteña axuda para os comandos (-t: saída no chat)" #: builtin/common/chatcommands.lua msgid "" @@ -82,12 +82,8 @@ msgstr "" "lista completa." #: builtin/common/chatcommands.lua -msgid "[all | ]" -msgstr "[all | ]" - -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" -msgstr "Aceptar" +msgid "[all | ] [-t]" +msgstr "[todo | ] [-t]" #: builtin/fstk/ui.lua msgid "" @@ -105,6 +101,10 @@ msgstr "Produciuse un erro:" msgid "Main menu" msgstr "Menú principal" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "Aceptar" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Volver conectar" @@ -133,19 +133,27 @@ msgstr "Só admítese a versión de protocolo $1." msgid "We support protocol versions between version $1 and $2." msgstr "Só admítense as versións de protocolo entre $1 e $2." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "\"$1\" xa existe. Desexa substituílo?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" +msgstr "Erro ao instalar \"$1\": $2" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." -msgstr "Instalaranse as dependencias $1 e $2." +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download \"$1\"" +msgstr "Erro ao descargar \"$1\"" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" -msgstr "$1 por $2" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr "Erro ao descargar $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "" +"Non se puido extraer '$1' (espazo en disco insuficiente, tipo de arquivo non " +"compatible ou arquivo danado)" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" @@ -153,159 +161,157 @@ msgstr "" "$1 descargando,\n" "$2 en cola" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." msgstr "Descargando $1..." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "Non se puido atopar as dependencias requeridas para $1 ." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "Instalarase $1 e omitiranse as dependencias de $2." - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" -msgstr "Todos os paq." +msgstr "Todos os paquetes" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "Xa está instalado" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "Volver ao menú principal" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "ContentDB non está dispoñible cando Minetest compilouse sen cURL" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "Descargando..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "Produciuse un erro ao obter dependencias para o paquete" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "Xogos" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +msgstr "Instalar" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp +msgid "Loading..." +msgstr "Cargando..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Mods" +msgstr "Mods" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "Non se puido recuperar ningún paquete" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "Non hai resultados" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "Sen actualizacións" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "En cola" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "Paquetes de texturas" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "Non se atopou o paquete $1." + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "Desinstalar" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "Actualizar" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "Actualizar Todo [$1]" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "View more information in a web browser" +msgstr "Ver máis información nun navegador web" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "You need to install a game before you can install a mod" +msgstr "Precisas instalar un xogo antes de poder instalar un mod" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 and $2 dependencies will be installed." +msgstr "Instalaranse as dependencias $1 e $2." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "$1 por $2" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "Non se puido atopar as dependencias requeridas para $1 ." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "Instalarase $1 e omitiranse as dependencias de $2." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "Xa está instalado" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "Xogo base:" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "Cancelar" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "ContentDB non está dispoñible cando Minetest compilouse sen cURL" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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_contentstore.lua -msgid "Downloading..." -msgstr "Descargando..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to download \"$1\"" -msgstr "Erro ao descargar $1" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "Erro ao descargar $1" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "" -"Instalación: Formato de ficheiro \"$1\" non compatible ou ficheiro corrupto" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "Xogos" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "Instalar" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "Instalar $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "Instalar dependencias faltantes" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "Cargando..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "Mods" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "Non se puido recuperar ningún paquete" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "Non hai resultados" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "Sen actualizacións" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "Non atopado" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "Sobrescribir" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "Verifica que o xogo base esté correcto." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" -msgstr "En cola" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" +msgstr "\"$1\" xa existe. Desexa substituílo?" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "Paq. de text." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "Desinstalar" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "Actualizar" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "Actualizar Todo [$1]" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "Ver máis información nun navegador web" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" -msgstr "" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" +msgstr "Sobrescribir" #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" @@ -320,21 +326,16 @@ msgid "Failed to install $1 to $2" msgstr "Error ao instalar $1 en $2" #: builtin/mainmenu/content/pkgmgr.lua -#, fuzzy msgid "Install: Unable to find suitable folder name for $1" -msgstr "" -"Instalación do mod: Non se puido atopar un nome de cartafol adecuado para o " -"paquete de mods $1" +msgstr "Instalación: Non se puido atopar un nome de carpeta adecuado para $1" #: builtin/mainmenu/content/pkgmgr.lua -#, fuzzy msgid "Unable to find a valid mod, modpack, or game" -msgstr "Non se puido atopar un mod ou paquete de mods válido" +msgstr "Non se puido atopar un mod, paquete de mods ou xogo válido" #: builtin/mainmenu/content/pkgmgr.lua -#, fuzzy msgid "Unable to install a $1 as a $2" -msgstr "Non se puido instalar un mod como $1" +msgstr "Non se puido instalar un $1 como un $2" #: builtin/mainmenu/content/pkgmgr.lua msgid "Unable to install a $1 as a texture pack" @@ -346,7 +347,7 @@ msgstr "(Activado, ten erro)" #: builtin/mainmenu/dlg_config_world.lua msgid "(Unsatisfied)" -msgstr "(Unsatisfeito)" +msgstr "(Insatisfeito)" #: builtin/mainmenu/dlg_config_world.lua msgid "Disable all" @@ -458,10 +459,22 @@ msgstr "Crear" msgid "Decorations" msgstr "Decoracións" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "Templos do deserto" + #: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." msgstr "Aviso: O Test de Desenvolvemento está destinado aos desenvolvedores." +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" +"Variante de calabozo diferente xerada en biomas do deserto (só se os alxubes " +"están habilitados)" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "Calabozos" @@ -649,7 +662,7 @@ msgstr "Contrasinal" #: builtin/mainmenu/dlg_register.lua msgid "Passwords do not match" -msgstr "Os contrasinais non coinciden!" +msgstr "Os contrasinais non coinciden" #: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua msgid "Register" @@ -657,7 +670,7 @@ msgstr "Rexistrarse" #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "Dismiss" -msgstr "" +msgstr "Descartar" #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "" @@ -665,21 +678,25 @@ msgid "" "\"Minetest Game\". Since Minetest 5.8.0, Minetest 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." #: 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 "" +"Se queres seguir xogando nos teus mundos de Minetest, precisarás reinstalar " +"Minetest Game." #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "Minetest Game is no longer installed by default" -msgstr "" +msgstr "Minetest Game xa non se instala por defecto" #: builtin/mainmenu/dlg_reinstall_mtg.lua -#, fuzzy msgid "Reinstall Minetest Game" -msgstr "Instalar outro xogo" +msgstr "Reinstalar Minetest Game" #: builtin/mainmenu/dlg_rename_modpack.lua msgid "Accept" @@ -708,6 +725,10 @@ msgid "" "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" +"Nova versión: $2\n" +"Visita $3 para saber como obter a versión máis recente e estar ao día cas " +"características e correccións de erros." #: builtin/mainmenu/dlg_version_info.lua msgid "Later" @@ -752,9 +773,8 @@ msgid "Select file" msgstr "Seleccionar ficheiro" #: builtin/mainmenu/settings/components.lua -#, fuzzy msgid "Set" -msgstr "Seleccionar" +msgstr "Establecer" #: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua msgid "(No description of setting given)" @@ -823,20 +843,15 @@ msgstr "Suavizado" #: builtin/mainmenu/settings/dlg_settings.lua msgid "(Use system language)" -msgstr "" +msgstr "(Usar a linguaxe do sistema)" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Accessibility" -msgstr "" +msgstr "Accesibilidade" #: builtin/mainmenu/settings/dlg_settings.lua -#, fuzzy msgid "Back" -msgstr "Atrás" - -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "Configurar teclas" +msgstr "Voltar" #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp @@ -847,7 +862,8 @@ msgstr "Chat" msgid "Clear" msgstr "Limpar" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "Controis" @@ -856,18 +872,16 @@ msgid "General" msgstr "Xeral" #: builtin/mainmenu/settings/dlg_settings.lua -#, fuzzy msgid "Movement" -msgstr "Movemento rápido" +msgstr "Movemento" #: builtin/mainmenu/settings/dlg_settings.lua -#, fuzzy msgid "Reset setting to default" -msgstr "Restaurar" +msgstr "Restablecer a configuración predeterminada" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Reset setting to default ($1)" -msgstr "" +msgstr "Restablecer a configuración predeterminada ($1)" #: builtin/mainmenu/settings/dlg_settings.lua builtin/mainmenu/tab_online.lua msgid "Search" @@ -875,7 +889,7 @@ msgstr "Procurar" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Show advanced settings" -msgstr "" +msgstr "Amosar configuracións avanzadas" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Show technical names" @@ -895,11 +909,11 @@ msgstr "Contido: Mods" #: builtin/mainmenu/settings/shadows_component.lua msgid "(The game will need to enable shadows as well)" -msgstr "" +msgstr "(O xogo tamén precisará activar as sombras)" #: builtin/mainmenu/settings/shadows_component.lua msgid "Custom" -msgstr "" +msgstr "Personalizado" #: builtin/mainmenu/settings/shadows_component.lua msgid "Disabled" @@ -948,11 +962,11 @@ msgstr "Desenvolvedores principais" #: builtin/mainmenu/tab_about.lua msgid "Core Team" -msgstr "" +msgstr "Equipo Central" #: builtin/mainmenu/tab_about.lua msgid "Irrlicht device:" -msgstr "" +msgstr "Dispositivo Irrlicht:" #: builtin/mainmenu/tab_about.lua msgid "Open User Data Directory" @@ -983,18 +997,16 @@ msgid "Browse online content" msgstr "Explorar contido en liña" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Browse online content [$1]" -msgstr "Explorar contido en liña" +msgstr "Navegar polo contido en liña [$1]" #: builtin/mainmenu/tab_content.lua msgid "Content" msgstr "Contido" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Content [$1]" -msgstr "Contido" +msgstr "Contido [$1]" #: builtin/mainmenu/tab_content.lua msgid "Disable Texture Pack" @@ -1017,9 +1029,8 @@ msgid "Rename" msgstr "Renomear" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Update available?" -msgstr "" +msgstr "¿Actualización dispoñible?" #: builtin/mainmenu/tab_content.lua msgid "Use Texture Pack" @@ -1035,7 +1046,7 @@ msgstr "Ligazón de enderezo" #: builtin/mainmenu/tab_local.lua msgid "Creative Mode" -msgstr "Modo creativo" +msgstr "Modo Creativo" #: builtin/mainmenu/tab_local.lua msgid "Enable Damage" @@ -1057,6 +1068,18 @@ msgstr "Instalar un xogo" msgid "Install games from ContentDB" msgstr "Instalar xogos do ContentDB" +#: builtin/mainmenu/tab_local.lua +msgid "Minetest doesn't come with a game by default." +msgstr "Minetest non trae un xogo por defecto." + +#: builtin/mainmenu/tab_local.lua +msgid "" +"Minetest 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." + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "Novo" @@ -1090,8 +1113,8 @@ msgid "Start Game" msgstr "Xogar só" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." -msgstr "Non tes xogos instalados." +msgid "You need to install a game before you can create a world." +msgstr "Tes que instalar un xogo antes de poder crear un mundo." #: builtin/mainmenu/tab_online.lua msgid "Address" @@ -1170,18 +1193,10 @@ msgstr "Cargando texturas..." msgid "Rebuilding shaders..." msgstr "Reconstruíndo sombreadores..." -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "Erro de conexión (tempo esgotado?)" - #: src/client/clientlauncher.cpp msgid "Could not find or load game: " msgstr "Non se puido atopar ou cargar o xogo: " -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "Especificación do xogo non válida." - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "Menú principal" @@ -1206,7 +1221,11 @@ msgstr "O ficheiro do contrasinal fornecido non se puido abrir: " msgid "Provided world path doesn't exist: " msgstr "O camiño do mundo fornecido non existe: " -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "Multimedia..." + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp msgid "" "\n" "Check debug.txt for details." @@ -1214,18 +1233,10 @@ msgstr "" "\n" "Verifique debug.txt para obter detalles." -#: src/client/game.cpp -msgid "- Address: " -msgstr "- Enderezo: " - #: src/client/game.cpp msgid "- Mode: " msgstr "- Modo: " -#: src/client/game.cpp -msgid "- Port: " -msgstr "- Porto: " - #: src/client/game.cpp msgid "- Public: " msgstr "- Público: " @@ -1233,7 +1244,7 @@ msgstr "- Público: " #. ~ PvP = Player versus Player #: src/client/game.cpp msgid "- PvP: " -msgstr "- PvP: " +msgstr "- Xogador contra xogador: " #: src/client/game.cpp msgid "- Server Name: " @@ -1260,10 +1271,6 @@ msgstr "Avance automático activado" msgid "Block bounds hidden" msgstr "Lím. bloques ocultos" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "Límites de bloque mostrados para todos os bloques" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "Límites de bloques mostrados para o bloque actual" @@ -1281,10 +1288,9 @@ msgid "Camera update enabled" msgstr "Actualización da cámara activada" #: src/client/game.cpp -#, fuzzy msgid "Can't show block bounds (disabled by game or mod)" msgstr "" -"Non se puido mostrar os límites de bloco (é preciso o permiso 'basic_debug')" +"Non se poden amosar os límites dos bloques (desactivado polo xogo ou mod)" #: src/client/game.cpp msgid "Change Password" @@ -1310,6 +1316,10 @@ msgstr "O scripting de cliente está desactivado" msgid "Connecting to server..." msgstr "Conectando ao servidor..." +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "Erro de conexión (tempo esgotado?)" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "Erro na conexión por un motivo descoñecido" @@ -1319,46 +1329,12 @@ msgid "Continue" msgstr "Continuar" #: src/client/game.cpp -#, fuzzy, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" -"Controis:\n" -"- %s: ir cara adiante\n" -"- %s: ir cara atrás\n" -"- %s: ir cara esquerda\n" -"- %s: ir cara dereita\n" -"- %s: saltar/escalar\n" -"- %s: romper bloque/golpear\n" -"- %s: colocar/usar\n" -"- %s: agacharse/abaxaise\n" -"- %s: soltar obxecto\n" -"- %s: inventario\n" -"- Rato: virarse/ver\n" -"- Roda do rato: seleccionar obxecto\n" -"- %s: chat\n" - -#: src/client/game.cpp -#, fuzzy msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1367,18 +1343,18 @@ msgid "" "- touch&drag, tap 2nd finger\n" " --> place single item to slot\n" msgstr "" -"Controis por defecto:\n" -"Menú oculto:\n" -"- Un clic: activa botón\n" -"- Dobre clic: colocar/usar\n" -"- Deslizar dedo: mirar arredor\n" -"Menú/inventario visible:\n" -"- Dobre clic: (fóra do menú/inventario):\n" -" -->pechar\n" -"- Clic no obxecto e logo clic nun compartimento:\n" -" --> mover obxecto\n" -"- Clic e arrastar, e logo clic con os dous dedos\n" -" --> colocar un só obxecto\n" +"Controis:\n" +"Sen menú aberto:\n" +"- deslizar o dedo: mirar arredor\n" +"- toque: colocar/perforar/utilizar (predeterminado)\n" +"- Toque longo: cavar/utilizar (predeterminado)\n" +"Menú/inventario aberto:\n" +"- Dobre toque (exterior):\n" +" --> pechar\n" +"- 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" #: src/client/game.cpp #, c-format @@ -1451,6 +1427,10 @@ msgstr "Néboa desactivada" msgid "Fog enabled" msgstr "Néboa activada" +#: src/client/game.cpp +msgid "Fog enabled by game or mod" +msgstr "Néboa habilitada polo xogo ou mod" + #: src/client/game.cpp msgid "Game info:" msgstr "Información do xogo:" @@ -1471,10 +1451,6 @@ msgstr "Definicións dos obxectos..." msgid "KiB/s" msgstr "KiB/s" -#: src/client/game.cpp -msgid "Media..." -msgstr "Multimedia..." - #: src/client/game.cpp msgid "MiB/s" msgstr "MiB/s" @@ -1485,7 +1461,7 @@ msgstr "O minimapa está actualmente desactivado polo xogo ou mod" #: src/client/game.cpp msgid "Multiplayer" -msgstr "Xogar en liña" +msgstr "Multixogador" #: src/client/game.cpp msgid "Noclip mode disabled" @@ -1575,28 +1551,27 @@ msgid "Unable to listen on %s because IPv6 is disabled" msgstr "Non se puido escoitar %s porque o IPv6 está desactivado" #: src/client/game.cpp -#, fuzzy msgid "Unlimited viewing range disabled" -msgstr "Campo de visión ilimitada activado" +msgstr "Desactivado o rango de visión ilimitado" #: src/client/game.cpp -#, fuzzy msgid "Unlimited viewing range enabled" -msgstr "Campo de visión ilimitada activado" +msgstr "Rango de visualización ilimitado activado" #: src/client/game.cpp msgid "Unlimited viewing range enabled, but forbidden by game or mod" -msgstr "" +msgstr "Alcance de visión ilimitado activado, pero prohibido polo xogo ou mod" #: src/client/game.cpp -#, fuzzy, c-format +#, c-format msgid "Viewing changed to %d (the minimum)" -msgstr "O campo de visión está ao mínimo: %d" +msgstr "Visualización cambiada a %d (o mínimo)" #: src/client/game.cpp #, c-format msgid "Viewing changed to %d (the minimum), but limited to %d by game or mod" msgstr "" +"A visualización cambiou a %d (o mínimo), pero limitada a %d polo xogo ou mod" #: src/client/game.cpp #, c-format @@ -1604,20 +1579,23 @@ msgid "Viewing range changed to %d" msgstr "Campo de visión cambiada a %d" #: src/client/game.cpp -#, fuzzy, c-format +#, c-format msgid "Viewing range changed to %d (the maximum)" -msgstr "Campo de visión cambiada a %d" +msgstr "O rango de visualización cambiouse a %d (o máximo)" #: src/client/game.cpp #, c-format msgid "" "Viewing range changed to %d (the maximum), but limited to %d by game or mod" msgstr "" +"O alcance de visión cambiou a %d (o máximo), pero está limitado a %d polo " +"xogo ou mod" #: src/client/game.cpp -#, fuzzy, c-format +#, c-format msgid "Viewing range changed to %d, but limited to %d by game or mod" -msgstr "Campo de visión cambiada a %d" +msgstr "" +"O rango de visión cambiouse a %d, pero está limitado a %d polo xogo ou mod" #: src/client/game.cpp #, c-format @@ -1632,14 +1610,9 @@ msgstr "Estrutura de arames mostrada" msgid "Zoom currently disabled by game or mod" msgstr "O zoom está actualmente desactivado polo xogo ou mod" -#: src/client/game.cpp -msgid "ok" -msgstr "ok" - #: src/client/gameui.cpp -#, fuzzy msgid "Chat currently disabled by game or mod" -msgstr "O zoom está actualmente desactivado polo xogo ou mod" +msgstr "Chat actualmente desactivado polo xogo ou mod" #: src/client/gameui.cpp msgid "Chat hidden" @@ -1668,7 +1641,7 @@ msgstr "Análise do mundo visible (páx. %d de %d)" #: src/client/keycode.cpp msgid "Apps" -msgstr "Aplicaciones" +msgstr "Aplicacións" #: src/client/keycode.cpp msgid "Backspace" @@ -1676,32 +1649,28 @@ msgstr "Retroceso" #. ~ Usually paired with the Pause key #: src/client/keycode.cpp -#, fuzzy msgid "Break Key" -msgstr "Tecla para agacharse" +msgstr "Tecla de interrupción" #: src/client/keycode.cpp msgid "Caps Lock" msgstr "Bloq Maiús" #: src/client/keycode.cpp -#, fuzzy msgid "Clear Key" -msgstr "Limpar" +msgstr "Tecla de Borrar" #: src/client/keycode.cpp -#, fuzzy msgid "Control Key" -msgstr "Control" +msgstr "Tecla de control" #: src/client/keycode.cpp -#, fuzzy msgid "Delete Key" -msgstr "Eliminar" +msgstr "Tecla de eliminar" #: src/client/keycode.cpp msgid "Down Arrow" -msgstr "" +msgstr "Frecha abaixo" #: src/client/keycode.cpp msgid "End" @@ -1748,9 +1717,8 @@ msgid "Insert" msgstr "Inserir" #: src/client/keycode.cpp -#, fuzzy msgid "Left Arrow" -msgstr "Ctrl esq." +msgstr "Frecha esquerda" #: src/client/keycode.cpp msgid "Left Button" @@ -1758,7 +1726,7 @@ msgstr "Botón esquerdo" #: src/client/keycode.cpp msgid "Left Control" -msgstr "Ctrl esq." +msgstr "Control Esquerdo" #: src/client/keycode.cpp msgid "Left Menu" @@ -1766,17 +1734,16 @@ msgstr "Menú esquerdo" #: src/client/keycode.cpp msgid "Left Shift" -msgstr "Shift esq." +msgstr "Shift esquerdo" #: src/client/keycode.cpp msgid "Left Windows" -msgstr "Win. esq." +msgstr "Win. esqueda" #. ~ Key name, common on Windows keyboards #: src/client/keycode.cpp -#, fuzzy msgid "Menu Key" -msgstr "Menú" +msgstr "Tecla do menú" #: src/client/keycode.cpp msgid "Middle Button" @@ -1784,7 +1751,7 @@ msgstr "Botón central" #: src/client/keycode.cpp msgid "Num Lock" -msgstr "Bloq. núm." +msgstr "Bloq. Núm" #: src/client/keycode.cpp msgid "Numpad *" @@ -1851,20 +1818,17 @@ msgid "OEM Clear" msgstr "Limpar OEM" #: src/client/keycode.cpp -#, fuzzy msgid "Page Down" -msgstr "Avance páx." +msgstr "Páxina abaixo" #: src/client/keycode.cpp -#, fuzzy msgid "Page Up" -msgstr "Retroceso pax." +msgstr "Páxina arriba" #. ~ Usually paired with the Break key #: src/client/keycode.cpp -#, fuzzy msgid "Pause Key" -msgstr "Pausa" +msgstr "Tecla de pausa" #: src/client/keycode.cpp msgid "Play" @@ -1873,17 +1837,15 @@ msgstr "Xogar" #. ~ "Print screen" key #: src/client/keycode.cpp msgid "Print" -msgstr "Impr. pant." +msgstr "Imprimir" #: src/client/keycode.cpp -#, fuzzy msgid "Return Key" -msgstr "Enter" +msgstr "Tecla de retorno" #: src/client/keycode.cpp -#, fuzzy msgid "Right Arrow" -msgstr "Ctrl der." +msgstr "Frecha dereita" #: src/client/keycode.cpp msgid "Right Button" @@ -1891,7 +1853,7 @@ msgstr "Botón dereito" #: src/client/keycode.cpp msgid "Right Control" -msgstr "Ctrl der." +msgstr "Control dereito" #: src/client/keycode.cpp msgid "Right Menu" @@ -1899,15 +1861,15 @@ msgstr "Menú dereito" #: src/client/keycode.cpp msgid "Right Shift" -msgstr "Shift der." +msgstr "Shift dereito" #: src/client/keycode.cpp msgid "Right Windows" -msgstr "Win. der." +msgstr "Windows dereito" #: src/client/keycode.cpp msgid "Scroll Lock" -msgstr "Bloq. Despr." +msgstr "Bloqueo de desprazamento" #. ~ Key name #: src/client/keycode.cpp @@ -1915,9 +1877,8 @@ msgid "Select" msgstr "Seleccionar" #: src/client/keycode.cpp -#, fuzzy msgid "Shift Key" -msgstr "Shift" +msgstr "Tecla Maiúsculas" #: src/client/keycode.cpp msgid "Sleep" @@ -1937,7 +1898,7 @@ msgstr "Tabulador" #: src/client/keycode.cpp msgid "Up Arrow" -msgstr "" +msgstr "Frecha cara arriba" #: src/client/keycode.cpp msgid "X Button 1" @@ -1948,9 +1909,8 @@ msgid "X Button 2" msgstr "X Botón 2" #: src/client/keycode.cpp -#, fuzzy msgid "Zoom Key" -msgstr "Zoom" +msgstr "Tecla de zoom" #: src/client/minimap.cpp msgid "Minimap hidden" @@ -1970,27 +1930,38 @@ msgstr "Minimapa en modo superficie, Zoom x%d" msgid "Minimap in texture mode" msgstr "Minimapa en modo textura" +#: src/client/shader.cpp +#, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "Produciuse un erro ao compilar o sombreador \"%s\"." + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "Os sombreadores están habilitados pero o controlador non admite GLSL." + #. ~ 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 "" +msgstr "%s falta:" #: src/content/mod_configuration.cpp 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." #: src/content/mod_configuration.cpp msgid "" "Note: this may be caused by a dependency cycle, in which case try updating " "the mods." msgstr "" +"Nota: isto pode ser causado por un ciclo de dependencia, nese caso, proba " +"actualizar os mods." #: src/content/mod_configuration.cpp -#, fuzzy msgid "Some mods have unsatisfied dependencies:" -msgstr "Sen dependencias importantes" +msgstr "Algúns mods teñen dependencias non satisfeitas:" #: src/gui/guiChatConsole.cpp msgid "Failed to open webpage" @@ -2082,7 +2053,7 @@ msgstr "A tecla xa está en uso" #: src/gui/guiKeyChangeMenu.cpp msgid "Keybindings." -msgstr "Atallos de teclado" +msgstr "Atallos de teclado." #: src/gui/guiKeyChangeMenu.cpp msgid "Left" @@ -2094,7 +2065,7 @@ msgstr "Comando local" #: src/gui/guiKeyChangeMenu.cpp msgid "Mute" -msgstr "Silenciar" +msgstr "Acalar" #: src/gui/guiKeyChangeMenu.cpp msgid "Next item" @@ -2102,7 +2073,7 @@ msgstr "Seg. obxecto" #: src/gui/guiKeyChangeMenu.cpp msgid "Prev. item" -msgstr "Obxecto ant." +msgstr "Obxecto anterior" #: src/gui/guiKeyChangeMenu.cpp msgid "Range select" @@ -2118,7 +2089,7 @@ msgstr "Captura" #: src/gui/guiKeyChangeMenu.cpp msgid "Sneak" -msgstr "Ir agachado" +msgstr "Ir Agachado" #: src/gui/guiKeyChangeMenu.cpp msgid "Toggle HUD" @@ -2160,6 +2131,18 @@ msgstr "Zoom" msgid "press key" msgstr "Unha tecla" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "Aberto" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "Abrir Enderezo?" + +#: src/gui/guiOpenURL.cpp +msgid "Unable to open URL" +msgstr "Non se pode abrir o enderezo" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "Cambiar" @@ -2193,6 +2176,7 @@ msgstr "Son: %d%%" #. 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 "gl" @@ -2200,16 +2184,17 @@ msgstr "gl" msgid "" "Name is not registered. To create an account on this server, click 'Register'" msgstr "" +"O nome non está rexistrado. Para crear unha conta neste servidor, fai clic " +"en 'Rexistrar'" #: src/network/clientpackethandler.cpp -#, fuzzy msgid "Name is taken. Please choose another name" -msgstr "Escolle un nome!" +msgstr "O nome está en uso. Por favor, escolle outro nome" #: src/server.cpp -#, fuzzy, c-format +#, c-format msgid "%s while shutting down: " -msgstr "Cerrando..." +msgstr "%s mentres se apaga: " #: src/settings_translation_file.cpp msgid "" @@ -2283,7 +2268,7 @@ msgstr "Ruído 2D que localiza os vales fluviais e canles dos ríos." #: src/settings_translation_file.cpp msgid "3D" -msgstr "" +msgstr "3D" #: src/settings_translation_file.cpp msgid "3D clouds" @@ -2342,7 +2327,6 @@ msgid "3D noise that determines number of dungeons per mapchunk." msgstr "Ruído 3D que determina a cantidade de calabozos por chunk." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "3D support.\n" "Currently supported:\n" @@ -2355,15 +2339,14 @@ msgid "" "Note that the interlaced mode requires shaders to be enabled." msgstr "" "Soporte 3D.\n" -"Modos admitidos actualmente:\n" -"- none: ningún efecto 3D.\n" -"- anaglyph: sistema de cor Ciano/Magenta (lentes 3D azul e vermelho).\n" -"- interlaced: sistema interlazado (lentes polarizadas).\n" -"- topbottom: divide a pantalla en dous: unha encima e a outra debaixo.\n" -"- sidebyside: divide a pantalla en dous: lado a lado.\n" -" - crossview: 3D de ollos cruzados.\n" -" - pageflip: quadbuffer basado en 3D.\n" -"Ten en conta que o modo interlazado precisa que os sombreadores estean " +"Soportado actualmente:\n" +"- none: sen saída 3D.\n" +"- anaglyph: 3D en cor ciano/maxenta.\n" +"- interlaced: soporte de pantalla polarizada baseada en liñas par/ímpar.\n" +"- topbottom: pantalla dividida superior/inferior.\n" +"- sidebyside: pantalla dividida lado a lado.\n" +" - crossview: 3D para ver cruzado\n" +"Teña en conta que o modo entrelazado require cos sombreadores estean " "activados." #: src/settings_translation_file.cpp @@ -2423,14 +2406,6 @@ msgstr "Rango de envío en obxetos activos" msgid "Adds particles when digging a node." msgstr "Añade partículas ao excavar un nó." -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" -"Axusta a configuración de ppp á túa pantalla (no X11/Android non) p. ex. " -"para pantallas 4K." - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2448,7 +2423,7 @@ msgid "" msgstr "" "Axusta a densidade da capa flotante.\n" "Aumentar o valor para aumentar a densidade. Pode ser positivo ou negativo.\n" -"Valor = 0,0: o 50 % do volume é terreo flotante.\n" +"Valor = 0,0: o 50% o do volume é terreo flotante.\n" "Valor = 2.0 (pode ser maior dependendo de 'mgv7_np_floatland', probar\n" "para estar seguro) crea una capa sólida de terreo flotante." @@ -2460,6 +2435,10 @@ msgstr "Nome de administrador" msgid "Advanced" msgstr "Avanzado" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "Permite que os líquidos sexan translúcidos." + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2500,14 +2479,12 @@ msgid "Announce to this serverlist." msgstr "Anuncar en esta lista de servidores." #: src/settings_translation_file.cpp -#, fuzzy msgid "Anti-aliasing scale" -msgstr "Suavizado:" +msgstr "Escala de Suavizado (anti-aliasing)" #: src/settings_translation_file.cpp -#, fuzzy msgid "Antialiasing method" -msgstr "Suavizado:" +msgstr "Método de suavizado (antialiasing)" #: src/settings_translation_file.cpp msgid "Append item name" @@ -2521,6 +2498,25 @@ msgstr "Añadir nome do obxecto á descripción." msgid "Apple trees noise" msgstr "Ruído das maceiras" +#: 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 "" +"Aplique tramado para reducir os artefactos de bandas de cor.\n" +"O tramado aumenta significativamente o tamaño da compresión sen perdas\n" +"das capturas de pantalla e funciona incorrectamente se a pantalla ou o " +"sistema operativo\n" +"realiza un tramado adicional ou se as canles de cor non están cuantificadas\n" +"a 8 bits.\n" +"Con OpenGL ES, o tramado só funciona se o sombreador admite alta\n" +"precisión de punto flotante e pode ter un maior impacto no rendemento." + #: src/settings_translation_file.cpp msgid "Arm inertia" msgstr "Inercia do brazo" @@ -2544,24 +2540,39 @@ msgid "" "clients.\n" "Small values potentially improve performance a lot, at the expense of " "visible\n" -"rendering glitches (some blocks will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." msgstr "" -"A esta distancia, o servidor optimizará de forma agresiva a que bloques se " +"A esta distancia, o servidor optimizará de forma agresiva que bloques se " "envían\n" -"clientes.\n" -"Os valores pequenos poden mellorar moito o rendemento, a costa de\n" -"fallos visibles de renderizado (algúns bloques non se mostrarán baixo a auga " -"nin nas covas,\n" -"así como ás veces en chán).\n" -"Establecer isto nun valor maior que \"max_block_send_distance\" desactiva " -"isto\n" +"aos clientes.\n" +"Os valores pequenos poden mellorar moito o rendemento, a expensas de fallos " +"visibles\n" +"na renderización (algúns bloques poden non renderizarse correctamente nas " +"covas).\n" +"Establecer isto nun valor maior que max_block_send_distance desactiva esta\n" "optimización.\n" -"Indicado en bloques de mapas (16 nós)." +"Indicado en MapBlocks (16 nodos)." + +#: 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 "" +"A esta distancia o servidor realizará unha comprobación de oclusión máis " +"sinxela e económica.\n" +"Valores máis pequenos poden mellorar o rendemento, a costa de fallos de\n" +"renderización visibles temporalmente (bloques que faltan).\n" +"Isto é especialmente útil para un rango de visualización moi grande (máis de " +"500).\n" +"Expresado en MapBlocks (16 nodos)." #: src/settings_translation_file.cpp msgid "Audio" @@ -2592,9 +2603,8 @@ msgid "Base terrain height." msgstr "Altura base do terreo." #: src/settings_translation_file.cpp -#, fuzzy msgid "Base texture size" -msgstr "Tamaño mínimo de textura" +msgstr "Tamaño da textura base" #: src/settings_translation_file.cpp msgid "Basic privileges" @@ -2617,38 +2627,40 @@ msgid "Bind address" msgstr "Vincular enderezo" #: src/settings_translation_file.cpp -#, fuzzy msgid "Biome API" -msgstr "Biomas" +msgstr "API de bioma" #: src/settings_translation_file.cpp msgid "Biome noise" msgstr "Ruído de bioma" +#: src/settings_translation_file.cpp +msgid "Block cull optimize distance" +msgstr "Distancia de optimización da eliminación de bloques" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "Distancia de optimización do envío de bloques" #: src/settings_translation_file.cpp msgid "Bloom" -msgstr "" +msgstr "Resplandor" #: src/settings_translation_file.cpp msgid "Bloom Intensity" -msgstr "" +msgstr "Intensidade do resplandor" #: src/settings_translation_file.cpp -#, fuzzy msgid "Bloom Radius" -msgstr "Radio de nubes" +msgstr "Radio de Resplandor (Bloom)" #: src/settings_translation_file.cpp msgid "Bloom Strength Factor" -msgstr "" +msgstr "Factor de intensidade do resplandor" #: src/settings_translation_file.cpp msgid "Bobbing" -msgstr "" +msgstr "Balanceo" #: src/settings_translation_file.cpp msgid "Bold and italic font path" @@ -2792,7 +2804,7 @@ msgstr "Cliente" #: src/settings_translation_file.cpp msgid "Client Mesh Chunksize" -msgstr "" +msgstr "Tamaño dos fragmentos da malla do cliente" #: src/settings_translation_file.cpp msgid "Client and Server" @@ -2807,14 +2819,12 @@ msgid "Client side modding restrictions" msgstr "Restricións para modear no lado do cliente" #: src/settings_translation_file.cpp -#, fuzzy msgid "Client-side Modding" -msgstr "Personalización do cliente" +msgstr "Modificación do lado do cliente" #: src/settings_translation_file.cpp -#, fuzzy msgid "Client-side node lookup range restriction" -msgstr "Restrición do rango de busca do nodo do lado do cliente" +msgstr "Restricción do rango de busca de nodos do lado do cliente" #: src/settings_translation_file.cpp msgid "Climbing speed" @@ -2829,7 +2839,6 @@ msgid "Clouds" msgstr "Nubes" #: src/settings_translation_file.cpp -#, fuzzy msgid "Clouds are a client-side effect." msgstr "As nubes son un efecto do lado do cliente." @@ -2845,6 +2854,14 @@ msgstr "Néboa colorida" msgid "Colored shadows" msgstr "Sombras coloridas" +#: 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 "" +"Lista separada por comas de extensións AL e ALC que non deben usarse.\n" +"Útil para probas. Vexa al_extensions.[h,cpp] para máis detalles." + #: src/settings_translation_file.cpp msgid "" "Comma-separated list of flags to hide in the content repository.\n" @@ -2931,9 +2948,8 @@ msgid "Console height" msgstr "Altura da consola" #: src/settings_translation_file.cpp -#, fuzzy msgid "Content Repository" -msgstr "Contido do repositorio en liña" +msgstr "Repositorio de contidos" #: src/settings_translation_file.cpp msgid "ContentDB Flag Blacklist" @@ -2962,6 +2978,8 @@ msgid "" "Controls sinking speed in liquid when idling. Negative values will cause\n" "you to rise instead." msgstr "" +"Controla a velocidade de afundimento no líquido cando estás inactivo\n" +"Valores negativos farán que subas en vez de baixar." #: src/settings_translation_file.cpp msgid "Controls steepness/depth of lake depressions." @@ -3009,10 +3027,6 @@ msgstr "" "Cor da cruz (R, G, B)\n" "Tamén pasa o mesmo coa cruz do obxecto" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "DPI" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "Límite do tamaño do ficheiro de información de depuración" @@ -3034,11 +3048,12 @@ msgid "Default acceleration" msgstr "Aceleración por defecto" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Default maximum number of forceloaded mapblocks.\n" "Set this to -1 to disable the limit." -msgstr "Número máximo de bloques de mapa cargados de maneira forzada." +msgstr "" +"Número máximo predeterminado de bloques de mapa cargados forzadamente.\n" +"Establece en -1 para desactivar o límite." #: src/settings_translation_file.cpp msgid "Default password" @@ -3066,6 +3081,29 @@ msgstr "" "Isto simula un efecto de sombras suaves aplicando un PCF ou Poisson disk\n" "pero tamén consume máis recursos." +#: 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" +"Minetest 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" +"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." + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "Define as áreas onde as árbores teñen mazás." @@ -3094,6 +3132,9 @@ msgid "" "Smaller values make bloom more subtle\n" "Range: from 0.01 to 1.0, default: 0.05" msgstr "" +"Define a cantidade de resplandor que se aplica á imaxe renderizada\n" +"Os valores máis pequenos fan que o resplandor sexa máis sutil\n" +"Rango: de 0,01 a 1,0, por defecto: 0,05" #: src/settings_translation_file.cpp msgid "Defines large-scale river channel structure." @@ -3116,6 +3157,8 @@ msgid "" "Defines the magnitude of bloom overexposure.\n" "Range: from 0.1 to 10.0, default: 1.0" msgstr "" +"Define a magnitude da sobreexposición do resplandor.\n" +"Rango: de 0,1 a 10,0, valor predeterminado: 1,0" #: src/settings_translation_file.cpp msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)." @@ -3129,6 +3172,9 @@ msgid "" "methods.\n" "Value of 2 means taking 2x2 = 4 samples." msgstr "" +"Define o tamaño da grella de mostraxe para os métodos de antialiás FSAA e " +"SSAA.\n" +"Un valor de 2 significa tomar 2x2 = 4 mostras." #: src/settings_translation_file.cpp msgid "Defines the width of the river channel." @@ -3221,6 +3267,10 @@ msgid "" "Distance in nodes at which transparency depth sorting is enabled\n" "Use this to limit the performance impact of transparency depth sorting" 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" #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." @@ -3252,16 +3302,19 @@ msgstr "Sonido de calabozos" #: src/settings_translation_file.cpp msgid "Enable Automatic Exposure" -msgstr "" +msgstr "Activar a exposición automática" #: src/settings_translation_file.cpp -#, fuzzy msgid "Enable Bloom" -msgstr "Activar todo" +msgstr "Activar o Resplandor" #: src/settings_translation_file.cpp msgid "Enable Bloom Debug" -msgstr "" +msgstr "Activar depuración do resplandor" + +#: src/settings_translation_file.cpp +msgid "Enable Debanding" +msgstr "Habilitar a eliminación de bandas" #: src/settings_translation_file.cpp msgid "" @@ -3289,9 +3342,13 @@ msgstr "" "Utiliza o \"poisson disk\" para proxectar sombras suaves cando o valor sexa " "verdadero. Senón, utiliza o filtrado PCF." +#: src/settings_translation_file.cpp +msgid "Enable Post Processing" +msgstr "Habilitar o postprocesado" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" -msgstr "" +msgstr "Habilitar a eliminación por rastrexo de raios" #: src/settings_translation_file.cpp msgid "" @@ -3300,6 +3357,10 @@ msgid "" "automatically adjust to the brightness of the scene,\n" "simulating the behavior of human eye." msgstr "" +"Activar corrección automática da exposición\n" +"Cando se activa, o motor de post-procesado axustará\n" +"automaticamente á luminosidade da escena,\n" +"simulando o comportamento do ollo humano." #: src/settings_translation_file.cpp msgid "" @@ -3321,6 +3382,7 @@ msgstr "Activar joysticks" #: src/settings_translation_file.cpp msgid "Enable joysticks. Requires a restart to take effect" msgstr "" +"Activar pancas de xogo (joysticks). Require un reinicio para facer efecto" #: src/settings_translation_file.cpp msgid "Enable mod channels support." @@ -3333,6 +3395,12 @@ msgstr "Activar seguridade dos mods" #: 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 " +"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)." #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." @@ -3348,7 +3416,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Enable split login/register" -msgstr "" +msgstr "Activar o inicio de sesión/rexistro dividido" #: src/settings_translation_file.cpp msgid "" @@ -3363,6 +3431,10 @@ msgstr "" "a novos servidores, pero é posible que non sexan compatibles todas as " "funcións novas que esperan." +#: src/settings_translation_file.cpp +msgid "Enable touchscreen" +msgstr "Habilitar a pantalla táctil" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3375,14 +3447,6 @@ msgstr "" "exemplo, texturas)\n" "ao conectarse ao servidor." -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" -"Activar os objectos buffer de vértice.\n" -"Isto debería mellorar muito o rendimento gráfico." - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3421,6 +3485,22 @@ msgstr "Activa a animación de obxetos no inventario." msgid "Enables caching of facedir rotated meshes." msgstr "Activa o rexistro de mallas xiradas." +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +msgstr "" +"Habilita a depuración e a verificación de erros no controlador de OpenGL." + +#: src/settings_translation_file.cpp +msgid "Enables the post processing pipeline." +msgstr "Habilita o pipeline de postprocesado." + +#: src/settings_translation_file.cpp +msgid "" +"Enables touchscreen mode, allowing you to play the game with a touchscreen." +msgstr "" +"Habilita o modo de pantalla táctil, permitindo xogar ao xogo cunha pantalla " +"táctil." + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -3431,9 +3511,8 @@ msgstr "" "a costa de pequenos falllos visuais que non afectan á hora de xogar." #: src/settings_translation_file.cpp -#, fuzzy msgid "Engine Profiler" -msgstr "Perfil do motor do xogo" +msgstr "Perfilador do Motor" #: src/settings_translation_file.cpp msgid "Engine profiling data print interval" @@ -3444,7 +3523,6 @@ msgid "Entity methods" msgstr "Métodos de entidade" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Exponent of the floatland tapering. Alters the tapering behavior.\n" "Value = 1.0 creates a uniform, linear tapering.\n" @@ -3453,18 +3531,20 @@ msgid "" "Values < 1.0 (for example 0.25) create a more defined surface level with\n" "flatter lowlands, suitable for a solid floatland layer." msgstr "" -"Expoñente do estreitamento da terreo flotante. Altera este comportamento.\n" -"O valor = 1,0 crea un estrechamento uniforme e lineal.\n" -"Os valores > 1.0 crean un afilamento suave adecuado para a separación " -"predeterminada\n" -"cháns flotantes.\n" -"Os valores < 1,0 (por exemplo 0,25) crean un nivel de superficie máis " -"definido con\n" -"cháns baixas máis planas, adecuadas para unha capa sólida de terreo flotante." +"Expoñente da redución das terras flotantes. Modifica o comportamento da " +"redución.\n" +"Valor = 1.0 crea unha redución uniforme e linear.\n" +"Valores > 1.0 crean unha redución suave axeitada para as terras flotantes " +"separadas\n" +"por defecto.\n" +"Valores < 1.0 (por exemplo 0.25) crean un nivel de superficie máis definido " +"con\n" +"terras baixas máis planas, axeitado para unha capa sólida de terras " +"flotantes." #: src/settings_translation_file.cpp msgid "Exposure compensation" -msgstr "" +msgstr "Compensación de exposición" #: src/settings_translation_file.cpp msgid "FPS" @@ -3525,9 +3605,8 @@ msgid "Filmic tone mapping" msgstr "Mapa de tons fílmico" #: src/settings_translation_file.cpp -#, fuzzy msgid "Filtering and Antialiasing" -msgstr "Suavizado:" +msgstr "Filtrado e suavizado (Antialiasing)" #: src/settings_translation_file.cpp msgid "First of 4 2D noises that together define hill/mountain range height." @@ -3547,14 +3626,13 @@ msgid "Fixed virtual joystick" msgstr "Joystick virtual fixo" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Fixes the position of virtual joystick.\n" "If disabled, virtual joystick will center to first-touch's position." msgstr "" -"(Android) Corrixe a posición do joystick virtual.\n" -"Se está desactivado, o joystick virtual centrarase na posición do primeiro " -"toque." +"Corrixe a posición da panca de xogos ( joystick) virtual.\n" +"Se está desactivado, a panca de xogos virtual centrarase na posición do " +"primeiro toque." #: src/settings_translation_file.cpp msgid "Floatland density" @@ -3593,9 +3671,8 @@ msgid "Fog start" msgstr "Inicio de néboa" #: src/settings_translation_file.cpp -#, fuzzy msgid "Font" -msgstr "Tamaño da fonte" +msgstr "Fonte" #: src/settings_translation_file.cpp msgid "Font bold by default" @@ -3738,9 +3815,8 @@ msgid "Fullscreen mode." msgstr "Modo de pantalla completa." #: src/settings_translation_file.cpp -#, fuzzy msgid "GUI" -msgstr "GUIs" +msgstr "Interface gráfica do usuario (GUI)" #: src/settings_translation_file.cpp msgid "GUI scaling" @@ -3823,9 +3899,8 @@ msgid "HUD" msgstr "HUD" #: src/settings_translation_file.cpp -#, fuzzy msgid "HUD scaling" -msgstr "Escala de IGU" +msgstr "Escalado do HUD" #: src/settings_translation_file.cpp msgid "" @@ -3863,11 +3938,8 @@ msgid "Heat noise" msgstr "Ruído da calor" #: src/settings_translation_file.cpp -#, fuzzy msgid "Height component of the initial window size." -msgstr "" -"Componente de altura do tamaño inicial xanela inicial. Ignórase en pantalla " -"completa." +msgstr "Componente de altura do tamaño inicial da xanela." #: src/settings_translation_file.cpp msgid "Height noise" @@ -3931,42 +4003,42 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Hotbar: Enable mouse wheel for selection" -msgstr "" +msgstr "Barra acceso rápido: Activar a roda do rato para a selección" #: src/settings_translation_file.cpp msgid "Hotbar: Invert mouse wheel direction" -msgstr "" +msgstr "Barra acceso rápido: inverte a dirección da roda do rato" #: src/settings_translation_file.cpp msgid "How deep to make rivers." msgstr "Profundidade dos ríos." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "How fast liquid waves will move. Higher = faster.\n" "If negative, liquid waves will move backwards." msgstr "" -"Velocidade das ondas dos líquidos. Máis alto = máis rápido.\n" -"Se o valor é negativo, as ondas moveranse cara atrás.\n" -"É necesario activar a ondulación dos líquidos." +"A que velocidade se moverán as ondas líquidas. Maior = máis rápido.\n" +"Se é negativo, as ondas líquidas moveranse cara atrás." #: src/settings_translation_file.cpp -#, fuzzy 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 "" -"Tempo de espera do servidor en eliminar bloques non utilizados.\n" -"Canta maior resolución maior fluidez, aínda que consume máis memoria RAM." +"Tempo que o servidor esperará antes de descargar os bloques de mapa non " +"utilizados, expresado en segundos.\n" +"Un valor máis alto proporciona un funcionamento máis suave, pero utilizará " +"máis memoria RAM." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "How much you are slowed down when moving inside a liquid.\n" "Decrease this to increase liquid resistance to movement." -msgstr "Diminúe isto para aumentar a resistencia do líquido ao movemento." +msgstr "" +"Canto se retarda o movemento dentro dun líquido.\n" +"Reduza isto para aumentar a resistencia ao movemento no líquido." #: src/settings_translation_file.cpp msgid "How wide to make rivers." @@ -4051,39 +4123,35 @@ msgstr "" "Actívao só se sabes o que fas." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "If enabled, players cannot join without a password or change theirs to an " "empty password." msgstr "" -"Se está activado, os novos xogadores non poderán unirse con contrasinais " -"baleiros." +"Se está habilitado, os xogadores non poden unirse sen un contrasinal ou " +"cambiar o seu contrasinal a un contrasinal baleiro." #: 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 "" -"Se está activado, o servidor realizará a eliminación de oclusión de bloques " -"de mapa baseándose\n" +"Se activado, o servidor realizará ocultación de bloques do mapa baseada na\n" "na posición dos ollos do xogador. Isto pode reducir o número de bloques\n" -"enviado ao cliente entre un 50 % e un 80 %. O cliente xa non recibirá o máis " -"invisible,\n" -"de xeito que se reduce a utilidade do modo espectador." +"enviados ao cliente en un 50-80%. Os clientes deixarán de recibir a maioría " +"\n" +"dos bloques invisibles, reducindo a utilidade do modo noclip." #: src/settings_translation_file.cpp -#, fuzzy 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 "" -"Se está activado, pode colocar bloques na posición (pés + nivel dos ollos) " -"onde está.\n" -"Isto é útil cando se traballa con caixas de nós en áreas pequenas." +"Se habilitado, podes colocar nodos na posición (altura dos pés + altura " +"ocular) onde estás.\n" +"Isto é útil cando traballas con caixas de nodos en áreas pequenas." #: src/settings_translation_file.cpp msgid "" @@ -4186,9 +4254,8 @@ msgstr "" "Intervalo para gardado de cambios importantes no mundo, indicado en segundos." #: src/settings_translation_file.cpp -#, fuzzy msgid "Interval of sending time of day to clients, stated in seconds." -msgstr "Intervalo de envío da hora do dia aos clientes." +msgstr "Intervalo de envío da hora do día aos clientes, expresado en segundos." #: src/settings_translation_file.cpp msgid "Inventory items animations" @@ -4201,6 +4268,8 @@ 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 " +"na barra de acceso rápido." #: src/settings_translation_file.cpp msgid "Invert vertical mouse movement." @@ -4342,7 +4411,7 @@ msgstr "Límite de lagos no mapa" #: src/settings_translation_file.cpp msgid "Language" -msgstr "Idiomas" +msgstr "Lingua" #: src/settings_translation_file.cpp msgid "Large cave depth" @@ -4373,46 +4442,48 @@ msgid "" msgstr "" "Apariencia das follas:\n" "- Detalladas: todas as caras son visibles\n" -"- Simples: só vense as caras externas, se se utilizan special_tiles " +"- Simples: só vense as caras externas, cando se utilizan special_tiles " "definidos\n" "- Opacas: desactiva a transparencia" #: src/settings_translation_file.cpp -#, fuzzy msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" -"Duración do tick do servidor e o intervalo no que os obxetos actualízanse " -"polo xeral\n" -"na rede." +"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." #: src/settings_translation_file.cpp -#, fuzzy msgid "Length of liquid waves." -msgstr "Velocidade de movemento das ondas dos líquidos" +msgstr "Lonxitude das ondas líquidas." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Length of time between Active Block Modifier (ABM) execution cycles, stated " "in seconds." -msgstr "Periodo de tempo entre os ciclos de execución dos ABM" +msgstr "" +"Duración do tempo entre ciclos de execución de modificadores de bloque " +"activos (ABM), expresado en segundos." #: src/settings_translation_file.cpp -#, fuzzy msgid "Length of time between NodeTimer execution cycles, stated in seconds." -msgstr "Periodo de tempo entre os ciclos de execución de NodeTimer" +msgstr "" +"Duración do tempo entre ciclos de execución de NodeTimer, expresado en " +"segundos." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Length of time between active block management cycles, stated in seconds." -msgstr "Periodo de tempo entre os ciclos de xestión de bloques activos" +msgstr "" +"Duración do tempo entre ciclos de xestión activa de bloques, expresado en " +"segundos." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Level of logging to be written to debug.txt:\n" "- (no logging)\n" @@ -4424,14 +4495,15 @@ msgid "" "- verbose\n" "- trace" msgstr "" -"Nivel de rexistro que se gardará en debug.txt:\n" -"- (sen rexistro)\n" -"- none (mensaxes sen nivel)\n" -"- error\n" -"- warning\n" -"- action\n" -"- info\n" -"- verbose" +"Nivel de rexistro que se escribirá en debug.txt:\n" +"- (sen rexistro)\n" +"- ningún (mensaxes sen nivel)\n" +"- erro\n" +"- aviso\n" +"- acción\n" +"- información\n" +"- detallado\n" +"- traza" #: src/settings_translation_file.cpp msgid "Light curve boost" @@ -4458,9 +4530,8 @@ msgid "Light curve low gradient" msgstr "Gradiente baixo da curva de luz" #: src/settings_translation_file.cpp -#, fuzzy msgid "Lighting" -msgstr "Iluminación suave" +msgstr "Iluminación" #: src/settings_translation_file.cpp msgid "" @@ -4481,11 +4552,11 @@ msgid "" "Only has an effect if compiled with cURL." msgstr "" "Limita o número de solicitudes paralelas HTTP. Afecta:\n" -"- Recuperación de medios se o servidor usa a configuración " -"\"remote_media\".\n" +"- 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" -"Só ten efecto se se compila con cURL." +"Só ten efecto cando se compila con cURL." #: src/settings_translation_file.cpp msgid "Liquid fluidity" @@ -4539,6 +4610,9 @@ msgid "" "from the bright objects.\n" "Range: from 0.1 to 8, default: 1" msgstr "" +"Valor lóxico que controla ata onde se espalla o efecto de resplandor\n" +"desde os obxectos brillantes. \n" +"Rango: de 0.1 a 8, predeterminado: 1" #: src/settings_translation_file.cpp msgid "Lower Y limit of dungeons." @@ -4559,10 +4633,6 @@ msgstr "" "Facer que as cores da néboa e do ceo dependan do día (amencer/posta de sol) " "e da dirección da vista." -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "Fai que todos os líquidos sexan opacos" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "Nivel de compresión do mapa para almacenamiento de disco" @@ -4624,13 +4694,17 @@ 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." +"the 'jungles' flag is ignored.\n" +"The 'temples' flag disables generation of desert temples. Normal dungeons " +"will appear instead." msgstr "" -"Atributos de xeración de mundos específicos do xerador de mundos v6.\n" -"O marcador \"snowbiomes\" activa o novo sistema de 5 biomas.\n" -"Cando o marcador \"snowbiomes\" está activado, as selvas están habilitadas " +"Atributos de xeración de mapas específicos de Mapgen v6.\n" +"A bandeira \"snowbiomes\" activa o novo sistema de 5 biomas.\n" +"Cando a bandeira 'snowbiomes' está activada, as xunglas están habilitadas " "automaticamente e\n" -"o marcador \"selvas\" é ignorado." +"a bandeira \"xunglas\" é ignorada.\n" +"A bandeira \"templos\" desactiva a xeración de templos no deserto. No seu " +"lugar aparecerán os alxubes normais." #: src/settings_translation_file.cpp msgid "" @@ -4665,15 +4739,8 @@ msgid "Mapblock mesh generation delay" msgstr "Retraso da xeración da malla do mapa de bloques" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapblock mesh generation threads" -msgstr "Retraso da xeración da malla do mapa de bloques" - -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "" -"Tamaño da caché do mapa de bloques do xerador da malla do mapa de bloques en " -"MB" +msgstr "Fíos de xeración da malla do bloque de mapa" #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" @@ -4858,8 +4925,8 @@ msgid "" msgstr "" "Número máximo de paquetes enviados por etapa de envío. Se tes unha conexión " "lenta\n" -"intenta reducilo, pero non ata un número inferior ao dobre do que ten por " -"obxectivo o cliente." +"intenta reducilo, pero non ata un número inferior ao dobre do\n" +"que ten por obxectivo o cliente." #: src/settings_translation_file.cpp msgid "Maximum number of players that can be connected simultaneously." @@ -4891,18 +4958,16 @@ msgid "Maximum simultaneous block sends per client" msgstr "Número máximo de envíos de bloques simultáneos por cliente" #: src/settings_translation_file.cpp -#, fuzzy msgid "Maximum size of the outgoing chat queue" -msgstr "Tamaño máximo da cola de saída do chat" +msgstr "Tamaño máximo da cola de chat de saída" #: 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 da fila de chat de saída.\n" -"0 para desactivar a cola e -1 para que o tamaño da cola sexa ilimitado." +"Tamaño máximo da cola de saída de chat.\n" +"0 para desactivar a cola e -1 para facer que o tamaño da cola sexa ilimitado." #: src/settings_translation_file.cpp msgid "" @@ -4948,6 +5013,10 @@ msgstr "Nivel mínimo de rexistro para escribir no chat." msgid "Minimap scan height" msgstr "Altura de escaneo do minimapa" +#: src/settings_translation_file.cpp +msgid "Minimum dig repetition interval" +msgstr "Intervalo mínimo de repetición de escavación" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "Ruído 3D que determina a cantidade de calabozos por chunk." @@ -4958,16 +5027,15 @@ msgstr "Límite mínimo do número aleatorio de covas pequenas por chunk." #: src/settings_translation_file.cpp msgid "Mipmapping" -msgstr "Mapeado do relieve" +msgstr "Mapeo de Mip" #: src/settings_translation_file.cpp msgid "Miscellaneous" -msgstr "" +msgstr "Miscelánea" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mod Profiler" -msgstr "Análise do mundo" +msgstr "Perfilador de mods" #: src/settings_translation_file.cpp msgid "Mod Security" @@ -5017,6 +5085,10 @@ msgstr "Sensibilidade do rato" msgid "Mouse sensitivity multiplier." msgstr "Multiplicador da sensibilidade do rato." +#: src/settings_translation_file.cpp +msgid "Movement threshold" +msgstr "Limiar de movemento" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "Ruído do lodo" @@ -5072,7 +5144,6 @@ msgstr "" "Este valor substituirase ao comezar desde o menú principal." #: src/settings_translation_file.cpp -#, fuzzy msgid "Networking" msgstr "Rede" @@ -5081,9 +5152,8 @@ msgid "New users need to input this password." msgstr "Os novos usuarios deben introducir este contrasinal." #: src/settings_translation_file.cpp -#, fuzzy msgid "Node and Entity Highlighting" -msgstr "Resaltar nodos" +msgstr "Destacado de nodos e entidades" #: src/settings_translation_file.cpp msgid "Node highlighting" @@ -5137,9 +5207,8 @@ msgstr "" "consumo de memoria (4096=100MB, como regra xeral)." #: src/settings_translation_file.cpp -#, fuzzy msgid "Number of messages a player may send per 10 seconds." -msgstr "Cantidade de mensaxes que un xogador pode enviar en 10 segundos." +msgstr "Cantidade de mensaxes que un xogador pode enviar por cada 10 segundos." #: src/settings_translation_file.cpp msgid "" @@ -5147,19 +5216,17 @@ msgid "" "Value of 0 (default) will let Minetest 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 dispoñibles." #: src/settings_translation_file.cpp msgid "Occlusion Culler" -msgstr "" +msgstr "Eliminador de oclusión" #: src/settings_translation_file.cpp -#, fuzzy msgid "Occlusion Culling" -msgstr "Determinar bloques invisibles do lado do servidor" - -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "Líquidos opacos" +msgstr "Eliminación de oclusión" #: src/settings_translation_file.cpp msgid "" @@ -5178,6 +5245,10 @@ msgstr "" "unha especificación de formulario\n" "aberto." +#: src/settings_translation_file.cpp +msgid "OpenGL debug" +msgstr "Depuración de OpenGL" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "Substitución opcional da cor da ligazón web do chat." @@ -5256,19 +5327,18 @@ msgstr "Filtrado de Poisson" #: src/settings_translation_file.cpp msgid "Post Processing" -msgstr "" +msgstr "Post-procesamento" #: 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 "" -"Evita que a acción de romper e colocar bloques se repitan cando se manteñen " -"os botóns do rato.\n" -"Activa isto se rompes ou colocas bloques por accidente moitas veces." +"Prevén que cavar e colocar se repita ao manter os botóns respectivos.\n" +"Actívalo cando cavas ou colocas con demasiada frecuencia por accidente.\n" +"Nos dispositivos táctiles, só afecta á acción de cavar." #: src/settings_translation_file.cpp msgid "Prevent mods from doing insecure things like running shell commands." @@ -5311,6 +5381,14 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "Proporción de covas grandes que conteñen líquido." +#: src/settings_translation_file.cpp +msgid "Protocol version minimum" +msgstr "Versión mínima do protocolo" + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "xesto de golpe" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -5329,6 +5407,10 @@ msgstr "Eleva o terreo para facer vales arredor dos ríos." msgid "Random input" msgstr "Entrada aleatoria" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "Orde de carga aleatoria de mods" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "Mensaxes do chat recientes" @@ -5338,9 +5420,8 @@ msgid "Regular font path" msgstr "Camiño da fonte regular" #: src/settings_translation_file.cpp -#, fuzzy msgid "Remember screen size" -msgstr "Autogardar o tamaño da pantalla" +msgstr "Lembrar o tamaño da pantalla" #: src/settings_translation_file.cpp msgid "Remote media" @@ -5376,13 +5457,13 @@ msgid "" "READ_PLAYERINFO: 32 (disable get_player_names call client-side)" 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 " +"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" "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" -"LOOKUP_NODES_LIMIT: 16 (desactiva a chamada \"get_node\" no cliente para " +"LOOKUP_NODES_LIMIT: 16 (desactiva a chamada \"get_node\" no cliente para\n" "csm_restriction_noderange)\n" "READ_PLAYERINFO: 32 (desactiva a chamada \"get_player_names\" no cliente)" @@ -5458,6 +5539,11 @@ msgid "" "is maximized is stored in window_maximized.\n" "(Autosaving window_maximized only works if compiled with SDL.)" msgstr "" +"Garda o tamaño da xanela automaticamente cando se modifique.\n" +"Se está activado, o tamaño da pantalla gárdase en screen_w e screen_h, e se " +"a xanela\n" +"é maximizada gardarase en window_maximized.\n" +"(O gardado automático window_maximized só funciona se foi compilado con SDL.)" #: src/settings_translation_file.cpp msgid "Saving map received from server" @@ -5538,8 +5624,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5553,6 +5639,25 @@ 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 "" +"Escolle o método de suavización para aplicar.\n" +"\n" +"* Ningún: non hai antialiasing (predeterminado)\n" +"\n" +"* FSAA: antialiasing de pantalla completa proporcionado por hardware\n" +"(incompatible con posprocesamento e submostraxe)\n" +"A.K.A antialiasing de varias mostras (MSAA)\n" +"Suaviza os bordos do bloque pero non afecta o interior das texturas.\n" +"É necesario reiniciar para cambiar esta opción.\n" +"\n" +"* FXAA - Antialiasing aproximado rápido (require sombreadores)\n" +"Aplica un filtro de posprocesamento para detectar e suavizar os bordos de " +"alto contraste.\n" +"Ofrece equilibrio entre velocidade e calidade de imaxe.\n" +"\n" +"* SSAA - Antialiasing de supermostraxe (require sombreadores)\n" +"Mostra a imaxe de maior resolución da escena e, a continuación, redúcese " +"para reducir\n" +"os efectos de aliasing. Este é o método máis lento e preciso." #: src/settings_translation_file.cpp msgid "Selection box border color (R,G,B)." @@ -5597,7 +5702,7 @@ msgstr "" "6 = Conxunto 4D de Julia \"Mandy Cousin\".\n" "7 = Conxunto 4D de Mandelbrot \"Variation\".\n" "8 = Conxunto 4D de Julia \"Variation\".\n" -"9 = Conxunto 4D de Mandelbrot \"Mandelbrot/Mandelbar\".\n" +"9 = Conxunto 4D de Mandelbrot/Mandelbar\" Mandelbrot \".\n" "10 = Conxunto 3D de Julia \"Mandelbrot/Mandelbar”.\n" "11 = Conxunto 3D de Mandelbrot \"Christmas Tree\".\n" "12 = Conxunto 3D de Julia \"Christmas Tree\".\n" @@ -5609,14 +5714,12 @@ msgstr "" "18 = Conxunto 3D de Julia \"Mandelbulb\"." #: src/settings_translation_file.cpp -#, fuzzy msgid "Server" -msgstr "URL do servidor" +msgstr "Servidor" #: src/settings_translation_file.cpp -#, fuzzy msgid "Server Gameplay" -msgstr "Nome do servidor" +msgstr "Xogo do servidor" #: src/settings_translation_file.cpp msgid "Server Security" @@ -5643,9 +5746,8 @@ msgid "Server port" msgstr "Porto do servidor" #: src/settings_translation_file.cpp -#, fuzzy msgid "Server-side occlusion culling" -msgstr "Determinar bloques invisibles do lado do servidor" +msgstr "Ocultación de oclusión no lado do servidor" #: src/settings_translation_file.cpp msgid "Server/Env Performance" @@ -5656,24 +5758,22 @@ msgid "Serverlist URL" msgstr "URL da lista de servidores" #: src/settings_translation_file.cpp -#, fuzzy msgid "Serverlist and MOTD" -msgstr "URL da lista de servidores" +msgstr "Lista de servidores e Mensaxe do Día (MOTD)" #: src/settings_translation_file.cpp msgid "Serverlist file" msgstr "Ficheiro da lista de servidores" #: src/settings_translation_file.cpp -#, fuzzy 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 "" -"Establece a inclinación da órbita Sol/Lúa en graos.\n" -"O valor de 0 é sen inclinación/órbita vertical.\n" -"Valor mínimo: 0,0; valor máximo: 60,0" +"Establecer a inclinación predeterminada da órbita do Sol/Lúa en graos.\n" +"Os xogos poden cambiar a inclinación da órbita a través da API.\n" +"Un valor de 0 significa sen inclinación / órbita vertical." #: src/settings_translation_file.cpp msgid "" @@ -5681,80 +5781,77 @@ msgid "" "Value of 0.0 (default) means no exposure compensation.\n" "Range: from -1 to 1.0" msgstr "" +"Axusta a compensación de exposición en unidades EV.\n" +"O valor de 0.0 (predeterminado) significa que non hai compensación de " +"exposición.\n" +"Rango: de -1 a 1.0" #: src/settings_translation_file.cpp msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" -"Establece o idioma. Deixa o campo baleiro para usar o idioma do sistema.\n" -"É necesario reiniciar despois de cambiar isto." +"Establece o idioma. Por defecto, utilízase o idioma do sistema.\n" +"É preciso reiniciar despois de cambiar isto." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Set the maximum length of a chat message (in characters) sent by clients." msgstr "" -"Establece a lonxitude máxima de caracteres dunha mensaxe de chat enviada " +"Establecer a lonxitude máxima dunha mensaxe de chat (en caracteres) enviada " "polos clientes." #: src/settings_translation_file.cpp -#, fuzzy 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 "" -"Establece a forza da sombra.\n" -"Un valor máis baixo son sombras máis claras, un valor máis alto son sombras " -"máis escuras." +"Axusta a forza gamma da sombra.\n" +"Axeita a intensidade das sombras dinámicas no xogo.\n" +"Un valor menor implica sombras máis claras, mentres que un valor maior " +"implica sombras máis escuras." #: src/settings_translation_file.cpp -#, fuzzy 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 "" -"Establece o tamaño do raio de sombras suaves.\n" -"Os valores máis baixos son sombras máis nítidas, os valores maiores " -"significan son máis suaves.\n" -"Valor mínimo: 1,0; valor máximo: 10,0" +"Establece o tamaño do radio das sombras suaves.\n" +"Os valores máis baixos significan sombras máis nítidas, valores maiores " +"significan sombras máis suaves.\n" +"Valor mínimo: 1,0; valor máximo: 15,0" #: src/settings_translation_file.cpp -#, fuzzy msgid "Set to true to enable Shadow Mapping." -msgstr "" -"Establece o valor verdadeiro para activar o mapeado de sombras.\n" -"É necesario que os sombreadores estean activados." +msgstr "Pon a verdadeiro para activar o Mapeado de Sombras." #: src/settings_translation_file.cpp msgid "" "Set to true to enable bloom effect.\n" "Bright colors will bleed over the neighboring objects." msgstr "" +"Estableza a verdadeiro para activar o efecto de resplandor.\n" +"As cores brillantes difundiranse sobre os obxectos veciños." + +#: src/settings_translation_file.cpp +msgid "Set to true to enable volumetric lighting effect (a.k.a. \"Godrays\")." +msgstr "" +"Establece a verdadeiro para habilitar o efecto de iluminación volumétrica (" +"alcume 'raios de Deus')." #: src/settings_translation_file.cpp -#, fuzzy msgid "Set to true to enable waving leaves." -msgstr "" -"Establece o valor verdadeiro para activar o movemento das follas.\n" -"É necesario que os sombreadores estean activados." +msgstr "Pon a verdadeiro para activar o movemento das follas." #: src/settings_translation_file.cpp -#, fuzzy msgid "Set to true to enable waving liquids (like water)." -msgstr "" -"Establece o valor verdadeiro para activar o movemento dos líquidos (auga, " -"por exemplo).\n" -"É necesario que os sombreadores estean activados." +msgstr "Pon a verdadeiro para activar o movemento dos líquidos (como a auga)." #: src/settings_translation_file.cpp -#, fuzzy msgid "Set to true to enable waving plants." -msgstr "" -"Establece o valor verdadeiro para activar o movemento das plantas.\n" -"É necesario que os sombreadores estean activados." +msgstr "Pon a verdadeiro para activar o movemento das plantas." #: src/settings_translation_file.cpp msgid "" @@ -5763,6 +5860,12 @@ msgid "" "top-left - processed base image, top-right - final image\n" "bottom-left - raw base image, bottom-right - bloom texture." msgstr "" +"Establecer verdadeiro para renderizar a descomposición de depuración do " +"efecto de resplandor.\n" +"No modo de depuración, a pantalla divídese en 4 cuadrantes:\n" +"arriba á esquerda - imaxe base procesada, arriba á dereita - imaxe final\n" +"abaixo á esquerda - imaxe base en bruto, abaixo á dereita - textura de " +"resplandor." #: src/settings_translation_file.cpp msgid "" @@ -5786,13 +5889,11 @@ msgstr "Sombreadores" msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" "Os sombreadores permiten efectos visuais avanzados e poden aumentar o " "rendemento nalgunhas\n" -"tarxetas de vídeo.\n" -"Isto só funciona con o modo de vídeo OpenGL." +"tarxetas gráficas." #: src/settings_translation_file.cpp msgid "Shadow filter quality" @@ -5819,9 +5920,8 @@ msgstr "" "sombra." #: src/settings_translation_file.cpp -#, fuzzy msgid "Shadow strength gamma" -msgstr "Intensidade da sombra" +msgstr "Factor de intensidade de sombra gamma" #: src/settings_translation_file.cpp msgid "Show debug info" @@ -5855,9 +5955,14 @@ msgid "" "draw calls, benefiting especially high-end GPUs.\n" "Systems with a low-end GPU (or no GPU) would benefit from smaller values." msgstr "" +"Longo do lado dun cubo de bloques de mapa co cliente considerará xuntos\n" +"ao xerar as mallas.\n" +"Valores maiores aumentan a utilización da GPU ao reducir o número de\n" +"chamadas de debuxo, beneficiando especialmente as GPUs de alta gama.\n" +"Sistemas con GPUs de baixo rendemento (ou sen GPU) beneficiarían de valores " +"máis pequenos." #: src/settings_translation_file.cpp -#, fuzzy 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" @@ -5866,22 +5971,13 @@ msgid "" "Altering this value is for special usage, leaving it unchanged is\n" "recommended." msgstr "" -"Tamaño dos chunks que creou o xerador de terreos, indicado en bloques (16 " -"nós).\n" -"AVISO!: Non hai ningún beneficio, e hai varios perigos, ao\n" -"aumentar este valor por riba de 5.\n" -"Reducir este valor aumenta a densidade de covas e calabozos.\n" -"Modificar este valor é para uso especial. Recoméndase non modificalo." - -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" -"Tamaño da caché do xerador de terreos do xerador de malla. Isto fai que\n" -"aumentae o % de acertos da caché, reducindo os datos que se copian do fío\n" -"principal, reducindo así a fluctuación." +"Tamaño dos bloques de mapa (mapchunks) xerados polo xerador de mapas, " +"expresado en bloques de mapa (16 nodos)\n" +"AVISO: Non hai beneficio, e hai varios perigos, en\n" +"aumentar este valor por enriba de 5.\n" +"Reducir este valor aumenta a densidade de covas e alxubes.\n" +"Modificar este valor é para uso especial; recoméndase\n" +"deixalo sen cambios." #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" @@ -5918,18 +6014,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 Change Keys." -msgstr "Suaviza a rotación da cámara en modo cinemático. 0 para desactivar." +"cinematic mode by using the key set in Controls." +msgstr "" +"Suaviza a rotación da cámara cando está en modo cinemático, 0 para " +"desactivar. Entra no modo cinemático usando a tecla establecida en Controis." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Smooths rotation of camera, also called look or mouse smoothing. 0 to " "disable." -msgstr "Suaviza a rotación da cámara en modo cinemático. 0 para desactivar." +msgstr "" +"Suaviza a rotación da cámara, tamén coñecido como suavizado de vista ou " +"rato. 0 para desactivar." #: src/settings_translation_file.cpp msgid "Sneaking speed" @@ -5943,6 +6041,14 @@ msgstr "Velocidade ao se agachar, en nós por segundo." msgid "Soft shadow radius" msgstr "Radio das sombras suaves" +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "Son" + +#: src/settings_translation_file.cpp +msgid "Sound Extensions Blacklist" +msgstr "Lista negra de extensións de son" + #: src/settings_translation_file.cpp msgid "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -5967,7 +6073,6 @@ msgstr "" "que agrupar algúns (ou todos) os obxectos." #: 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" @@ -5976,8 +6081,8 @@ msgid "" msgstr "" "Distribuír unha actualización completa do mapa de sombras sobre unha " "determinada cantidade de fotogramas.\n" -"Os valores máis altos poden facer que as sombras sexan latentes e os valores " -"máis baixos\n" +"Os valores máis altos poden facer cas sombras sexan lentas e os valores máis " +"baixos\n" "consumirán máis recursos.\n" "Valor mínimo: 1; Valor máximo 16" @@ -5992,7 +6097,6 @@ msgstr "" "A desviación estándar da curva de luz gaussiana aumenta." #: src/settings_translation_file.cpp -#, fuzzy msgid "Static spawn point" msgstr "Punto de aparición estático" @@ -6031,7 +6135,6 @@ msgid "Strip color codes" msgstr "Eliminar códigos de cores" #: src/settings_translation_file.cpp -#, fuzzy 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" @@ -6046,9 +6149,9 @@ msgid "" msgstr "" "Nivel superficial de auga opcional colocado sobre unha capa sólida de terreo " "flotante.\n" -"A auga está desactivada por defecto e só se colocará se se establece este " -"valor\n" -"arriba 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (o inicio do\n" +"A auga está desactivada por defecto e só se colocará se este valor está por " +"enriba\n" +"de 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (o inicio do\n" "afilamento superior).\n" "***ADVERTENCIA, PERIGO POTENCIAL PARA OS MUNDOS E O RENDEMENTO DO " "SERVIDOR***:\n" @@ -6057,9 +6160,9 @@ msgstr "" "para ser unha capa sólida configurando 'mgv7_floatland_density' en 2.0 (ou " "outro\n" "valor necesario en función de 'mgv7_np_floatland'), para evitar\n" -"fluxo de auga extremo intensivo en servidores e evitar grandes inundacións " -"do\n" -"superficie do mundo abaixo." +"un fluxo de auga extremo intensivo en servidores e evitar grandes " +"inundacións da\n" +"superficie do mundo por abaixo." #: src/settings_translation_file.cpp msgid "Synchronous SQLite" @@ -6159,25 +6262,53 @@ msgstr "" "ao chamar a `/profiler save [format]` sen formato." #: src/settings_translation_file.cpp -#, fuzzy +msgid "" +"The delay in milliseconds after which a touch interaction is considered a " +"long tap." +msgstr "" +"O retraso en milisegundos despois do cal unha interacción táctil se " +"considera un toque prolongado." + +#: src/settings_translation_file.cpp msgid "" "The file path relative to your world path in which profiles will be saved to." msgstr "" -"O camiño do ficheiro relativa ao camiño do mundo no que se gardarán os " -"perfís." +"O camiño do ficheiro relativa ao camiño do mundo onde se gardarán os perfís." + +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" +"O xesto para golpear xogadores/entidades.\n" +"Isto pode ser anulado por xogos e modificacións.\n" +"\n" +"* toque_curto\n" +"Fácil de usar e coñecido doutros xogos que non deben ser nomeados.\n" +"\n" +"* toque_longo\n" +"Coñecido polos controis móbiles clásicos de Minetest.\n" +"O combate é máis ou menos imposible." #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "O identificador do joystick que se vai utilizar" #: src/settings_translation_file.cpp -#, fuzzy -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" -"A lonxitude en píxeles que tarda en iniciar a interacción da pantalla táctil." +"A lonxitude en píxeles despois da cal unha interacción táctil se considera " +"movemento." #: 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" @@ -6185,10 +6316,18 @@ msgid "" "Default is 1.0 (1/2 node)." msgstr "" "Altura máxima da superficie de líquidos con ondas.\n" -"4.0 = Altura da onda é dous nós.\n" -"0.0 = A onda non se move.\n" -"Por defecto é 1.0 (medio nó).\n" -"É necesario activar os líquidos con ondas." +"4.0 = A altura da onda é de dous nodos.\n" +"0.0 = A onda non se move en absoluto.\n" +"O valor por defecto é 1.0 (1/2 nodo)." + +#: src/settings_translation_file.cpp +msgid "" +"The minimum time in seconds it takes between digging nodes when holding\n" +"the dig button." +msgstr "" +"O tempo mínimo en segundos que se necesita entre escavar nodos cando se " +"mantén premido\n" +"o botón de escavación." #: src/settings_translation_file.cpp msgid "The network interface that the server listens on." @@ -6221,20 +6360,16 @@ 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.\n" -"Shaders are supported by OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" -"O motor de renderizado.\n" -"É necesario un reinicio logo de cambiar isto.\n" -"Nota: en Android, segue con OGLES1 se non está seguro. A aplicación pode non " -"iniciarse doutro xeito.\n" -"Noutras plataformas recoméndase OpenGL.\n" -"Os sombreadores son compatibles con OpenGL (só para escritorio) e OGLES2 " -"(experimental)" +"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." #: src/settings_translation_file.cpp msgid "" @@ -6300,21 +6435,25 @@ msgid "The type of joystick" msgstr "O tipo de joystick" #: src/settings_translation_file.cpp -#, fuzzy 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 "" -"A distancia vertical sobre a que a calor cae 20 se é 'altitude_chill'\n" -"activado. Tamén a distancia vertical na que a humidade cae 10 se\n" -"'altitude_dry' está activado." +"A distancia vertical sobre a cal a temperatura cae en 20 se 'altitude_chill' " +"está\n" +"habilitado. Tamén a distancia vertical sobre a cal a humidade cae en 10 se\n" +"'altitude_dry' está habilitado." #: src/settings_translation_file.cpp msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "" "Terceiro de 4 ruídos 2D que xuntos definen a altura de outeiros/montañas." +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "Limiar para golpes longos" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -6336,11 +6475,10 @@ msgid "Time speed" msgstr "Velocidade do tempo" #: src/settings_translation_file.cpp -#, fuzzy msgid "Timeout for client to remove unused map data from memory, in seconds." msgstr "" -"Tempo de espera para que o cliente elimine os datos do mapa non utilizados " -"da memoria." +"Tempo limite para que o cliente elimine os datos do mapa non utilizados da " +"memoria, en segundos." #: src/settings_translation_file.cpp msgid "" @@ -6359,32 +6497,28 @@ msgid "Tooltip delay" msgstr "Atraso da información sobre ferramentas" #: src/settings_translation_file.cpp -#, fuzzy msgid "Touchscreen" -msgstr "Límite da pantalla táctil" +msgstr "Pantalla táctil" #: src/settings_translation_file.cpp -#, fuzzy msgid "Touchscreen sensitivity" -msgstr "Sensibilidade do rato" +msgstr "Sensibilidade da pantalla táctil" #: src/settings_translation_file.cpp -#, fuzzy msgid "Touchscreen sensitivity multiplier." -msgstr "Multiplicador da sensibilidade do rato." - -#: src/settings_translation_file.cpp -#, fuzzy -msgid "Touchscreen threshold" -msgstr "Límite da pantalla táctil" +msgstr "Multiplicador de sensibilidade da pantalla táctil." #: src/settings_translation_file.cpp msgid "Tradeoffs for performance" msgstr "Compensacións para o rendemento" +#: src/settings_translation_file.cpp +msgid "Translucent liquids" +msgstr "Líquidos translúcidos" + #: src/settings_translation_file.cpp msgid "Transparency Sorting Distance" -msgstr "" +msgstr "Distancia de ordenación de transparencias" #: src/settings_translation_file.cpp msgid "Trees noise" @@ -6417,11 +6551,23 @@ msgid "" "\n" "This setting should only be changed if you have performance problems." msgstr "" +"Tipo de eliminador de ocultación\n" +"\n" +"\"loops\" é o algoritmo legado con bucles anidados e complexidade O(n³)\n" +"\"bfs\" é o novo algoritmo baseado en busca en anchura (breadth-first-search)" +" e eliminación de caras laterais.\n" +"\n" +"Esta configuración só debe ser cambiada se tes problemas de rendemento." #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 "" +"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." #: src/settings_translation_file.cpp msgid "URL to the server list displayed in the Multiplayer Tab." @@ -6456,7 +6602,7 @@ msgstr "Eliminar datos do servidor non utilizados" #: src/settings_translation_file.cpp msgid "Update information URL" -msgstr "" +msgstr "Enderezo de información de actualización" #: src/settings_translation_file.cpp msgid "Upper Y limit of dungeons." @@ -6475,36 +6621,35 @@ msgid "Use a cloud animation for the main menu background." msgstr "Usa unha animación de nube para o fondo do menú principal." #: src/settings_translation_file.cpp -#, fuzzy msgid "Use anisotropic filtering when looking at textures from an angle." -msgstr "Usa o filtro anisótropo ao ver texturas desde un ángulo." +msgstr "Usar filtrado anisotrópico ao observar texturas desde un ángulo." #: src/settings_translation_file.cpp -#, fuzzy msgid "Use bilinear filtering when scaling textures." -msgstr "Usa o filtro trilineal ao escalar texturas." +msgstr "Usar filtrado bilineal ao escalar texturas." #: src/settings_translation_file.cpp msgid "Use crosshair for touch screen" -msgstr "" +msgstr "Usar retículo para pantalla táctil" #: 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 "" +"Usar retículo para seleccionar obxectos en vez de toda a pantalla.\n" +"Se está activado, mostrarase un retículo que se utilizará para seleccionar " +"obxectos." #: src/settings_translation_file.cpp -#, fuzzy 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 "" -"Usa o mipmapping para escalar texturas. Pode aumentar lixeiramente o " -"rendemento,\n" -"sobre todo cando se usa un paquete de texturas de alta resolución.\n" -"Non se admite a redución de escala correcta gamma." +"Usar mipmaps ao escalar texturas. Pode aumentar lixeramente o rendemento,\n" +"especialmente cando se usa un paquete de texturas de alta resolución.\n" +"O escalado correcto de gamma non está soportado." #: src/settings_translation_file.cpp msgid "" @@ -6512,6 +6657,9 @@ msgid "" "This flag enables use of raytraced occlusion culling test for\n" "client mesh sizes smaller than 4x4x4 map blocks." msgstr "" +"Usar eliminación de ocultación por raios no novo eliminador.\n" +"Esta bandeira permite o uso de proba de eliminación de ocultación por raios\n" +"para tamaños de malla do cliente menores de 4x4x4 bloques de mapa." #: src/settings_translation_file.cpp msgid "" @@ -6519,29 +6667,27 @@ msgid "" "If both bilinear and trilinear filtering are enabled, trilinear filtering\n" "is applied." msgstr "" +"Usar filtrado trilineal ao escalar texturas.\n" +"Se están activados tanto o filtrado bilineal como o filtrado trilineal,\n" +"aplicarase o filtrado trilineal.." #: 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) Use o joystick virtual para activar o botón \"Aux1\".\n" -"Se está activado, o joystick virtual tamén tocará o botón \"Aux1\" cando " -"estea fóra do círculo principal." +"Usar a panca de xogos ( joystick) virtual para activar o botón \"Aux1\".\n" +"Se está activado, a panca de xogos virtual tamén tocará o botón \"Aux1\" " +"cando estea fóra do círculo principal." #: src/settings_translation_file.cpp msgid "User Interfaces" msgstr "Interfaces de usuario" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "VBO" - #: src/settings_translation_file.cpp msgid "VSync" -msgstr "Sincronizaión vertical" +msgstr "Sincronización vertical" #: src/settings_translation_file.cpp msgid "Valley depth" @@ -6605,6 +6751,8 @@ msgid "" "Vertical screen synchronization. Your system may still force VSync on even " "if this is disabled." msgstr "" +"Sincronización vertical da pantalla. O teu sistema pode forzar a " +"sincronización vertical aínda que isto estea desactivado." #: src/settings_translation_file.cpp msgid "Video driver" @@ -6630,6 +6778,10 @@ msgstr "O joystick virtual activa o botón Aux1" msgid "Volume" msgstr "Volume" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +msgstr "Multiplicador de volume cando a xanela non está en foco." + #: src/settings_translation_file.cpp msgid "" "Volume of all sounds.\n" @@ -6638,6 +6790,14 @@ msgstr "" "Todos os sons.\n" "É necesario que o son do sistema estea activado." +#: src/settings_translation_file.cpp +msgid "Volume when unfocused" +msgstr "Volume en segundo plano" + +#: src/settings_translation_file.cpp +msgid "Volumetric lighting" +msgstr "Iluminación volumétrica" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6777,7 +6937,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Whether the window is maximized." -msgstr "" +msgstr "Se a xanela está maximizada." #: src/settings_translation_file.cpp msgid "" @@ -6813,11 +6973,8 @@ msgstr "" "mesmo)." #: src/settings_translation_file.cpp -#, fuzzy msgid "Width component of the initial window size." -msgstr "" -"Componente de largura do tamaño inicial da xanela. Ignórase en pantalla " -"completa." +msgstr "Componente de anchura do tamaño inicial da xanela." #: src/settings_translation_file.cpp msgid "Width of the selection box lines around nodes." @@ -6825,7 +6982,7 @@ msgstr "Largura das liñas do bloque de selección arredor dos nós." #: src/settings_translation_file.cpp msgid "Window maximized" -msgstr "" +msgstr "Xanela maximizada" #: src/settings_translation_file.cpp msgid "" @@ -6945,6 +7102,12 @@ msgstr "Límite paralelo de cURL" #~ msgid "(game support required)" #~ msgstr "(soporte de xogo requirido)" +#~ msgid "- Address: " +#~ msgstr "- Enderezo: " + +#~ msgid "- Port: " +#~ msgstr "- Porto: " + #~ msgid "2x" #~ msgstr "2x" @@ -6973,6 +7136,13 @@ msgstr "Límite paralelo de cURL" #~ "Teña en conta que o campo de enderezo do menú principal anula esta " #~ "configuración." +#~ msgid "" +#~ "Adjust dpi configuration to your screen (non X11/Android only) e.g. for " +#~ "4k screens." +#~ msgstr "" +#~ "Axusta a configuración de ppp á túa pantalla (no X11/Android non) p. ex. " +#~ "para pantallas 4K." + #~ msgid "All Settings" #~ msgstr "Toda a configuración" @@ -6998,6 +7168,9 @@ msgstr "Límite paralelo de cURL" #~ msgid "Biome API noise parameters" #~ msgstr "Parámetros de ruído de humidade e temperatura da API de bioma" +#~ msgid "Block bounds shown for all blocks" +#~ msgstr "Límites de bloque mostrados para todos os bloques" + #~ msgid "" #~ "Camera 'near clipping plane' distance in nodes, between 0 and 0.25\n" #~ "Only works on GLES platforms. Most users will not need to change this.\n" @@ -7013,6 +7186,9 @@ msgstr "Límite paralelo de cURL" #~ msgid "Camera update toggle key" #~ msgstr "Alt. actualización de cámara" +#~ msgid "Change Keys" +#~ msgstr "Configurar teclas" + #, fuzzy #~ msgid "Change keys" #~ msgstr "Configurar teclas" @@ -7054,9 +7230,44 @@ msgstr "Límite paralelo de cURL" #~ msgid "Controls sinking speed in liquid." #~ msgstr "Controla a velocidade de afundimento en líquidos." +#, fuzzy, c-format +#~ msgid "" +#~ "Controls:\n" +#~ "- %s: move forwards\n" +#~ "- %s: move backwards\n" +#~ "- %s: move left\n" +#~ "- %s: move right\n" +#~ "- %s: jump/climb up\n" +#~ "- %s: dig/punch/use\n" +#~ "- %s: place/use\n" +#~ "- %s: sneak/climb down\n" +#~ "- %s: drop item\n" +#~ "- %s: inventory\n" +#~ "- Mouse: turn/look\n" +#~ "- Mouse wheel: select item\n" +#~ "- %s: chat\n" +#~ msgstr "" +#~ "Controis:\n" +#~ "- %s: ir cara adiante\n" +#~ "- %s: ir cara atrás\n" +#~ "- %s: ir cara esquerda\n" +#~ "- %s: ir cara dereita\n" +#~ "- %s: saltar/escalar\n" +#~ "- %s: romper bloque/golpear\n" +#~ "- %s: colocar/usar\n" +#~ "- %s: agacharse/abaxaise\n" +#~ "- %s: soltar obxecto\n" +#~ "- %s: inventario\n" +#~ "- Rato: virarse/ver\n" +#~ "- Roda do rato: seleccionar obxecto\n" +#~ "- %s: chat\n" + #~ msgid "Creative" #~ msgstr "Creativo" +#~ msgid "DPI" +#~ msgstr "DPI" + #~ msgid "Damage" #~ msgstr "Dano" @@ -7109,6 +7320,13 @@ msgstr "Límite paralelo de cURL" #~ msgid "Enable register confirmation" #~ msgstr "Activar confirmación de rexistro" +#~ msgid "" +#~ "Enable vertex buffer objects.\n" +#~ "This should greatly improve graphics performance." +#~ msgstr "" +#~ "Activar os objectos buffer de vértice.\n" +#~ "Isto debería mellorar muito o rendimento gráfico." + #~ msgid "Enabled" #~ msgstr "Activado" @@ -7335,6 +7553,9 @@ msgstr "Límite paralelo de cURL" #~ msgid "Instrumentation" #~ msgstr "Instrumentación" +#~ msgid "Invalid gamespec." +#~ msgstr "Especificación do xogo non válida." + #~ msgid "Inventory key" #~ msgstr "Tecla de inventario" @@ -8011,6 +8232,14 @@ msgstr "Límite paralelo de cURL" #~ "Lonxitude das ondas de líquidos.\n" #~ "É necesario que a ondulación dos líquidos estea activa." +#~ msgid "Makes all liquids opaque" +#~ msgstr "Fai que todos os líquidos sexan opacos" + +#~ msgid "Mapblock mesh generator's MapBlock cache size in MB" +#~ msgstr "" +#~ "Tamaño da caché do mapa de bloques do xerador da malla do mapa de bloques " +#~ "en MB" + #~ msgid "Menus" #~ msgstr "Menús" @@ -8148,15 +8377,22 @@ msgstr "Límite paralelo de cURL" #~ msgid "Simple Leaves" #~ msgstr "Follas simples" +#~ msgid "" +#~ "Size of the MapBlock cache of the mesh generator. Increasing this will\n" +#~ "increase the cache hit %, reducing the data being copied from the main\n" +#~ "thread, thus reducing jitter." +#~ msgstr "" +#~ "Tamaño da caché do xerador de terreos do xerador de malla. Isto fai que\n" +#~ "aumentae o % de acertos da caché, reducindo os datos que se copian do " +#~ "fío\n" +#~ "principal, reducindo así a fluctuación." + #~ msgid "Smooth Lighting" #~ msgstr "Iluminación suave" #~ msgid "Smooths rotation of camera. 0 to disable." #~ msgstr "Suaviza a rotación da cámara. 0 para desactivar." -#~ msgid "Sound" -#~ msgstr "Son" - #~ msgid "Texture path" #~ msgstr "Camiño dos packs de textura" @@ -8190,6 +8426,10 @@ msgstr "Límite paralelo de cURL" #~ msgid "Touch threshold (px):" #~ msgstr "Nivel de sensibilidade ao toque (px):" +#, fuzzy +#~ msgid "Touchscreen threshold" +#~ msgstr "Límite da pantalla táctil" + #~ msgid "Trilinear Filter" #~ msgstr "Filtro trilineal" @@ -8229,6 +8469,9 @@ msgstr "Límite paralelo de cURL" #~ "Se se establece en 0, MSAA está desactivado.\n" #~ "É necesario reiniciar logo de cambiar esta opción." +#~ msgid "VBO" +#~ msgstr "VBO" + #~ msgid "Vertical screen synchronization." #~ msgstr "Sincronización de pantalla vertical." @@ -8283,8 +8526,14 @@ msgstr "Límite paralelo de cURL" #~ msgid "You died." #~ msgstr "Morreches" +#~ msgid "You have no games installed." +#~ msgstr "Non tes xogos instalados." + #~ msgid "Z" #~ msgstr "Z" #~ msgid "needs_fallback_font" #~ msgstr "no" + +#~ msgid "ok" +#~ msgstr "ok" diff --git a/po/he/minetest.po b/po/he/minetest.po index 1126b610f..d5b868d41 100644 --- a/po/he/minetest.po +++ b/po/he/minetest.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: Hebrew (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" -"PO-Revision-Date: 2021-04-17 07:27+0000\n" -"Last-Translator: Omer I.S. \n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" +"PO-Revision-Date: 2024-05-04 14:07+0000\n" +"Last-Translator: jhon game \n" "Language-Team: Hebrew \n" "Language: he\n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n > 10 && " "n % 10 == 0) ? 2 : 3));\n" -"X-Generator: Weblate 4.6-dev\n" +"X-Generator: Weblate 5.5.3\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" -msgstr "" +msgstr "נקה את תור הצ'אט" #: builtin/client/chatcommands.lua #, fuzzy @@ -79,7 +79,7 @@ msgid "Command not available: " msgstr "" #: builtin/common/chatcommands.lua -msgid "Get help for commands" +msgid "Get help for commands (-t: output in chat)" msgstr "" #: builtin/common/chatcommands.lua @@ -88,13 +88,9 @@ msgid "" msgstr "" #: builtin/common/chatcommands.lua -msgid "[all | ]" +msgid "[all | ] [-t]" msgstr "" -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" -msgstr "אישור" - #: builtin/fstk/ui.lua msgid "" msgstr "" @@ -111,6 +107,10 @@ msgstr "אירעה שגיאה:" msgid "Main menu" msgstr "תפריט ראשי" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "אישור" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "התחברות מחדש" @@ -139,19 +139,27 @@ msgstr "אנו תומכים רק בגירסה 1$ של הפרוטוקול." msgid "We support protocol versions between version $1 and $2." msgstr "אנו תומכים בגרסאות בין 1$ ל-2$ של הפרוטוקול." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "\"$1\" כבר קיים. האם תרצה להחליף אותו?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" +msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." -msgstr "התלויות $1 ו $2 יותקנו." +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "Failed to download \"$1\"" +msgstr "הורדת $1 נכשלה" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" -msgstr "$1 ליד $2" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr "הורדת $1 נכשלה" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "התקנה: סוג קובץ לא נתמך \"$1\" או שהארכיב פגום" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" @@ -159,158 +167,157 @@ msgstr "" "$1 מוריד,\n" "$2 ממתין" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." msgstr "$1 כעת בהורדה..." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "לא ניתן למצוא תלות חובה של $1." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "$1 יותקן ו $2 תלויות שידולגו." - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "כל החבילות" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "כבר מותקן" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "חזרה לתפריט הראשי" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "בסיס נתוני התוכן לא זמין כאשר מיינטסט מקומפל בלי cUrl" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "כעת בהורדה..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "משחקים" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +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 "Mods" +msgstr "שיפורים" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "לא ניתן להביא את החבילות" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "אין תוצאות" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "אין עדכונים" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "נכנס לתור" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "חבילות טקסטורה (מרקם)" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "הסרה" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "עדכון" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "עדכן הכל [$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 ו $2 יותקנו." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "$1 ליד $2" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "לא ניתן למצוא תלות חובה של $1." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "$1 יותקן ו $2 תלויות שידולגו." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "כבר מותקן" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "משחק בסיסי:" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "ביטול" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "בסיס נתוני התוכן לא זמין כאשר מיינטסט מקומפל בלי cUrl" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "תלויות:" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "כעת בהורדה..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to download \"$1\"" -msgstr "הורדת $1 נכשלה" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "הורדת $1 נכשלה" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "התקנה: סוג קובץ לא נתמך \"$1\" או שהארכיב פגום" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "משחקים" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "התקנה" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "התקנת $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "מתקין תלויות חסרות" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "כעת בטעינה..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "שיפורים" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "לא ניתן להביא את החבילות" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "אין תוצאות" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "אין עדכונים" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "לא נמצא" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "דרוס" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "אנא בדוק שמשחק הבסיס תקין." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" -msgstr "נכנס לתור" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" +msgstr "\"$1\" כבר קיים. האם תרצה להחליף אותו?" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "חבילות טקסטורה (מרקם)" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "הסרה" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "עדכון" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "עדכן הכל [$1]" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "צפה במידע נוסף בדפדפן האינטרנט" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" -msgstr "" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" +msgstr "דרוס" #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" @@ -461,11 +468,21 @@ msgstr "יצירה" msgid "Decorations" msgstr "קישוטים" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua #, fuzzy msgid "Development Test is meant for developers." msgstr "אזהרה: מצב בדיקת הפיתוח נועד למפתחים." +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "מבוכים" @@ -836,10 +853,6 @@ msgstr "" msgid "Back" msgstr "אחורה" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "שנה מקשים" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -849,7 +862,8 @@ msgstr "צ'אט" msgid "Clear" msgstr "נקה" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "" @@ -1063,6 +1077,16 @@ msgstr "התקנת $1" msgid "Install games from ContentDB" msgstr "התקנת משחק מContentDB" +#: builtin/mainmenu/tab_local.lua +msgid "Minetest 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 " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "חדש" @@ -1096,8 +1120,8 @@ msgid "Start Game" msgstr "התחלת המשחק" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." -msgstr "אין לך משחקים מותקנים." +msgid "You need to install a game before you can create a world." +msgstr "" #: builtin/mainmenu/tab_online.lua #, fuzzy @@ -1183,19 +1207,11 @@ msgstr "טוען טקסטורות..." msgid "Rebuilding shaders..." msgstr "בונה מחדש שיידרים..." -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "בעיה בחיבור (נגמר זמן ההמתנה?)" - #: src/client/clientlauncher.cpp #, fuzzy msgid "Could not find or load game: " msgstr "לא מצליח למצוא או לטעון משחק \"" -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "הגדרת משחק לא תקינה." - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "תפריט ראשי" @@ -1220,7 +1236,11 @@ msgstr "הסיסמה שניתנה לא פתחה: " msgid "Provided world path doesn't exist: " msgstr "נתיב העולם שניתן לא קיים: " -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "מדיה..." + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp msgid "" "\n" "Check debug.txt for details." @@ -1228,18 +1248,10 @@ msgstr "" "\n" "בדוק את debug.txt לפרטים נוספים." -#: src/client/game.cpp -msgid "- Address: " -msgstr "- כתובת: " - #: src/client/game.cpp msgid "- Mode: " msgstr "- מצב: " -#: src/client/game.cpp -msgid "- Port: " -msgstr "- פורט: " - #: src/client/game.cpp msgid "- Public: " msgstr "- ציבורי: " @@ -1275,10 +1287,6 @@ msgstr "תנועה קדימה אוטומטית מופעל" msgid "Block bounds hidden" msgstr "" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "" @@ -1325,6 +1333,10 @@ msgstr "סקריפטים בצד לקוח מבוטלים" msgid "Connecting to server..." msgstr "מתחבר לשרת..." +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "בעיה בחיבור (נגמר זמן ההמתנה?)" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "" @@ -1333,47 +1345,14 @@ msgstr "" msgid "Continue" msgstr "המשך" -#: src/client/game.cpp -#, fuzzy, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" -"פקדים:\n" -"- %s: כדי לזוז קדימה\n" -"- %s: כדי לזוז אחורה\n" -"- %s: כדי לזוז שמאלה\n" -"- %s: כדי לזוז ימינה\n" -"- %s: כדי לקפוץ או לטפס למעלה\n" -"- %s: כדי לחפור או לחבוט\n" -"- %s: כדי להניח או להשתמש\n" -"- %s: כדי להתכופף או לטפס למטה\n" -"- %s: כדי לזרוק פריט\n" -"- %s: כדי לפתוח את תיק החפצים\n" -"- עכבר: כדי להסתובב או להסתכל\n" -"- גלגלת העכבר: כדי לבחור פריט\n" -"- %s: כדי לפתוח את הצ׳אט\n" - #: src/client/game.cpp #, fuzzy msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1465,6 +1444,11 @@ msgstr "ערפל מבוטל" msgid "Fog enabled" msgstr "ערפל מופעל" +#: src/client/game.cpp +#, fuzzy +msgid "Fog enabled by game or mod" +msgstr "המבט מקרוב מושבת על ידי המשחק או השיפור" + #: src/client/game.cpp msgid "Game info:" msgstr "מידע על המשחק:" @@ -1485,10 +1469,6 @@ msgstr "הגדרות פריט..." msgid "KiB/s" msgstr "‏KiB/s" -#: src/client/game.cpp -msgid "Media..." -msgstr "מדיה..." - #: src/client/game.cpp msgid "MiB/s" msgstr "מגהבייט/שניה" @@ -1647,10 +1627,6 @@ msgstr "מסגרת שלדית מוצגת" msgid "Zoom currently disabled by game or mod" msgstr "המבט מקרוב מושבת על ידי המשחק או השיפור" -#: src/client/game.cpp -msgid "ok" -msgstr "אוקיי" - #: src/client/gameui.cpp #, fuzzy msgid "Chat currently disabled by game or mod" @@ -1984,6 +1960,15 @@ msgstr "מפה קטנה במצב שטח, זום x %d" msgid "Minimap in texture mode" msgstr "מפה קטנה במצב טקסטורה" +#: src/client/shader.cpp +#, fuzzy, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "הורדת $1 נכשלה" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2176,6 +2161,19 @@ msgstr "זום" msgid "press key" msgstr "לחץ מקש" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +#, fuzzy +msgid "Unable to open URL" +msgstr "הורדת $1 נכשלה" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "שנה" @@ -2209,6 +2207,7 @@ msgstr "עוצמת שמע: " #. 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 "he" @@ -2430,12 +2429,6 @@ msgstr "טווח שליחת אובייקט פעיל" msgid "Adds particles when digging a node." msgstr "הוסף חלקיקים כשחופרים בקוביה." -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "התאם את תצורת dpi למסך שלך (לא X11 / Android בלבד) למשל. למסכי 4k." - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2464,6 +2457,10 @@ msgstr "הוסף שם פריט" msgid "Advanced" msgstr "מתקדם" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2525,6 +2522,17 @@ msgstr "הוסף את שם הפריט לטיפ הכלים." msgid "Apple trees noise" 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 "Arm inertia" msgstr "אינרציה בזרוע" @@ -2542,18 +2550,37 @@ msgid "Ask to reconnect after crash" msgstr "שאל האם להתחבר מחדש לאחר קריסה" #: src/settings_translation_file.cpp +#, fuzzy 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 will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +msgstr "" +"במרחק זה השרת יעשה אופטימיזציה לאילו בלוקים נשלחים\n" +"ללקוחות.\n" +"ערכים קטנים עשויים לשפר ביצועים רבות, על חשבון גלוי\n" +"עיבוד תקלות (חלק מהבלוקים לא יועברו מתחת למים ובמערות,\n" +"כמו גם לפעמים ביבשה).\n" +"הגדרת ערך זה יותר מ- max_block_send_distance מבטלת זאת\n" +"אופטימיזציה.\n" +"מצוין במפה (16 קוביות)." + +#: src/settings_translation_file.cpp +#, fuzzy +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 "" "במרחק זה השרת יעשה אופטימיזציה לאילו בלוקים נשלחים\n" "ללקוחות.\n" @@ -2626,6 +2653,11 @@ msgstr "ביומים (צמחיה אקולוגית)" msgid "Biome noise" msgstr "רעש Biome" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Block cull optimize distance" +msgstr "אופטימיזצית שליחת בלוק" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "אופטימיזצית שליחת בלוק" @@ -2848,6 +2880,12 @@ msgstr "" msgid "Colored shadows" 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -2979,10 +3017,6 @@ msgid "" "Also controls the object crosshair color" msgstr "" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "" @@ -3032,6 +3066,19 @@ msgid "" "but also uses more resources." 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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "" @@ -3219,6 +3266,11 @@ msgstr "להפעיל הכול" msgid "Enable Bloom Debug" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Debanding" +msgstr "לאפשר חבלה" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3238,6 +3290,10 @@ msgid "" "filtering." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable Post Processing" +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "" @@ -3280,6 +3336,10 @@ msgstr "" msgid "Enable mouse wheel (scroll) for item selection in hotbar." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable random mod loading (mainly used for testing)." +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3303,6 +3363,10 @@ msgid "" "expecting." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable touchscreen" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3311,12 +3375,6 @@ msgid "" "when connecting to the server." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3346,6 +3404,19 @@ msgstr "" msgid "Enables caching of facedir rotated meshes." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -4148,9 +4219,10 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" #: src/settings_translation_file.cpp @@ -4298,10 +4370,6 @@ msgid "" "Make fog and sky colors depend on daytime (dawn/sunset) and view direction." msgstr "" -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "" @@ -4350,7 +4418,9 @@ 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." +"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 @@ -4385,10 +4455,6 @@ msgstr "" msgid "Mapblock mesh generation threads" msgstr "" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "" @@ -4636,6 +4702,10 @@ msgstr "" msgid "Minimap scan height" msgstr "" +#: src/settings_translation_file.cpp +msgid "Minimum dig repetition interval" +msgstr "" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "" @@ -4704,6 +4774,11 @@ msgstr "" msgid "Mouse sensitivity multiplier." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Movement threshold" +msgstr "סף מערות" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "" @@ -4814,10 +4889,6 @@ msgstr "" msgid "Occlusion Culling" msgstr "" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -4830,6 +4901,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "OpenGL debug" +msgstr "" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "" @@ -4940,6 +5015,15 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Protocol version minimum" +msgstr "שגיאה בגרסאות הפרוטוקול. " + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -4955,6 +5039,10 @@ msgstr "" msgid "Random input" msgstr "" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "" @@ -5145,8 +5233,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5268,7 +5356,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" @@ -5304,6 +5392,10 @@ msgid "" "Bright colors will bleed over the neighboring objects." 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 #, fuzzy msgid "Set to true to enable waving leaves." @@ -5349,8 +5441,7 @@ msgstr "שיידרים" msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" #: src/settings_translation_file.cpp @@ -5420,13 +5511,6 @@ msgid "" "recommended." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "" @@ -5462,7 +5546,7 @@ 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 Change Keys." +"cinematic mode by using the key set in Controls." msgstr "" #: src/settings_translation_file.cpp @@ -5483,6 +5567,15 @@ msgstr "" msgid "Soft shadow radius" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sound" +msgstr "שמע מושתק" + +#: src/settings_translation_file.cpp +msgid "Sound Extensions Blacklist" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -5639,17 +5732,37 @@ msgid "" "when calling `/profiler save [format]` without format." 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 "" "The file path relative to your world path in which profiles will be saved to." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "" #: src/settings_translation_file.cpp -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" #: src/settings_translation_file.cpp @@ -5660,6 +5773,12 @@ msgid "" "Default is 1.0 (1/2 node)." 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 "The network interface that the server listens on." msgstr "" @@ -5686,7 +5805,7 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" #: src/settings_translation_file.cpp @@ -5743,6 +5862,10 @@ msgstr "" msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "" +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -5790,12 +5913,11 @@ msgid "Touchscreen sensitivity multiplier." msgstr "" #: src/settings_translation_file.cpp -#, fuzzy -msgid "Touchscreen threshold" -msgstr "סף נגיעה: (px)" +msgid "Tradeoffs for performance" +msgstr "" #: src/settings_translation_file.cpp -msgid "Tradeoffs for performance" +msgid "Translucent liquids" msgstr "" #: src/settings_translation_file.cpp @@ -5833,7 +5955,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 "" #: src/settings_translation_file.cpp @@ -5935,10 +6059,6 @@ msgstr "" msgid "User Interfaces" msgstr "" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "" @@ -6026,6 +6146,10 @@ msgstr "מקש הפעלת ג'ויסטיק וירטואלי" msgid "Volume" msgstr "ווליום" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Volume of all sounds.\n" @@ -6034,6 +6158,15 @@ msgstr "" "עוצמת הקול של כל הצלילים.\n" "דורש הפעלת מערכת הקול." +#: src/settings_translation_file.cpp +msgid "Volume when unfocused" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volumetric lighting" +msgstr "הבלטת קוביות" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6273,12 +6406,18 @@ msgstr "(cURL) מגבלת זמן" msgid "cURL parallel limit" msgstr "(cURL) מגבלה לפעולות במקביל" +#~ msgid "- Address: " +#~ msgstr "- כתובת: " + #~ msgid "- Creative Mode: " #~ msgstr "- מצב יצירתי: " #~ msgid "- Damage: " #~ msgstr "- חבלה: " +#~ msgid "- Port: " +#~ msgstr "- פורט: " + #~ msgid "2x" #~ msgstr "x2" @@ -6306,6 +6445,11 @@ msgstr "(cURL) מגבלה לפעולות במקביל" #~ "השאר את זה ריק כדי להפעיל שרת מקומי.\n" #~ "שים לב ששדה הכתובת בתפריט הראשי עוקף הגדרה זו." +#~ msgid "" +#~ "Adjust dpi configuration to your screen (non X11/Android only) e.g. for " +#~ "4k screens." +#~ msgstr "התאם את תצורת dpi למסך שלך (לא X11 / Android בלבד) למשל. למסכי 4k." + #~ msgid "All Settings" #~ msgstr "כל ההגדרות" @@ -6349,6 +6493,9 @@ msgstr "(cURL) מגבלה לפעולות במקביל" #~ msgid "Camera update toggle key" #~ msgstr "מקש החלפת עדכון המצלמה" +#~ msgid "Change Keys" +#~ msgstr "שנה מקשים" + #, fuzzy #~ msgid "Change keys" #~ msgstr "שנה מקשים" @@ -6377,6 +6524,38 @@ msgstr "(cURL) מגבלה לפעולות במקביל" #~ msgid "Connected Glass" #~ msgstr "זכוכיות מחוברות" +#, fuzzy, c-format +#~ msgid "" +#~ "Controls:\n" +#~ "- %s: move forwards\n" +#~ "- %s: move backwards\n" +#~ "- %s: move left\n" +#~ "- %s: move right\n" +#~ "- %s: jump/climb up\n" +#~ "- %s: dig/punch/use\n" +#~ "- %s: place/use\n" +#~ "- %s: sneak/climb down\n" +#~ "- %s: drop item\n" +#~ "- %s: inventory\n" +#~ "- Mouse: turn/look\n" +#~ "- Mouse wheel: select item\n" +#~ "- %s: chat\n" +#~ msgstr "" +#~ "פקדים:\n" +#~ "- %s: כדי לזוז קדימה\n" +#~ "- %s: כדי לזוז אחורה\n" +#~ "- %s: כדי לזוז שמאלה\n" +#~ "- %s: כדי לזוז ימינה\n" +#~ "- %s: כדי לקפוץ או לטפס למעלה\n" +#~ "- %s: כדי לחפור או לחבוט\n" +#~ "- %s: כדי להניח או להשתמש\n" +#~ "- %s: כדי להתכופף או לטפס למטה\n" +#~ "- %s: כדי לזרוק פריט\n" +#~ "- %s: כדי לפתוח את תיק החפצים\n" +#~ "- עכבר: כדי להסתובב או להסתכל\n" +#~ "- גלגלת העכבר: כדי לבחור פריט\n" +#~ "- %s: כדי לפתוח את הצ׳אט\n" + #~ msgid "Creative" #~ msgstr "יצירתי" @@ -6443,6 +6622,9 @@ msgstr "(cURL) מגבלה לפעולות במקביל" #~ msgid "Install: file: \"$1\"" #~ msgstr "התקנה: מקובץ: \"$1\"" +#~ msgid "Invalid gamespec." +#~ msgstr "הגדרת משחק לא תקינה." + #~ msgid "Jump key" #~ msgstr "מקש הקפיצה" @@ -6474,9 +6656,6 @@ msgstr "(cURL) מגבלה לפעולות במקביל" #~ msgid "No Mipmap" #~ msgstr "בלי מיפמאפ" -#~ msgid "Node Highlighting" -#~ msgstr "הבלטת קוביות" - #~ msgid "Node Outlining" #~ msgstr "הדגשת מסגרת קוביות" @@ -6541,6 +6720,10 @@ msgstr "(cURL) מגבלה לפעולות במקביל" #~ msgid "Tone Mapping" #~ msgstr "מיפוי גוונים" +#, fuzzy +#~ msgid "Touchscreen threshold" +#~ msgstr "סף נגיעה: (px)" + #~ msgid "Trilinear Filter" #~ msgstr "פילטר תלת לינארי" @@ -6611,8 +6794,14 @@ msgstr "(cURL) מגבלה לפעולות במקביל" #~ msgid "You died." #~ msgstr "מתת" +#~ msgid "You have no games installed." +#~ msgstr "אין לך משחקים מותקנים." + #~ msgid "Z" #~ msgstr "Z" #~ msgid "needs_fallback_font" #~ msgstr "yes" + +#~ msgid "ok" +#~ msgstr "אוקיי" diff --git a/po/hi/minetest.po b/po/hi/minetest.po index 0bd7eadb9..f9d212294 100644 --- a/po/hi/minetest.po +++ b/po/hi/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" "PO-Revision-Date: 2023-11-17 00:07+0000\n" "Last-Translator: Ritwik \n" "Language-Team: Hindi ]" +#, fuzzy +msgid "[all | ] [-t]" msgstr "[सभी | ]" -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" -msgstr "ठीक है" - #: builtin/fstk/ui.lua msgid "" msgstr "<अनुपलब्ध>" @@ -105,6 +103,10 @@ msgstr "एक त्रुटि हुई :" msgid "Main menu" msgstr "मुख्य मेन्यु" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "ठीक है" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "पुनः जुड़ें" @@ -133,19 +135,27 @@ msgstr "हम केवल $1 प्रोटोकॉल संस्करण msgid "We support protocol versions between version $1 and $2." msgstr "हम $1 और $2 के बीच के प्रोटोकॉल संस्करणों से सहयोग करते हैं।" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "\"$1\" पहले से मौजूद है। क्या आप इसे अधिलेखित करना चाहेंगे?" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." -msgstr "$1 और $2 निर्भरतायें स्थापित की जायेंगी।" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "Failed to download \"$1\"" +msgstr "$1 डाउनलोड विफल" + +#: builtin/mainmenu/content/contentdb.lua +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 "संस्थापन : असमर्थित फाइल प्रकार या विकृत अभिलेख" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" @@ -153,158 +163,157 @@ msgstr "" "$1 डाउनलोड हो रहा है,\n" "$2 कतारबद्ध" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." msgstr "$1 डाउनलोड हो रहा है ..." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "$1 आवश्यक निर्भरतायें नहीं मिल सकीं।" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "$1 संस्थापित किया जायेगा, और $2 निर्भरतायें छोड़ दी जायेंगी।" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "सभी संदूक" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "पहले ही संस्थापित है" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "वापस मुख्य पृष्ठ पर जाएं" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "cURL के बिना माइनटेस्ट संकलित किये जाने के कारण ContentDB उपलब्ध नहीं है" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "डाउनलोड हो रहा है ..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "खेल" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +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 "Mods" +msgstr "माॅड" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "कोई संदूक प्राप्त नहीं किया जा सका" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "परिणाम शून्य" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "अद्यतन अनुपलब्ध" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "कतारबद्ध" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "कला संकुल" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "हटाऐं" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "अद्यतन करें" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "सब अद्यतन करें [$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 और $2 निर्भरतायें स्थापित की जायेंगी।" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "$1 आवश्यक निर्भरतायें नहीं मिल सकीं।" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "$1 संस्थापित किया जायेगा, और $2 निर्भरतायें छोड़ दी जायेंगी।" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "पहले ही संस्थापित है" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "मूल खेल :" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "रद्द करें" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "cURL के बिना माइनटेस्ट संकलित किये जाने के कारण ContentDB उपलब्ध नहीं है" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "निर्भरतायें :" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "डाउनलोड हो रहा है ..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to download \"$1\"" -msgstr "$1 डाउनलोड विफल" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "$1 डाउनलोड विफल" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "संस्थापन : असमर्थित फाइल प्रकार या विकृत अभिलेख" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "खेल" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "संस्थापित करें" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "$1 संस्थापित करें" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "अनुपस्थित निर्भरतायें संस्थापित करें" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "लोड हो रहा है ..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "माॅड" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "कोई संदूक प्राप्त नहीं किया जा सका" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "परिणाम शून्य" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "अद्यतन अनुपलब्ध" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "नहीं मिला" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "ऊपर लिखें" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "जाँच लें कि मूल खेल शुद्ध है।" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" -msgstr "कतारबद्ध" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" +msgstr "\"$1\" पहले से मौजूद है। क्या आप इसे अधिलेखित करना चाहेंगे?" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "कला संकुल" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "हटाऐं" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "अद्यतन करें" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "सब अद्यतन करें [$1]" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "वेब विचरक में अतिरिक्त जानकारी पायें" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" -msgstr "" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" +msgstr "ऊपर लिखें" #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" @@ -455,10 +464,20 @@ msgstr "बनायें" msgid "Decorations" msgstr "अलंकृतियाँ" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." msgstr "विकाशन परीक्षण विकासकों के लिये है।" +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "कालकोठरियां" @@ -832,10 +851,6 @@ msgstr "" msgid "Back" msgstr "पीछे" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "की बदलें" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -845,7 +860,8 @@ msgstr "बातें" msgid "Clear" msgstr "खाली करें" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "कंट्रोल्स" @@ -1056,6 +1072,16 @@ msgstr "एक खेल संस्थापित करें" msgid "Install games from ContentDB" msgstr "" +#: builtin/mainmenu/tab_local.lua +msgid "Minetest 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 " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "नया" @@ -1090,8 +1116,8 @@ msgid "Start Game" msgstr "खेल शुरू करें" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." -msgstr "आपके पास कोई खेल संस्थापित नहीं है।" +msgid "You need to install a game before you can create a world." +msgstr "" #: builtin/mainmenu/tab_online.lua #, fuzzy @@ -1177,19 +1203,11 @@ msgstr "कला लोड हो रही है ..." msgid "Rebuilding shaders..." msgstr "छायाएं वापस बन रहीं हैं ..." -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "कनेक्शन खराबी (समय अंत?)" - #: src/client/clientlauncher.cpp #, fuzzy msgid "Could not find or load game: " msgstr "खेल ढूंढा ना जा सका या लोड नहीं किया जा सका \"" -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "गलत गेमस्पेक कोड।" - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "मुख्य पृ़ष्ठ" @@ -1214,7 +1232,11 @@ msgstr "पासवर्ड फाईल नहीं खुला :- " msgid "Provided world path doesn't exist: " msgstr "दुनिया का फाईल पाथ नहीं है : " -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "कला एवं आवाज़ें ..." + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp msgid "" "\n" "Check debug.txt for details." @@ -1222,18 +1244,10 @@ msgstr "" "\n" "अधिक जानकारी के लिए debug.txt देखें।" -#: src/client/game.cpp -msgid "- Address: " -msgstr "- एड्रेस : " - #: src/client/game.cpp msgid "- Mode: " msgstr "- तकनीक : " -#: src/client/game.cpp -msgid "- Port: " -msgstr "- पोर्ट : " - #: src/client/game.cpp msgid "- Public: " msgstr "- सार्वजनिक : " @@ -1269,10 +1283,6 @@ msgstr "स्वचाल चालू" msgid "Block bounds hidden" msgstr "" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "" @@ -1318,6 +1328,10 @@ msgstr "क्लाइंट की तरफ से स्क्रिप् msgid "Connecting to server..." msgstr "सर्वर से कनेक्ट हुआ जा रहा है ..." +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "कनेक्शन खराबी (समय अंत?)" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "" @@ -1326,47 +1340,14 @@ msgstr "" msgid "Continue" msgstr "आगे बढ़ें" -#: src/client/game.cpp -#, fuzzy, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" -"कंट्रोल्स:\n" -"- %s : आगे बढ़ने के लिए\n" -"- %s : पीछे जाने के लिए\n" -"- %s : बाय की ओर चलें\n" -"- %s : दाएं की ओर चलें\n" -"- %s : कूदे या चढ़े\n" -"- %s : उतरे / संभल के चलें\n" -"- %s : वस्तु गिराएं\n" -"- %s : वस्तु सूची खोलें\n" -"- : माउस मुड़े देखें\n" -"- : माउस बाय : खोदें / मुक्का मारें\n" -"- : माउस दाहिने : डाले / इस्तेमाल करें\n" -"- : माउस पहिया : वस्तु चुनें\n" -"- %s : बात करने के लिए\n" - #: src/client/game.cpp #, fuzzy msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1458,6 +1439,11 @@ msgstr "कोहरा रुका हुआ" msgid "Fog enabled" msgstr "कोहरा चालू" +#: src/client/game.cpp +#, fuzzy +msgid "Fog enabled by game or mod" +msgstr "खेल या मॉड़ के वजह से इस समय ज़ूम मना है" + #: src/client/game.cpp msgid "Game info:" msgstr "खेल की जानकारी :" @@ -1478,10 +1464,6 @@ msgstr "वस्तुओं के अर्थ ..." msgid "KiB/s" msgstr "कि॰बी॰/एस॰" -#: src/client/game.cpp -msgid "Media..." -msgstr "कला एवं आवाज़ें ..." - #: src/client/game.cpp msgid "MiB/s" msgstr "एम॰ आई॰ बी॰/ एस॰" @@ -1640,10 +1622,6 @@ msgstr "डिब्बे रेखांकित" msgid "Zoom currently disabled by game or mod" msgstr "खेल या मॉड़ के वजह से इस समय ज़ूम मना है" -#: src/client/game.cpp -msgid "ok" -msgstr "ठीक है" - #: src/client/gameui.cpp #, fuzzy msgid "Chat currently disabled by game or mod" @@ -1978,6 +1956,15 @@ msgstr "छोटा नक्शा जमीन मोड, 1 गुना ज msgid "Minimap in texture mode" msgstr "छोटा नक्शा जमीन मोड, 1 गुना ज़ूम" +#: src/client/shader.cpp +#, fuzzy, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "$1 का डाऊनलोड असफल हुआ" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2170,6 +2157,19 @@ msgstr "ज़ूम" msgid "press key" msgstr "की दबाएं" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +#, fuzzy +msgid "Unable to open URL" +msgstr "$1 का डाऊनलोड असफल हुआ" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "बदलें" @@ -2203,6 +2203,7 @@ msgstr "आवाज " #. 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 "hi" @@ -2389,12 +2390,6 @@ msgstr "" msgid "Adds particles when digging a node." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2418,6 +2413,10 @@ msgstr "दुनिया का नाम" msgid "Advanced" msgstr "" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2474,6 +2473,17 @@ msgstr "" msgid "Apple trees noise" 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 "Arm inertia" msgstr "" @@ -2495,12 +2505,21 @@ msgid "" "clients.\n" "Small values potentially improve performance a lot, at the expense of " "visible\n" -"rendering glitches (some blocks will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +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 @@ -2566,6 +2585,10 @@ msgstr "जीवोम" msgid "Biome noise" msgstr "" +#: src/settings_translation_file.cpp +msgid "Block cull optimize distance" +msgstr "" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "" @@ -2781,6 +2804,12 @@ msgstr "" msgid "Colored shadows" 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -2912,10 +2941,6 @@ msgid "" "Also controls the object crosshair color" msgstr "" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "" @@ -2965,6 +2990,19 @@ msgid "" "but also uses more resources." 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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "" @@ -3151,6 +3189,11 @@ msgstr "सब सक्षम करें" msgid "Enable Bloom Debug" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Debanding" +msgstr "हानि व मृत्यु हो सकती है" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3170,6 +3213,10 @@ msgid "" "filtering." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable Post Processing" +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "" @@ -3212,6 +3259,10 @@ msgstr "" msgid "Enable mouse wheel (scroll) for item selection in hotbar." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable random mod loading (mainly used for testing)." +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3235,6 +3286,10 @@ msgid "" "expecting." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable touchscreen" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3243,12 +3298,6 @@ msgid "" "when connecting to the server." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3278,6 +3327,19 @@ msgstr "" msgid "Enables caching of facedir rotated meshes." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -4084,9 +4146,10 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" #: src/settings_translation_file.cpp @@ -4233,10 +4296,6 @@ msgid "" "Make fog and sky colors depend on daytime (dawn/sunset) and view direction." msgstr "" -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "" @@ -4285,7 +4344,9 @@ 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." +"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 @@ -4320,10 +4381,6 @@ msgstr "" msgid "Mapblock mesh generation threads" msgstr "" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "" @@ -4566,6 +4623,11 @@ msgstr "" msgid "Minimap scan height" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Minimum dig repetition interval" +msgstr "राइट क्लिक के दोहराने का समय" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "" @@ -4634,6 +4696,11 @@ msgstr "माउस संवेदनशीलता" msgid "Mouse sensitivity multiplier." msgstr "माउस संवेदनशीलता गुणक।" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Movement threshold" +msgstr "छूने की त्रिज्या : (px)" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "" @@ -4743,10 +4810,6 @@ msgstr "" msgid "Occlusion Culling" msgstr "" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -4759,6 +4822,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "OpenGL debug" +msgstr "" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "" @@ -4869,6 +4936,15 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Protocol version minimum" +msgstr "प्रोटोकॉल संस्करण बेमेल है। " + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -4884,6 +4960,10 @@ msgstr "" msgid "Random input" msgstr "" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "" @@ -5073,8 +5153,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5196,7 +5276,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" @@ -5229,6 +5309,10 @@ msgid "" "Bright colors will bleed over the neighboring objects." 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 "Set to true to enable waving leaves." msgstr "" @@ -5268,8 +5352,7 @@ msgstr "छाया बनावट" msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" #: src/settings_translation_file.cpp @@ -5339,13 +5422,6 @@ msgid "" "recommended." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "" @@ -5382,7 +5458,7 @@ msgstr "" #, fuzzy msgid "" "Smooths rotation of camera when in cinematic mode, 0 to disable. Enter " -"cinematic mode by using the key set in Change Keys." +"cinematic mode by using the key set in Controls." msgstr "सिनेमा मोड में केमरा चिकने तरीके से मुडेगा | मना करने के लिये 0." #: src/settings_translation_file.cpp @@ -5404,6 +5480,15 @@ msgstr "" msgid "Soft shadow radius" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sound" +msgstr "आवाज़ बंद" + +#: src/settings_translation_file.cpp +msgid "Sound Extensions Blacklist" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -5560,17 +5645,37 @@ msgid "" "when calling `/profiler save [format]` without format." 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 "" "The file path relative to your world path in which profiles will be saved to." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "" #: src/settings_translation_file.cpp -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" #: src/settings_translation_file.cpp @@ -5581,6 +5686,12 @@ msgid "" "Default is 1.0 (1/2 node)." 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 "The network interface that the server listens on." msgstr "" @@ -5607,7 +5718,7 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" #: src/settings_translation_file.cpp @@ -5664,6 +5775,10 @@ msgstr "" msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "" +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -5713,12 +5828,11 @@ msgid "Touchscreen sensitivity multiplier." msgstr "माउस संवेदनशीलता गुणक।" #: src/settings_translation_file.cpp -#, fuzzy -msgid "Touchscreen threshold" -msgstr "छूने की त्रिज्या : (px)" +msgid "Tradeoffs for performance" +msgstr "" #: src/settings_translation_file.cpp -msgid "Tradeoffs for performance" +msgid "Translucent liquids" msgstr "" #: src/settings_translation_file.cpp @@ -5756,7 +5870,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 "" #: src/settings_translation_file.cpp @@ -5854,10 +5970,6 @@ msgstr "" msgid "User Interfaces" msgstr "" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "" @@ -5944,12 +6056,25 @@ msgstr "" msgid "Volume" msgstr "" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +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 +#, fuzzy +msgid "Volumetric lighting" +msgstr "डिब्बें उजाले हों" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6186,12 +6311,18 @@ msgstr "" msgid "cURL parallel limit" msgstr "" +#~ msgid "- Address: " +#~ msgstr "- एड्रेस : " + #~ msgid "- Creative Mode: " #~ msgstr "- असीमित साधन " #~ msgid "- Damage: " #~ msgstr "- हानि : " +#~ msgid "- Port: " +#~ msgstr "- पोर्ट : " + #~ msgid "2x" #~ msgstr "दुग्ना" @@ -6225,6 +6356,9 @@ msgstr "" #~ msgid "Bump Mapping" #~ msgstr "टकराव मैपिंग" +#~ msgid "Change Keys" +#~ msgstr "की बदलें" + #, fuzzy #~ msgid "Change keys" #~ msgstr "की बदलें" @@ -6244,6 +6378,38 @@ msgstr "" #~ msgid "Connected Glass" #~ msgstr "जुडे शिशे" +#, fuzzy, c-format +#~ msgid "" +#~ "Controls:\n" +#~ "- %s: move forwards\n" +#~ "- %s: move backwards\n" +#~ "- %s: move left\n" +#~ "- %s: move right\n" +#~ "- %s: jump/climb up\n" +#~ "- %s: dig/punch/use\n" +#~ "- %s: place/use\n" +#~ "- %s: sneak/climb down\n" +#~ "- %s: drop item\n" +#~ "- %s: inventory\n" +#~ "- Mouse: turn/look\n" +#~ "- Mouse wheel: select item\n" +#~ "- %s: chat\n" +#~ msgstr "" +#~ "कंट्रोल्स:\n" +#~ "- %s : आगे बढ़ने के लिए\n" +#~ "- %s : पीछे जाने के लिए\n" +#~ "- %s : बाय की ओर चलें\n" +#~ "- %s : दाएं की ओर चलें\n" +#~ "- %s : कूदे या चढ़े\n" +#~ "- %s : उतरे / संभल के चलें\n" +#~ "- %s : वस्तु गिराएं\n" +#~ "- %s : वस्तु सूची खोलें\n" +#~ "- : माउस मुड़े देखें\n" +#~ "- : माउस बाय : खोदें / मुक्का मारें\n" +#~ "- : माउस दाहिने : डाले / इस्तेमाल करें\n" +#~ "- : माउस पहिया : वस्तु चुनें\n" +#~ "- %s : बात करने के लिए\n" + #~ msgid "Credits" #~ msgstr "आभार सूची" @@ -6317,6 +6483,9 @@ msgstr "" #~ msgid "Install: file: \"$1\"" #~ msgstr "इन्स्टाल : फाईल : \"$1\"" +#~ msgid "Invalid gamespec." +#~ msgstr "गलत गेमस्पेक कोड।" + #~ msgid "" #~ "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" #~ msgstr "" @@ -6361,9 +6530,6 @@ msgstr "" #~ msgid "Noclip" #~ msgstr "तरल चाल" -#~ msgid "Node Highlighting" -#~ msgstr "डिब्बें उजाले हों" - #~ msgid "Node Outlining" #~ msgstr "डिब्बों की रूपरेखा" @@ -6515,8 +6681,14 @@ msgstr "" #~ msgid "You died." #~ msgstr "आपकी मौत हो गयी" +#~ msgid "You have no games installed." +#~ msgstr "आपके पास कोई खेल संस्थापित नहीं है।" + #~ msgid "Z" #~ msgstr "जेड" #~ msgid "needs_fallback_font" #~ msgstr "yes" + +#~ msgid "ok" +#~ msgstr "ठीक है" diff --git a/po/hu/minetest.po b/po/hu/minetest.po index 78b50b80f..50ab03fed 100644 --- a/po/hu/minetest.po +++ b/po/hu/minetest.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: Hungarian (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" -"PO-Revision-Date: 2023-11-29 21:30+0000\n" -"Last-Translator: nyommer \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" "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.3-dev\n" +"X-Generator: Weblate 5.7-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -71,7 +71,8 @@ msgid "Command not available: " msgstr "A parancs nem elérhető: " #: builtin/common/chatcommands.lua -msgid "Get help for commands" +#, fuzzy +msgid "Get help for commands (-t: output in chat)" msgstr "Segítség kérése a parancsokhoz" #: builtin/common/chatcommands.lua @@ -82,13 +83,10 @@ msgstr "" "kilistázásához a '.help all' parancsot." #: builtin/common/chatcommands.lua -msgid "[all | ]" +#, fuzzy +msgid "[all | ] [-t]" msgstr "[all | ]" -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" -msgstr "OK" - #: builtin/fstk/ui.lua msgid "" msgstr "" @@ -105,6 +103,10 @@ msgstr "Hiba történt:" msgid "Main menu" msgstr "Főmenü" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "OK" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Újrakapcsolódás" @@ -133,19 +135,27 @@ msgstr "Csak $1 protokollverziót támogatjuk." msgid "We support protocol versions between version $1 and $2." msgstr "$1 és $2 közötti protokollverziókat támogatjuk." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "\"$1\" már létezik. Szeretné felülírni?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" +msgstr "Hiba \"$1\" telepítése közben: $2" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." -msgstr "$1 és $2 függőségek telepítve lesznek." +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download \"$1\"" +msgstr "$1 letöltése nem sikerült" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" -msgstr "$1 az $2-ből" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr "$1 letöltése nem sikerült" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "" +"$1 kibontása sikertelen (nem támogatott fájltípus vagy sérült archívum)" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" @@ -153,158 +163,158 @@ msgstr "" "$1 letöltése,\n" "$2 sorba állítva" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." -msgstr "$1 Letöltése…" +msgstr "$1 letöltése…" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "Ehhez szükséges függőségek nem találhatók: $1." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "$1 telepítve lesz, és $2 függőségek ki lesznek hagyva." - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "Minden csomag" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "Már telepítve" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "Vissza a főmenübe" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "A ContentDB nem elérhető, ha a Minetest cURL nélkül lett lefordítva" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "Letöltés…" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "Játékok" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +msgstr "Telepítés" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp +msgid "Loading..." +msgstr "Betöltés…" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Mods" +msgstr "Modok" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "A csomagok nem nyerhetők vissza" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "Nincs találat" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "Nincsenek frissítések" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "Sorba állítva" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "Textúracsomagok" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "A(z) $1 csomag nem található." + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "Eltávolítás" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "Frissítés" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "Összes frissítése [$1]" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "View more information in a web browser" +msgstr "További információ megtekintése böngészőben" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "You need to install a game before you can install a mod" +msgstr "Először egy játékot kell telepítened ahhoz, hogy modokat telepíthess" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 and $2 dependencies will be installed." +msgstr "$1 és $2 függőségek telepítve lesznek." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "$1 az $2-ből" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "Ehhez szükséges függőségek nem találhatók: $1." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "$1 telepítve lesz, és $2 függőségek ki lesznek hagyva." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "Már telepítve" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "Alapjáték:" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "Mégse" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "A ContentDB nem elérhető, ha a Minetest cURL nélkül lett lefordítva" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "Függőségek:" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "Letöltés…" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "Hiba \"$1\" telepítése közben: $2" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download \"$1\"" -msgstr "$1 letöltése nem sikerült" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "$1 letöltése nem sikerült" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "" -"$1 kibontása sikertelen (nem támogatott fájltípus vagy sérült archívum)" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "Játékok" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "Telepítés" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "$1 telepítése" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" -msgstr "hiányzó függőségek telepitése" +msgstr "Hiányzó függőségek telepítése" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "Betöltés…" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "Modifikációk \"Modok\"" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "A csomagok nem nyerhetők vissza" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "Nincs találat" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "Nincsenek frissítések" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "Nem található" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Please check that the base game is correct." +msgstr "Kérlek ellenőrizd, hogy az alapjáték megfelelő-e." + +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" +msgstr "\"$1\" már létezik. Szeretné felülírni?" + +#: builtin/mainmenu/content/dlg_overwrite.lua msgid "Overwrite" msgstr "Felülírás" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Please check that the base game is correct." -msgstr "Az alapjáték ellenörzése szükséges ." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" -msgstr "Sorbaállítva" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "Textúracsomagok" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "A $1 csomag nem található." - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "Eltávolítás" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "Frissítés" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "Összes frissítése [$1]" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "További információ megtekintése böngészőben" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" -msgstr "Először a játékot kell telepítened, hogy tudj modokat telepíteni" - #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" msgstr "$1 (Engedélyezve)" @@ -319,7 +329,7 @@ msgstr "$1 telepítése meghiúsult ide: $2" #: builtin/mainmenu/content/pkgmgr.lua msgid "Install: Unable to find suitable folder name for $1" -msgstr "Telepítés: nem található megfelelő mappanév ehhez: $1" +msgstr "Telepítés: nem található megfelelő mappanév $1 számára" #: builtin/mainmenu/content/pkgmgr.lua msgid "Unable to find a valid mod, modpack, or game" @@ -327,11 +337,11 @@ msgstr "Nem található érvényes mod, modcsomag vagy játék" #: builtin/mainmenu/content/pkgmgr.lua msgid "Unable to install a $1 as a $2" -msgstr "Nem lehet telepíteni $1 et $2 ként" +msgstr "$1 nem telepíthető $2 ként" #: builtin/mainmenu/content/pkgmgr.lua msgid "Unable to install a $1 as a texture pack" -msgstr "$1 textúracsomag telepítése meghiúsult" +msgstr "Egy $1 telepítése textúracsomagként meghiúsult" #: builtin/mainmenu/dlg_config_world.lua msgid "(Enabled, has error)" @@ -347,7 +357,7 @@ msgstr "Összes letiltása" #: builtin/mainmenu/dlg_config_world.lua msgid "Disable modpack" -msgstr "Modcsomag letiltása" +msgstr "Mod csomag letiltása" #: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" @@ -355,7 +365,7 @@ msgstr "Összes engedélyezése" #: builtin/mainmenu/dlg_config_world.lua msgid "Enable modpack" -msgstr "Modcsomag engedélyezése" +msgstr "Mod csomag engedélyezése" #: builtin/mainmenu/dlg_config_world.lua msgid "" @@ -387,7 +397,7 @@ msgstr "Nincsenek kötelező függőségek" #: builtin/mainmenu/dlg_config_world.lua msgid "No modpack description provided." -msgstr "Nincs elérhető modcsomag-leírás." +msgstr "Nincs elérhető mod csomag leírás." #: builtin/mainmenu/dlg_config_world.lua msgid "No optional dependencies" @@ -425,7 +435,7 @@ msgstr "Hőmérséklet-csökkenés a magassággal" #: builtin/mainmenu/dlg_create_world.lua msgid "Altitude dry" -msgstr "Páratartalomcsökkenés a magassággal" +msgstr "Páratartalom csökkenés a magassággal" #: builtin/mainmenu/dlg_create_world.lua msgid "Biome blending" @@ -451,10 +461,20 @@ msgstr "Létrehozás" msgid "Decorations" msgstr "Dekorációk" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." msgstr "A Development Test fejlesztők számára készült." +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "Tömlöcök" @@ -503,15 +523,15 @@ msgstr "" #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Mapgen" -msgstr "Térkép generálás" +msgstr "Térképgenerálás" #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Mapgen flags" -msgstr "Térképgenerátor zászlók" +msgstr "Térképgenerátor jelzői" #: builtin/mainmenu/dlg_create_world.lua msgid "Mapgen-specific flags" -msgstr "Térképgenerátor különleges zászlói" +msgstr "Térképgenerátor saját jelzői" #: builtin/mainmenu/dlg_create_world.lua msgid "Mountains" @@ -755,7 +775,7 @@ msgstr "Fájl kiválasztása" #: builtin/mainmenu/settings/components.lua msgid "Set" -msgstr "(be)állít" +msgstr "Beállít" #: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua msgid "(No description of setting given)" @@ -824,20 +844,16 @@ msgstr "könyített" #: builtin/mainmenu/settings/dlg_settings.lua msgid "(Use system language)" -msgstr "(Használd a rendszer nyelvét)" +msgstr "(Eszköz nyelve)" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Accessibility" -msgstr "Megközelíthetőség" +msgstr "Kényelmes használat" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Back" msgstr "Vissza" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "Gombok megváltoztatása" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -847,7 +863,8 @@ msgstr "Csevegés" msgid "Clear" msgstr "Törlés" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "Irányítás" @@ -861,7 +878,7 @@ msgstr "Mozgások" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Reset setting to default" -msgstr "Beállítások alaprértelmezettre lévő viszaállítása" +msgstr "Beállítások viszaállítása alapértelmezettre" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Reset setting to default ($1)" @@ -873,7 +890,7 @@ msgstr "Keresés" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Show advanced settings" -msgstr "Felsőszintű beállítások mutatása" +msgstr "Haladó beállítások mutatása" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Show technical names" @@ -893,7 +910,7 @@ msgstr "Tartalom: modok" #: builtin/mainmenu/settings/shadows_component.lua msgid "(The game will need to enable shadows as well)" -msgstr "A játéknak engedélyeznie kell az árnyékokat is)" +msgstr "(A játéknak engedélyeznie kell az árnyékokat is)" #: builtin/mainmenu/settings/shadows_component.lua msgid "Custom" @@ -930,7 +947,7 @@ msgstr "Nagyon alacsony" #: builtin/mainmenu/tab_about.lua msgid "About" -msgstr "(valami)ról/ről" +msgstr "Róla" #: builtin/mainmenu/tab_about.lua msgid "Active Contributors" @@ -950,7 +967,7 @@ msgstr "Csapat magja" #: builtin/mainmenu/tab_about.lua msgid "Irrlicht device:" -msgstr "Irrlict készülék:" +msgstr "Irrlicht készülék:" #: builtin/mainmenu/tab_about.lua msgid "Open User Data Directory" @@ -1043,7 +1060,7 @@ msgstr "Játék megosztása" #: builtin/mainmenu/tab_local.lua msgid "Host Server" -msgstr "Szerver felállítása" +msgstr "Szerver készítése" #: builtin/mainmenu/tab_local.lua msgid "Install a game" @@ -1053,6 +1070,17 @@ msgstr "Játék telepítése" msgid "Install games from ContentDB" msgstr "Játékok telepítése ContentDB-ről" +#: builtin/mainmenu/tab_local.lua +#, fuzzy +msgid "Minetest doesn't come with a game by default." +msgstr "A Minetest Game már nem települ alapból" + +#: builtin/mainmenu/tab_local.lua +msgid "" +"Minetest is a game-creation platform that allows you to play many different " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "Új" @@ -1086,8 +1114,9 @@ msgid "Start Game" msgstr "Indítás" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." -msgstr "Nincsenek játékok telepítve." +#, fuzzy +msgid "You need to install a game before you can create a world." +msgstr "Először egy játékot kell telepítened ahhoz, hogy modokat telepíthess" #: builtin/mainmenu/tab_online.lua msgid "Address" @@ -1166,18 +1195,10 @@ msgstr "Textúrák betöltése…" msgid "Rebuilding shaders..." msgstr "Árnyalók újraépítése…" -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "Kapcsolódási hiba (időtúllépés?)" - #: src/client/clientlauncher.cpp msgid "Could not find or load game: " msgstr "Nem található vagy nem betölthető a játék: " -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "Érvénytelen játékmeghatározás." - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "Főmenü" @@ -1202,7 +1223,11 @@ msgstr "A megadott jelszófájlt nem sikerült megnyitni: " msgid "Provided world path doesn't exist: " msgstr "A megadott útvonalon nem létezik világ: " -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "Tartalom..." + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp msgid "" "\n" "Check debug.txt for details." @@ -1210,18 +1235,10 @@ msgstr "" "\n" "A részletekért tekintsd meg a debug.txt fájlt." -#: src/client/game.cpp -msgid "- Address: " -msgstr "- Cím: " - #: src/client/game.cpp msgid "- Mode: " msgstr "- Mód: " -#: src/client/game.cpp -msgid "- Port: " -msgstr "- Port: " - #: src/client/game.cpp msgid "- Public: " msgstr "- Nyilvános: " @@ -1256,10 +1273,6 @@ msgstr "Önjárás engedélyezve" msgid "Block bounds hidden" msgstr "Blokkhatárok elrejtve" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "Blokkhatárok mutatása minden blokk esetén" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "Blokkhatárok mutatása az aktuális blokk esetén" @@ -1305,6 +1318,10 @@ msgstr "Kliens oldali szkriptek letiltva" msgid "Connecting to server..." msgstr "Kapcsolódás szerverhez..." +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "Kapcsolódási hiba (időtúllépés?)" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "Kapcsolat megszakadt ismeretlen okból" @@ -1314,45 +1331,13 @@ msgid "Continue" msgstr "Folytatás" #: src/client/game.cpp -#, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" -"Irányítás:\n" -"- %s: mozgás előre\n" -"- %s: mozgás hátra\n" -"- %s: mozgás balra\n" -"- %s: mozgás jobbra\n" -"- %s: ugrás/mászás\n" -"- %s: ásás/ütés/használat\n" -"- %s: letevés/használat\n" -"- %s: lopakodás/lefelé mászás\n" -"- %s: tárgy eldobása\n" -"- %s: leltár\n" -"- Egér: forgás/nézelődés\n" -"- Egérgörgő: tárgy kiválasztása\n" -"- %s: csevegés\n" - -#: src/client/game.cpp +#, fuzzy msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1444,6 +1429,11 @@ msgstr "Köd letiltva" msgid "Fog enabled" msgstr "köd engedélyezve" +#: src/client/game.cpp +#, fuzzy +msgid "Fog enabled by game or mod" +msgstr "Nagyítás letiltva (szerver, vagy mod által)" + #: src/client/game.cpp msgid "Game info:" msgstr "Játékinformációk:" @@ -1454,7 +1444,7 @@ msgstr "Játék szüneteltetve" #: src/client/game.cpp msgid "Hosting server" -msgstr "Szerver felállítása" +msgstr "Szerver készítése" #: src/client/game.cpp msgid "Item definitions..." @@ -1464,17 +1454,13 @@ msgstr "Tárgyak meghatározása…" msgid "KiB/s" msgstr "KiB/s" -#: src/client/game.cpp -msgid "Media..." -msgstr "Tartalom..." - #: src/client/game.cpp msgid "MiB/s" msgstr "MiB/s" #: src/client/game.cpp msgid "Minimap currently disabled by game or mod" -msgstr "A kistérkép letiltva (szerver, vagy mod által)" +msgstr "A kistérkép letiltva (szerver vagy mod által)" #: src/client/game.cpp msgid "Multiplayer" @@ -1629,13 +1615,9 @@ msgstr "Drótváz megjelenítése" msgid "Zoom currently disabled by game or mod" msgstr "Nagyítás letiltva (szerver, vagy mod által)" -#: src/client/game.cpp -msgid "ok" -msgstr "ok" - #: src/client/gameui.cpp msgid "Chat currently disabled by game or mod" -msgstr "A chat letiltva (szerver, vagy mod által)" +msgstr "A csevegést a játék vagy egy mod nem engedélyezi" #: src/client/gameui.cpp msgid "Chat hidden" @@ -1643,15 +1625,15 @@ msgstr "Csevegés elrejtve" #: src/client/gameui.cpp msgid "Chat shown" -msgstr "Csevegés megjelenítése" +msgstr "Csevegés látszik" #: src/client/gameui.cpp msgid "HUD hidden" -msgstr "HUD elrejtése" +msgstr "Műszerfal elrejtve" #: src/client/gameui.cpp msgid "HUD shown" -msgstr "HUD megjelenítése" +msgstr "Műszerfal látható" #: src/client/gameui.cpp msgid "Profiler hidden" @@ -1937,7 +1919,7 @@ msgstr "Nagyítási gomb" #: src/client/minimap.cpp msgid "Minimap hidden" -msgstr "Kistérkép letiltva" +msgstr "Kistérkép elrejtve" #: src/client/minimap.cpp #, c-format @@ -1947,11 +1929,20 @@ msgstr "Minimap radar módban, Nagyítás x%d" #: src/client/minimap.cpp #, c-format msgid "Minimap in surface mode, Zoom x%d" -msgstr "Kistérkép terület módban x%d" +msgstr "Kistérkép terület ódban, zoom x%d" #: src/client/minimap.cpp msgid "Minimap in texture mode" -msgstr "Kistérkép textúra módban" +msgstr "Kistérkép textúramódban" + +#: src/client/shader.cpp +#, fuzzy, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "Weblap megnyitása nem sikerült" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp @@ -2108,7 +2099,7 @@ msgstr "Lopakodás" #: src/gui/guiKeyChangeMenu.cpp msgid "Toggle HUD" -msgstr "HUD váltása" +msgstr "Műszerfal ki-be" #: src/gui/guiKeyChangeMenu.cpp msgid "Toggle chat log" @@ -2128,7 +2119,7 @@ msgstr "Köd váltása" #: src/gui/guiKeyChangeMenu.cpp msgid "Toggle minimap" -msgstr "Kistérkép váltása" +msgstr "Kistérkép ki-be" #: src/gui/guiKeyChangeMenu.cpp msgid "Toggle noclip" @@ -2146,6 +2137,19 @@ msgstr "Nagyítás" msgid "press key" msgstr "Nyomj meg egy gombot" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +#, fuzzy +msgid "Unable to open URL" +msgstr "Weblap megnyitása nem sikerült" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "Megváltoztatás" @@ -2179,6 +2183,7 @@ msgstr "Hangerő: %d%%" #. 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 "hu" @@ -2186,11 +2191,12 @@ msgstr "hu" msgid "" "Name is not registered. To create an account on this server, click 'Register'" msgstr "" -"A név nincs regisztrálva. Fiók létrehozásához kattints a Regisztrálásra" +"A név nincs regisztrálva. Fiók létrehozásához a szerveren kattints a " +"Regisztrálásra" #: src/network/clientpackethandler.cpp msgid "Name is taken. Please choose another name" -msgstr "A név már használt! Válassz egy másik nevet" +msgstr "A nevet már használja valaki. Válassz egy másik nevet" #: src/server.cpp #, c-format @@ -2323,7 +2329,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "3D noise that determines number of dungeons per mapchunk." -msgstr "3D-s zaj, amely meghatározza a tömlöcök számát egy térképdarabkánként." +msgstr "3D-s zaj, amely meghatározza a tömlöcök számát egy pályadarabkánként." #: src/settings_translation_file.cpp msgid "" @@ -2345,15 +2351,15 @@ msgstr "" "- felső-alsó: osztott képernyő fent/lent.\n" "- oldaltol-oldalig: osztott képernyő kétoldalt.\n" "- keresztnézet: bandzsítva nézendő 3d\n" -"Ne feledje, hogy az átlapolt üzemmód, igényli az árnyékolók használatát." +"Ne feledje, hogy az átlapolt üzemmód, igényli az árnyalók használatát." #: 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 "" -"Egy választott seed az új térképhez, a véletlenszerűhöz hagyd üresen.\n" -"Felül lesz írva új világ létrehozásánál a főmenüben." +"Az új pályához választott seed, ha véletlenszerűt szeretnél, hagyd üresen.\n" +"Felülíródik, ha új világot hozol létre a főmenüben." #: src/settings_translation_file.cpp msgid "A message to be displayed to all clients when the server crashes." @@ -2403,14 +2409,6 @@ msgstr "Aktív objektum küldés hatótávolsága" msgid "Adds particles when digging a node." msgstr "Részecskéket mutat a kockák ásásakor." -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" -"Dpi konfiguráció igazítása a képernyődhöz (nem X11/csak Android) pl. 4k " -"képernyőkhöz." - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2426,13 +2424,13 @@ msgid "" "Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n" "to be sure) creates a solid floatland layer." msgstr "" -"Beállítja az úszó réteg sűrűségét\n" -"Növelje az értéket a sűrűség növelése érdekében. Lehet pozitív vagy " +"Beállíja, mennyire legyen összefüggő a lebegő földek rétege.\n" +"Nagyobb értéknél nagyobb lesz az összefüggő terület. Lehet pozitív vagy " "negatív.\n" -"Érték = 0,0: 50%-a térfogata a lebegő földnek\n" -"Érték = 2,0 (magasabb is lehet az 'mgv7_np_floatland'-től függően', mindig " -"teszteljen\n" -"hogy biztos legyen benne) szilárd úszó réteget hoz létre." +"Érték = 0,0: a térfogat 50%-a lebegő föld.\n" +"Érték = 2,0 (magasabb is lehet az 'mgv7_np_floatland'-től függően, mindig " +"teszteld\n" +"a biztonság kedvéért) egybefüggő lebegő földréteget hoz létre." #: src/settings_translation_file.cpp msgid "Admin name" @@ -2442,6 +2440,10 @@ msgstr "Adminisztrátor neve" msgid "Advanced" msgstr "Haladó" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2500,16 +2502,27 @@ msgstr "Elem nevének hozzáadása az eszköztipphez." msgid "Apple trees noise" msgstr "Almafa zaj" +#: 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 "Arm inertia" -msgstr "Kar tehetetlenség" +msgstr "Karlengés" #: src/settings_translation_file.cpp msgid "" "Arm inertia, gives a more realistic movement of\n" "the arm when the camera moves." msgstr "" -"A kar tehetetlensége reálisabb mozgást biztosít\n" +"Karlengés, amely valósághűbb mozgást kölcsönöz\n" "a karnak, amikor a kamera mozog." #: src/settings_translation_file.cpp @@ -2517,18 +2530,39 @@ msgid "Ask to reconnect after crash" msgstr "Összeomlás után újracsatlakozás kérése" #: src/settings_translation_file.cpp +#, fuzzy 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 will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +msgstr "" +"Ennél a távolságnál a szerver agresszívan optimalizálja, hogy melyik " +"blokkokat\n" +"küldje a klienseknek.\n" +"Kis értékek valószínűleg sokat javítanak a teljesítményen, látható " +"megjelenítési\n" +"hibák árán. (Néhány víz alatti és barlangokban lévő blokk nem jelenik meg,\n" +"néha a felszínen lévők sem.)\n" +"Ha ez az érték nagyobb, mint a \"max_block_send_distance\", akkor nincs\n" +"optimalizáció.\n" +"A távolság blokkokban értendő (16 kocka)." + +#: src/settings_translation_file.cpp +#, fuzzy +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 "" "Ennél a távolságnál a szerver agresszívan optimalizálja, hogy melyik " "blokkokat\n" @@ -2601,13 +2635,18 @@ msgstr "Biom API" msgid "Biome noise" msgstr "Biom zaj" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Block cull optimize distance" +msgstr "Max blokk küldési távolság" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "Max blokk küldési távolság" #: src/settings_translation_file.cpp msgid "Bloom" -msgstr "Virágzik" +msgstr "Ragyogás" #: src/settings_translation_file.cpp msgid "Bloom Intensity" @@ -2619,7 +2658,7 @@ msgstr "Ragyogás sugara" #: src/settings_translation_file.cpp msgid "Bloom Strength Factor" -msgstr "Ragyogás erősség szorzó" +msgstr "Ragyogás erősségének mértéke" #: src/settings_translation_file.cpp msgid "Bobbing" @@ -2723,11 +2762,11 @@ msgstr "Parancsok" #: src/settings_translation_file.cpp msgid "Chat font size" -msgstr "Chat betűméret" +msgstr "Csevegés betűmérete" #: src/settings_translation_file.cpp msgid "Chat log level" -msgstr "Chat napló szintje" +msgstr "Csevegésnapló szintje" #: src/settings_translation_file.cpp msgid "Chat message count limit" @@ -2735,15 +2774,15 @@ msgstr "Csevegőüzenetek számának korlátozása" #: src/settings_translation_file.cpp msgid "Chat message format" -msgstr "Üzenet formátum" +msgstr "Üzenet formátuma" #: src/settings_translation_file.cpp msgid "Chat message kick threshold" -msgstr "Sivatag zajának küszöbe" +msgstr "Csevegésüzenetek kitiltási küszöbe" #: src/settings_translation_file.cpp msgid "Chat message max length" -msgstr "CSevegésüzenet maximális hossza" +msgstr "Csevegésüzenetek maximális hossza" #: src/settings_translation_file.cpp msgid "Chat weblinks" @@ -2751,7 +2790,7 @@ msgstr "Internetes linkek a csevegésben" #: src/settings_translation_file.cpp msgid "Chunk size" -msgstr "Térképdarabka (chunk) mérete" +msgstr "Pályadarabka (chunk) mérete" #: src/settings_translation_file.cpp msgid "" @@ -2817,6 +2856,12 @@ msgstr "Színezett köd" msgid "Colored shadows" msgstr "Színezett árnyékok" +#: 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -2862,7 +2907,7 @@ msgid "" "0 - least compression, fastest\n" "9 - best compression, slowest" msgstr "" -"A tömörítés foka a térképblokkok lemezre mentéséhez.\n" +"A tömörítés foka a pályablokkok lemezre mentéséhez.\n" "-1 - alapértelmezett tömörítési fok\n" "0 - legkisebb tömörítés, leggyorsabb\n" "9 - legjobb tömörítés, leglassabb" @@ -2874,7 +2919,7 @@ msgid "" "0 - least compression, fastest\n" "9 - best compression, slowest" msgstr "" -"Tömörítés foka a térképblokkok kliensnek küldéséhez.\n" +"Tömörítés foka a pályablokkok kliensnek küldéséhez.\n" "-1 - alapértelmezett tömörítési fok\n" "0 - legkisebb tömörítés, leggyorsabb\n" "9 - legjobb tömörítés, leglassabb" @@ -2893,15 +2938,15 @@ msgstr "Üvegfelületek egybeolvasztása, ha a kocka támogatja." #: src/settings_translation_file.cpp msgid "Console alpha" -msgstr "Konzol alfa" +msgstr "Konzol átlátszósága" #: src/settings_translation_file.cpp msgid "Console color" -msgstr "Konzol szín" +msgstr "Konzolszín" #: src/settings_translation_file.cpp msgid "Console height" -msgstr "Konzol magasság" +msgstr "Konzolmagasság" #: src/settings_translation_file.cpp msgid "Content Repository" @@ -2917,7 +2962,7 @@ msgstr "ContentDB egyidejű letöltések maximális száma" #: src/settings_translation_file.cpp msgid "ContentDB URL" -msgstr "TartalomDB URL" +msgstr "ContentDB URL" #: src/settings_translation_file.cpp msgid "" @@ -2986,10 +3031,6 @@ msgstr "" "Célkereszt szín (R,G,B).\n" "Az objektum célkereszt színét is állítja" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "DPI" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "Hibakeresési naplófájl méretküszöbe" @@ -3015,8 +3056,8 @@ msgid "" "Default maximum number of forceloaded mapblocks.\n" "Set this to -1 to disable the limit." msgstr "" -"Az erőltetetten betöltött térképblokkok maximális száma.\n" -"Állítsd -1-re, hogy megszűntesd a limitet." +"Az erőltetetten betöltött pályablokkok maximális száma.\n" +"Állítsd -1-re, ha nem szeretnél korlátot." #: src/settings_translation_file.cpp msgid "Default password" @@ -3044,6 +3085,25 @@ msgstr "" "Lágy árnyék effektus szimulálása PCF vagy Poisson disk eljárással,\n" "de egyéb erőforrásokat is használ." +#: 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 " +"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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" +"Régi verziójú kliensek csatlakozásának tiltása.\n" +"A régi kliensek kompatibilisek olyan értelemben, hogy nem omlanak össze ha " +"egy új verziójú\n" +"szerverhez csatlakoznak, de nem biztos, hogy támogatnak minden elvárt " +"funkciót." + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "Azokat a területeket adja meg, ahol a fák almát teremnek." @@ -3072,8 +3132,8 @@ msgid "" "Smaller values make bloom more subtle\n" "Range: from 0.01 to 1.0, default: 0.05" msgstr "" -"Meghatározza, hogy mennyire bloomozódjon a renderelt kép.\n" -"Az alacsonyabb értékek finomabb bloomot eredményeznek.\n" +"Meghatározza, hogy mennyire ragyogjon a renderelt kép.\n" +"Az alacsonyabb értékek finomabb ragyogást eredményeznek.\n" "Értékhatár: 0.01-től 1.0-ig. Alapértelmezett érték: 0.05" #: src/settings_translation_file.cpp @@ -3097,8 +3157,8 @@ msgid "" "Defines the magnitude of bloom overexposure.\n" "Range: from 0.1 to 10.0, default: 1.0" msgstr "" -"Meghatározza a bloom túlexpozíció mértékét.\n" -"Értékhetár: 0.1-től 10.0-ig. Alapértelmezett érték: 1.0" +"Meghatározza a ragyogás túlexponálásának mértékét.\n" +"Értékhatár: 0.1-től 10.0-ig. Alapértelmezett érték: 1.0" #: src/settings_translation_file.cpp msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)." @@ -3223,7 +3283,7 @@ msgstr "Az ugrás gomb kétszeri megnyomásával lehet repülés módba váltani #: src/settings_translation_file.cpp msgid "Dump the mapgen debug information." -msgstr "A térképgenerátor hibakeresési információinak kiírása." +msgstr "A pályagenerátor hibakeresési információinak kiírása." #: src/settings_translation_file.cpp msgid "Dungeon maximum Y" @@ -3243,11 +3303,16 @@ msgstr "Automatikus expozíció engedélyezése" #: src/settings_translation_file.cpp msgid "Enable Bloom" -msgstr "Bloom engedélyezése" +msgstr "Ragyogás engedélyezése" #: src/settings_translation_file.cpp msgid "Enable Bloom Debug" -msgstr "Bloom debug engedélyezése" +msgstr "Hibakeresés engedélyezése ragyogáshoz" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Debanding" +msgstr "Sérülés engedélyezése" #: src/settings_translation_file.cpp msgid "" @@ -3275,6 +3340,11 @@ msgstr "" "Igazra állítás esetén Poisson disk eljárással képez lágy árnyékokat. " "Különben a PCF szűrőt használja." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Post Processing" +msgstr "Utófeldolgozás" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "Raytraced Culling engedélyezése" @@ -3297,7 +3367,7 @@ msgid "" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" "Színes árnyékok engedélyezése.\n" -"Igaz érték esetén az áttettsző kockák színes árnyékot vetnek. " +"Igaz érték esetén az áttetsző kockák színes árnyékot vetnek. " "Erőforrásigényes." #: src/settings_translation_file.cpp @@ -3326,6 +3396,13 @@ msgid "Enable mouse wheel (scroll) for item selection in hotbar." msgstr "" "Engedélyezze az egérgörgőt (görgetést) a tárgy kiválasztásához a hotbáron." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable random mod loading (mainly used for testing)." +msgstr "" +"Véletlenszerű felhasználói bemenet engedélyezése (csak teszteléshez " +"használható)." + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3358,6 +3435,11 @@ msgstr "" "szerverhez csatlakoznak, de nem biztos, hogy támogatnak minden elvárt " "funkciót." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable touchscreen" +msgstr "Érintőképernyő" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3369,14 +3451,6 @@ msgstr "" "Ezekről jelentősen gyorsabb a média letöltése (pl. textúrák)\n" "a szerverhez történő csatlakozáskor." -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" -"Vertex buffer objektumok engedélyezése.\n" -"Ez nagyban javíthatja a grafikus teljesítményt." - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3416,6 +3490,19 @@ msgstr "Az felszerelésben lévő tárgyak animációjának engedélyezése." msgid "Enables caching of facedir rotated meshes." msgstr "Az elforgatott hálók irányának gyorsítótárazásának engedélyezése." +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -3473,7 +3560,7 @@ msgstr "Tényezőzaj" #: src/settings_translation_file.cpp msgid "Fall bobbing factor" -msgstr "Leesés utáni fejrázkódási tényező" +msgstr "Becsapódási rázkódás mértéke" #: src/settings_translation_file.cpp msgid "Fallback font path" @@ -3534,7 +3621,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Fixed map seed" -msgstr "Fix térkép seed" +msgstr "Rögzített pálya-seed" #: src/settings_translation_file.cpp msgid "Fixed virtual joystick" @@ -3607,7 +3694,7 @@ msgstr "Betűtípus árnyék átlátszósága" #: src/settings_translation_file.cpp msgid "Font size" -msgstr "Betűtípus mérete" +msgstr "Betűméret" #: src/settings_translation_file.cpp msgid "Font size divisible by" @@ -3656,9 +3743,9 @@ msgid "" "placeholders:\n" "@name, @message, @timestamp (optional)" msgstr "" -"A játékos csevegési üzeneteinek formátuma. A következő karakterláncok " -"érvényesek:\n" -"@név, @üzenet, @időbélyeg (opcionális)" +"A játékos csevegési üzeneteinek formátuma. A következő kódszavak " +"használhatók:\n" +"@name, @message, @timestamp (opcionális)" #: src/settings_translation_file.cpp msgid "Format of screenshots." @@ -3666,21 +3753,21 @@ msgstr "Képernyőmentések formátuma." #: src/settings_translation_file.cpp msgid "Formspec Full-Screen Background Color" -msgstr "Teljes képernyős Formspec panelek háttérszíne" +msgstr "Teljes képernyő háttérszíne felugró ablakoknál" #: src/settings_translation_file.cpp msgid "Formspec Full-Screen Background Opacity" -msgstr "Teljes képernyős Formspec panelek hátterének átlátszósága" +msgstr "Teljes képernyő hátterének átlátszatlansága felugró ablakoknál" #: src/settings_translation_file.cpp msgid "Formspec full-screen background color (R,G,B)." -msgstr "" -"Játékon belüli teljes képrenyős kezelőpanelek hátterének színe (R,G,B)." +msgstr "Teljes képernyő háttérszíne felugró ablakoknál (R,G,B)." #: src/settings_translation_file.cpp msgid "Formspec full-screen background opacity (between 0 and 255)." msgstr "" -"Játékon belüli csevegő konzol hátterének átlátszósága (0 és 255 között)." +"Teljes képernyő hátterének átlátszatlansága felugró ablakoknál (0 és 255 " +"között)." #: src/settings_translation_file.cpp msgid "Fourth of 4 2D noises that together define hill/mountain range height." @@ -3702,14 +3789,14 @@ msgid "" "nodes)." msgstr "" "Milyen távolságból generálódnak a blokkok a kliensek számára, " -"térképblokkokban megadva (16 kocka)." +"pályablokkokban megadva (16 kocka)." #: src/settings_translation_file.cpp msgid "" "From how far blocks are sent to clients, stated in mapblocks (16 nodes)." msgstr "" "Milyen távolságból lesznek elküldve a blokkok a kliens számára, " -"térképblokkokban megadva (16 kocka)." +"pályablokkokban megadva (16 kocka)." #: src/settings_translation_file.cpp msgid "" @@ -3719,7 +3806,7 @@ msgid "" "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 "" -"Mekkora távolságból észleljék a kliensek az objektumokat, térképblokkokban " +"Mekkora távolságból észleljék a kliensek az objektumokat, pályablokkokban " "mérve (16 kocka).\n" "\n" "Ha nagyobbra van állítva, mint az active_block_range, akkor a szervert arra " @@ -3766,10 +3853,10 @@ 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 "" -"Globális térképgenerálási jellemzők.\n" -"A Mapgen v6 térképgenerátorban a 'decorations' jelző szabályozza az összes " +"Globális pályagenerálási jellemzők.\n" +"A Mapgen v6 generátorban a 'decorations' jelző szabályozza az összes " "dekorációt,\n" -"kivéve a fákat és a dzsungelfüvet, a többi térképgenerátornál pedig az " +"kivéve a fákat és a dzsungelfüvet, a többi pályagenerátornál pedig az " "összeset." #: src/settings_translation_file.cpp @@ -3818,11 +3905,11 @@ msgstr "HTTP Modok" #: src/settings_translation_file.cpp msgid "HUD" -msgstr "HUD" +msgstr "Műszerfal" #: src/settings_translation_file.cpp msgid "HUD scaling" -msgstr "HUD (fej feletti kijelző) méretaránya" +msgstr "Műszerfal méretaránya" #: src/settings_translation_file.cpp msgid "" @@ -3951,7 +4038,7 @@ msgid "" "Higher value is smoother, but will use more RAM." msgstr "" "Mennyi ideig vár a szerver, mielőtt eltávolítja a memóriából a nem használt " -"térképblokkokat.\n" +"pályablokkokat.\n" "A magasabb érték stabilabb, de több RAM-ot használ." #: src/settings_translation_file.cpp @@ -4059,11 +4146,10 @@ msgid "" "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 "" -"Ha engedélyezve van, a szerver kiválogatja a takarásban lévő " -"térképblokkokat\n" +"Ha engedélyezve van, a szerver kiválogatja a takarásban lévő pályablokkokat\n" "a játékos szemszögének megfelelően. Ezáltal a kliensnek küldött blokkok\n" "száma 50-80%-kal csökkenthető. A klines nem kapja ezentúl a legtöbb nem\n" -"látható blokkot, emiatt a noclip mód kevésbé lesz használható." +"látható blokkot, emiatt a noclip mód kevésbé lesz hasznos." #: src/settings_translation_file.cpp msgid "" @@ -4073,7 +4159,7 @@ msgid "" msgstr "" "Ha engedélyezve van, lehelyezhetsz kockákat oda, ahol állsz (láb + " "szemmagasság).\n" -"Ez segít, ha kis területen dolgozol nodeboxokkal." +"Megkönnyíti a kijelölődobozokkal való munkát kis területen." #: src/settings_translation_file.cpp msgid "" @@ -4093,7 +4179,7 @@ msgid "" msgstr "" "Ha egy parancs végrehajtása tovább tart, mint az itt másodpercben megadott " "idő,\n" -"az időadatok hozzá lesznek fűzve a parancs visszajelző üzenetéhez" +"az időadatok hozzá lesznek fűzve a parancs visszajelző-üzenetéhez" #: src/settings_translation_file.cpp msgid "" @@ -4119,17 +4205,15 @@ msgstr "Világhibák figyelmen kívül hagyása" #: src/settings_translation_file.cpp msgid "In-game chat console background alpha (opaqueness, between 0 and 255)." -msgstr "" -"Játékon belüli csevegő konzol hátterének átlátszósága (0 és 255 között)." +msgstr "Játékon belüli csevegőpanel hátterének átlátszósága (0 és 255 között)." #: src/settings_translation_file.cpp msgid "In-game chat console background color (R,G,B)." -msgstr "Játékon belüli csevegő konzol hátterének színe (R,G,B)." +msgstr "Játékon belüli csevegőpanel hátterének színe (R,G,B)." #: src/settings_translation_file.cpp msgid "In-game chat console height, between 0.1 (10%) and 1.0 (100%)." -msgstr "" -"Játékon belüli csevegéskonzol magassága 0,1 (10%) és 1,0 (100%) között." +msgstr "Játékon belüli csevegőpanel magassága 0,1 (10%) és 1,0 (100%) között." #: src/settings_translation_file.cpp msgid "Initial vertical speed when jumping, in nodes per second." @@ -4225,7 +4309,7 @@ msgstr "" "A rekurzív függvény ismétlései.\n" "Ennek növelése növeli a finom részletek mennyiségét és\n" "növeli a feldolgozási terhelést.\n" -" 20 ismétlésnél ez a térképgeneráló hasonló terheléssel rendelkezik, mint a " +" 20 ismétlésnél ez a pályageneráló hasonló terheléssel rendelkezik, mint a " "V7." #: src/settings_translation_file.cpp @@ -4374,10 +4458,12 @@ msgstr "" "- opaque: (átlátszatlan) átlátszóság kikapcsolása" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" "A szerver jelölés hossza és az időköz, amelyen az objektumokat általában " "frissíti\n" @@ -4462,10 +4548,10 @@ msgid "" "Only mapchunks completely within the mapgen limit are generated.\n" "Value is stored per-world." msgstr "" -"A térképgenerálás határa, kockákban, mind a 6 irányban a (0, 0, 0) " -"pozíciótól kezdve.\n" -"Csak a teljesen a térképgenerálási határon belül lévő térképdarabkák " -"generálódnak le.\n" +"A pályagenerálás határa, kockákban, mind a 6 irányban a (0, 0, 0) pozíciótól " +"kezdve.\n" +"Csak a teljesen a pályagenerálási határon belül lévő pályadarabkák " +"generálódnak.\n" "Az érték világonként külön tárolódik." #: src/settings_translation_file.cpp @@ -4535,7 +4621,7 @@ msgid "" "from the bright objects.\n" "Range: from 0.1 to 8, default: 1" msgstr "" -"Logikai érték, amely szabályozza, hogy a virágzási hatás meddig terjedjen\n" +"Logikai érték, amely szabályozza, hogy a ragyogási hatás meddig terjedjen\n" "a fényes tárgyaktól.\n" "Tartomány: 0,1-8, alapértelmezett: 1" @@ -4558,33 +4644,29 @@ msgstr "" "A köd és az ég színe függjön a napszaktól (hajnal/naplemente) és a " "látószögtől." -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "Az összes folyadékot átlátszatlanná teszi" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" -msgstr "A térkép tömörítésének foka merevlemezen való tároláshoz" +msgstr "A pálya tömörítésének foka merevlemezen való tároláshoz" #: src/settings_translation_file.cpp msgid "Map Compression Level for Network Transfer" -msgstr "A térkép tömörítésének foka hálózati átvitelhez" +msgstr "A pálya tömörítésének foka hálózati átvitelhez" #: src/settings_translation_file.cpp msgid "Map directory" -msgstr "Térkép mappája" +msgstr "Pálya mappája" #: src/settings_translation_file.cpp msgid "Map generation attributes specific to Mapgen Carpathian." -msgstr "A Kárpátok térképgenerátorra vonatkozó térképgenerálási beállítások." +msgstr "A Kárpátok pályagenerátorra vonatkozó generálási beállítások." #: 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 "" -"A Lapos térképgenerátor sajátos tulajdonságai.\n" -"Alkalmanként tavak és dombok hozzáadódhatnak a lapos világhoz." +"A Lapos pályagenerátor saját generálási jellemzői.\n" +"Elszórtan tavak és dombok hozzáadhatók a lapos világhoz." #: src/settings_translation_file.cpp msgid "" @@ -4592,7 +4674,7 @@ msgid "" "'terrain' enables the generation of non-fractal terrain:\n" "ocean, islands and underground." msgstr "" -"A Fraktál térképgenerátor sajátos jellemzői.\n" +"A Fraktál pályagenerátor saját generálási jellemzői.\n" "A 'terrain' engedélyezi a nem-fraktál terep generálását,\n" "mint az óceán, szigetek és a földalatti részek." @@ -4605,7 +4687,7 @@ msgid "" "to become shallower and occasionally dry.\n" "'altitude_dry': Reduces humidity with altitude." msgstr "" -"A Völgyek térképgenerátor sajátos jellemzői.\n" +"A Völgyek pályagenerátor saját generálási jellemzői.\n" "'altitude_chill': csökkenti a hőmérsékletet a magassággal.\n" "'humid_rivers': megnöveli a páratartalmat a folyók körül.\n" "'vary_river_depth': ha engedélyezve van, az alacsony páratalom és a magas\n" @@ -4615,20 +4697,23 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Map generation attributes specific to Mapgen v5." -msgstr "A v5 térképgenerátor sajátos tulajdonságai." +msgstr "A v5 pályagenerátor saját generálási jellemzői." #: 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" "When the 'snowbiomes' flag is enabled jungles are automatically enabled and\n" -"the 'jungles' flag is ignored." +"the 'jungles' flag is ignored.\n" +"The 'temples' flag disables generation of desert temples. Normal dungeons " +"will appear instead." msgstr "" -"A v6 térképgenerátor sajátos jellemzői.\n" -"A 'snowbiomes' zászló engedélyezi az új 5 biomos rendszert.\n" -"Amikor a 'snowbiomes' zászló engedélyezett a dzsungelek automatikusan " -"engedélyezve vannak\n" -"és a 'jungles' zászló figyelmen kívül van hagyva." +"A v6 pályagenerátor saját generálási jellemzői.\n" +"A 'snowbiomes' jelölő engedélyezi az új 5 biomos rendszert.\n" +"Amikor a 'snowbiomes' jelölő engedélyezett, a dzsungelek automatikusan " +"engedélyezve lesznek\n" +"és a 'jungles' jelölő figyelmen kívül lesz hagyva." #: src/settings_translation_file.cpp msgid "" @@ -4637,106 +4722,102 @@ msgid "" "'floatlands': Floating land masses in the atmosphere.\n" "'caverns': Giant caves deep underground." msgstr "" -"Térkép generálási jellemzők csak a v7 térképgenerátor esetében.\n" +"A v7 pályagenerátor saját generálási jellemzői.\n" "'ridges': folyók.\n" "'floatlands': lebegő földtömegek a légkörben.\n" "'caverns': óriási barlangok mélyen a föld alatt." #: src/settings_translation_file.cpp msgid "Map generation limit" -msgstr "Térkép generálási korlát" +msgstr "Pályagenerálási korlát" #: src/settings_translation_file.cpp msgid "Map save interval" -msgstr "Térkép mentésének időköze" +msgstr "Pályamentés időköze" #: src/settings_translation_file.cpp msgid "Map shadows update frames" -msgstr "Árnyéktérkép frissítési idő" +msgstr "Árnyéktérkép frissítési ideje" #: src/settings_translation_file.cpp msgid "Mapblock limit" -msgstr "Térképblokk korlát" +msgstr "Pályablokk korlát" #: src/settings_translation_file.cpp msgid "Mapblock mesh generation delay" -msgstr "Térképblokk háló generálási késleltetés" +msgstr "Pályablokkrács generálási késleltetése" #: src/settings_translation_file.cpp msgid "Mapblock mesh generation threads" -msgstr "Térképblokk-hálógenerálási szálak" - -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "Térképblokk hálógenerátor MapBlock gyorsítótár mérete MB-ban" +msgstr "Pályablokkrács-generálási szálak" #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" -msgstr "Térképblokk memóriaürítésének időkorlátja" +msgstr "Pályablokk memóriaürítésének időkorlátja" #: src/settings_translation_file.cpp msgid "Mapgen Carpathian" -msgstr "Kárpátok térképgenerátor" +msgstr "Kárpátok pályagenerátor" #: src/settings_translation_file.cpp msgid "Mapgen Carpathian specific flags" -msgstr "Kárpátok térképgenerátor különleges zászlói" +msgstr "Kárpátok pályagenerátor saját jelzői" #: src/settings_translation_file.cpp msgid "Mapgen Flat" -msgstr "Lapos térképgenerátor" +msgstr "Lapos pályagenerátor" #: src/settings_translation_file.cpp msgid "Mapgen Flat specific flags" -msgstr "Lapos térképgenerátor különleges zászlói" +msgstr "Lapos pályagenerátor saját jelzői" #: src/settings_translation_file.cpp msgid "Mapgen Fractal" -msgstr "Fraktál térképgenerátor" +msgstr "Fraktál pályagenerátor" #: src/settings_translation_file.cpp msgid "Mapgen Fractal specific flags" -msgstr "Fraktál térképgenerátor domb meredekség" +msgstr "Fraktál pályagenerátor saját jelzői" #: src/settings_translation_file.cpp msgid "Mapgen V5" -msgstr "V5 térképgenerátor" +msgstr "V5 pályagenerátor" #: src/settings_translation_file.cpp msgid "Mapgen V5 specific flags" -msgstr "Lapos térképgenerátor különleges zászlók" +msgstr "V5 pályagenerátor saját jelzői" #: src/settings_translation_file.cpp msgid "Mapgen V6" -msgstr "V6 térképgenerátor" +msgstr "V6 pályagenerátor" #: src/settings_translation_file.cpp msgid "Mapgen V6 specific flags" -msgstr "V6 térképgenerátor különleges zászlói" +msgstr "V6 pályagenerátor saját jelzői" #: src/settings_translation_file.cpp msgid "Mapgen V7" -msgstr "V7 térképgenerátor" +msgstr "V7 pályagenerátor" #: src/settings_translation_file.cpp msgid "Mapgen V7 specific flags" -msgstr "V7 térképgenerátor különleges zászlói" +msgstr "V7 pályagenerátor saját jelzői" #: src/settings_translation_file.cpp msgid "Mapgen Valleys" -msgstr "Völgyek térképgenerátor" +msgstr "Völgyek pályagenerátor" #: src/settings_translation_file.cpp msgid "Mapgen Valleys specific flags" -msgstr "Völgyek térképgenerátor különleges zászlói" +msgstr "Völgyek pályagenerátor saját jelzői" #: src/settings_translation_file.cpp msgid "Mapgen debug" -msgstr "Térképgenerátor hibakereső" +msgstr "Pályagenerátor-hibakereső" #: src/settings_translation_file.cpp msgid "Mapgen name" -msgstr "Térképgenerátor neve" +msgstr "Pályagenerátor neve" #: src/settings_translation_file.cpp msgid "Max block generate distance" @@ -4781,13 +4862,13 @@ msgstr "Gyorselérési sáv maximális szélessége" #: src/settings_translation_file.cpp msgid "Maximum limit of random number of large caves per mapchunk." msgstr "" -"A véletlenszerűen egy térképdarabkára jutó nagy barlangok számának maximális " +"A véletlenszerűen egy pályadarabkára jutó nagy barlangok számának maximális " "korlátja." #: src/settings_translation_file.cpp msgid "Maximum limit of random number of small caves per mapchunk." msgstr "" -"A véletlenszerűen egy térképdarabkára jutó kis barlangok számának maximális " +"A véletlenszerűen egy pályadarabkára jutó kis barlangok számának maximális " "korlátja." #: src/settings_translation_file.cpp @@ -4843,7 +4924,7 @@ msgid "" "Maximum number of mapblocks for client to be kept in memory.\n" "Set to -1 for unlimited amount." msgstr "" -"Maximum térképblokkok száma, amit a kliens memóriában tárolhat.\n" +"Maximum pályablokkok száma, amit a kliens memóriában tárolhat.\n" "Állítsd -1-re végtelen mennyiségért." #: src/settings_translation_file.cpp @@ -4866,11 +4947,11 @@ msgstr "A megjelenítendő csevegésüzenetek maximális száma" #: src/settings_translation_file.cpp msgid "Maximum number of statically stored objects in a block." -msgstr "Statikusan tárolt objektumok maximális száma egy térképblokkban." +msgstr "Statikusan tárolt objektumok maximális száma egy pályablokkban." #: src/settings_translation_file.cpp msgid "Maximum objects per block" -msgstr "Maximum objektumok térképblokkonként" +msgstr "Objektumok maximális száma pályablokkonként" #: src/settings_translation_file.cpp msgid "" @@ -4882,7 +4963,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Maximum simultaneous block sends per client" -msgstr "Az egyidejűleg a kliensenként küldött térképblokkok maximális száma" +msgstr "Az egyidejűleg a kliensenként küldött pályablokkok maximális száma" #: src/settings_translation_file.cpp msgid "Maximum size of the outgoing chat queue" @@ -4894,7 +4975,7 @@ msgid "" "0 to disable queueing and -1 to make the queue size unlimited." msgstr "" "A kimenő üzenetek sorának maximális mérete.\n" -"0 letiltja a várolistára helyezést, míg -1 korlátlanná teszi a sor méretét." +"0 letiltja a várólistára helyezést, míg -1 korlátlanná teszi a sor méretét." #: src/settings_translation_file.cpp msgid "" @@ -4938,18 +5019,23 @@ msgstr "A naplózás csevegésbe írásának minimális szintje." #: src/settings_translation_file.cpp msgid "Minimap scan height" -msgstr "Kistérkép letapogatási magasság" +msgstr "Kistérkép-letapogatási magasság" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Minimum dig repetition interval" +msgstr "Lehelyezés-ismétlési időköz" #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "" -"A véletlenszerűen egy térképdarabkára jutó nagy barlangok számának minimális " +"A véletlenszerűen egy pályadarabkára jutó nagy barlangok számának minimális " "korlátja." #: src/settings_translation_file.cpp msgid "Minimum limit of random number of small caves per mapchunk." msgstr "" -"A véletlenszerűen egy térképdarabkára jutó kis barlangok számának minimális " +"A véletlenszerűen egy pályadarabkára jutó kis barlangok számának minimális " "korlátja." #: src/settings_translation_file.cpp @@ -4974,7 +5060,7 @@ msgstr "Mod csatornák" #: src/settings_translation_file.cpp msgid "Modifies the size of the HUD elements." -msgstr "A HUD elemméretét módosítja." +msgstr "A műszerfal elemeinek méretét módosítja." #: src/settings_translation_file.cpp msgid "Monospace font path" @@ -5012,6 +5098,11 @@ msgstr "Egér érzékenysége" msgid "Mouse sensitivity multiplier." msgstr "Egér érzékenységi faktora." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Movement threshold" +msgstr "Üreg küszöb" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "Iszap zaj" @@ -5035,9 +5126,9 @@ msgid "" "Current mapgens in a highly unstable state:\n" "- The optional floatlands of v7 (disabled by default)." msgstr "" -"Az új világ létrehozásakor használandó térképgenerátor neve.\n" +"Az új világ létrehozásakor használandó pályagenerátor neve.\n" "Új világ főmenüben történő létrehozása felülírja ezt.\n" -"Jelenleg a következő térképgenerátorok nagyon instabilak:\n" +"Jelenleg a következő pályagenerátorok nagyon instabilak:\n" "- Az opcionális lebegő földek a v7-ben (alapértelmezés szerint tiltott)." #: src/settings_translation_file.cpp @@ -5091,7 +5182,7 @@ msgstr "Zajok" #: src/settings_translation_file.cpp msgid "Number of emerge threads" -msgstr "A térképblokk betöltő szálak száma" +msgstr "A pályablokk-betöltő szálak száma" #: src/settings_translation_file.cpp msgid "" @@ -5106,14 +5197,14 @@ msgid "" "processes, especially in singleplayer and/or when running Lua code in\n" "'on_generated'. For many users the optimum setting may be '1'." msgstr "" -"A térképblokkok betöltésére használt szálak száma.\n" +"A pályablokkok betöltésére használt szálak száma.\n" "Érték 0:\n" -"- Automatikus választás. A térképblokkok betöltését végző szálak száma\n" +"- Automatikus választás. A pályablokkok betöltését végző szálak száma\n" "- \"processzorok száma - 2\" lesz, de legalább 1.\n" "Bármilyen más érték:\n" -"- Meghatározza a térképblokkbetöltő szálak számát, amelynek alsó korlátja " +"- Meghatározza a pályablokkbetöltő szálak számát, amelynek alsó korlátja " "1.\n" -"FIGYELEM: A térképblokkbetöltő szálak számának növelése növeli a játékmotor " +"FIGYELEM: A pályablokkbetöltő szálak számának növelése növeli a játékmotor " "mapgen\n" "folyamatainak sebességét, de csökkentheti a játékteljesítményt azáltal, hogy " "más\n" @@ -5148,15 +5239,11 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Occlusion Culler" -msgstr "Elzáródási selejtező" +msgstr "Kitakarásfigyelő" #: src/settings_translation_file.cpp msgid "Occlusion Culling" -msgstr "Elzáródási selejtezés" - -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "Átlátszatlan folyadékok" +msgstr "Kitakarás figyelése" #: src/settings_translation_file.cpp msgid "" @@ -5171,9 +5258,14 @@ msgid "" "formspec is\n" "open." msgstr "" -"Megnyitja a szünet menüt, ha az ablak kikerül a fókuszból. Nem szünetel, ha " -"nyitva van\n" -"egy formspec panel." +"Megnyitja a szünetelési menüt, mikor az ablak elveszti a fókuszt. Nem " +"szünetel, ha nyitva van\n" +"egy felugró ablak." + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "OpenGL debug" +msgstr "Pályagenerátor-hibakereső" #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." @@ -5314,6 +5406,15 @@ msgstr "" 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. " + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -5331,6 +5432,10 @@ msgstr "Megemeli a terepet, hogy völgyek alakuljanak a folyók körül." msgid "Random input" msgstr "Véletlenszerű bemenet" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "Legutóbbi csevegésüzenetek" @@ -5353,7 +5458,7 @@ msgid "" "Use this to stop players from being able to use color in their messages" msgstr "" "Színkódok eltávolítása a bejövő csevegésüzenetekből\n" -"Használd ezt hogy megakadályozd, hogy a játékosok színeket használjanak az " +"Használd ezt, hogy megakadályozd, hogy a játékosok színeket használjanak az " "üzeneteikben" #: src/settings_translation_file.cpp @@ -5450,7 +5555,7 @@ msgstr "Homokos partok képződnek, ha az np_beach meghaladja ezt az értéket." #: src/settings_translation_file.cpp msgid "Save the map received by the client on disk." -msgstr "A kliens által fogadott térkép mentése lemezre." +msgstr "A kliens által fogadott pálya mentése lemezre." #: src/settings_translation_file.cpp msgid "" @@ -5460,10 +5565,15 @@ msgid "" "is maximized is stored in window_maximized.\n" "(Autosaving window_maximized only works if compiled with SDL.)" msgstr "" +"Az ablak mérete automatikusan mentve módosításkor.\n" +"ha igaz, a képméret screen_w és screen_h-ban lesz mentve, és ha az ablak " +"kinagyítódik,\n" +"akkor a window_maximized-ben tárolja.\n" +"(window_maximized auto-mentése csak az SDL-el építve működik)" #: src/settings_translation_file.cpp msgid "Saving map received from server" -msgstr "A szerverről fogadott térkép mentése" +msgstr "A szerverről fogadott pálya mentése" #: src/settings_translation_file.cpp msgid "" @@ -5538,13 +5648,14 @@ msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous" msgstr "Lásd: http://www.sqlite.org/pragma.html#pragma_synchronous" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Select the antialiasing method to apply.\n" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5558,18 +5669,37 @@ 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 "" +"válasszon Antialiasing módot az alkalmazásához.\n" +"\n" +"*none-nincs (alapértelmezett)\n" +"\n" +"*FSAA-hardver általi teljesképernyős antialiasing, nem műkődik " +"Árnyalókkal(shaders)\n" +"illetve Többalapos antialiasing (MSAA)\n" +"Kisimítja a blokkéleket,de nem érinti a textúrák belsejét.\n" +"alkalmazásához újraindítás szükséges.\n" +"\n" +"*FXAA-gyors pontos antialiasing (shaders szükséges)\n" +"alkalmaz egy post-processing filtert, hogy észlelje és simítsa a " +"nagykontrasztú éleket.\n" +"köztes a gyors és minőségi kép közt.\n" +"\n" +"*SSAA-Szuper-alapos antialiasing (shaders szükséges)\n" +"Jobb képminőséget renderel a jelenetről, majd lekicsinyíti, hogy kissebb " +"legyen\n" +"az antialiasing effekt. ez a leglassabb és legpontosabb módszer." #: src/settings_translation_file.cpp msgid "Selection box border color (R,G,B)." -msgstr "Kijelölő doboz keret színe (R,G,B)." +msgstr "Kijelölődoboz keret színe (R,G,B)." #: src/settings_translation_file.cpp msgid "Selection box color" -msgstr "Kijelölő doboz színe" +msgstr "Kijelölődoboz színe" #: src/settings_translation_file.cpp msgid "Selection box width" -msgstr "Kijelölő doboz szélessége" +msgstr "Kijelölődoboz szélessége" #: src/settings_translation_file.cpp msgid "" @@ -5639,16 +5769,15 @@ msgstr "Szerver leírása" #: src/settings_translation_file.cpp msgid "Server name" -msgstr "Szerver név" +msgstr "Szervernév" #: src/settings_translation_file.cpp msgid "Server port" msgstr "Szerver portja" #: src/settings_translation_file.cpp -#, fuzzy msgid "Server-side occlusion culling" -msgstr "Takarásban lévő térképblokkok szerveroldali kiválogatása" +msgstr "Takarásban lévő pályablokkok szerveroldali kiválogatása" #: src/settings_translation_file.cpp msgid "Server/Env Performance" @@ -5667,15 +5796,14 @@ msgid "Serverlist file" msgstr "Szerverlista fájl" #: src/settings_translation_file.cpp -#, fuzzy 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 "" -"A Nap/Hold pályájának fokokban mért döntési szögét szabályozza.\n" -"A 0 érték azt jelenti, hogy nincs döntés / függőleges a pályájuk.\n" -"Minimális érték: 0,0; maximális érték: 60,0" +"Beállítja a Nap/Hold keringési szögét fokokban.\n" +"Ezt játékok API-val módosíthatják.\n" +"A 0-s érték döntés nélküli/ függőkeges pályát jelent." #: src/settings_translation_file.cpp msgid "" @@ -5683,10 +5811,14 @@ msgid "" "Value of 0.0 (default) means no exposure compensation.\n" "Range: from -1 to 1.0" msgstr "" +"Az exponálási kompenzáció beállítása EV egységekben.\n" +"A 0.0 (alapértelmezett) érték esetén nincs kompenzáció.\n" +"Értékhatár: -1-től 1.0-ig" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" "Nyelv beállítása. Hagyd üresen a rendszer nyelvének használatához.\n" @@ -5696,7 +5828,7 @@ msgstr "" msgid "" "Set the maximum length of a chat message (in characters) sent by clients." msgstr "" -"A csevegés maximális szöveghossza (karakterben) amelyet a kliensek " +"A csevegés maximális szöveghossza (karakterben), amelyet a kliensek " "küldhetnek." #: src/settings_translation_file.cpp @@ -5720,38 +5852,32 @@ msgstr "" "Minimális érték: 1.0; maximális érték: 15.0" #: src/settings_translation_file.cpp -#, fuzzy msgid "Set to true to enable Shadow Mapping." -msgstr "" -"Állítsa igazra az árnyéktérképezés (Shadow Mapping) engedélyezéséhez.\n" -"Az árnyalók engedélyezése szükséges hozzá." +msgstr "Állítsa igazra az árnyékleképezés (Shadow Mapping) engedélyezéséhez." #: src/settings_translation_file.cpp msgid "" "Set to true to enable bloom effect.\n" "Bright colors will bleed over the neighboring objects." msgstr "" +"Igaz értékre állítva ragyogási hatás lesz látható.\n" +"A világos árnyalatok a szomszédos tárgyakra is átterjednek." + +#: src/settings_translation_file.cpp +msgid "Set to true to enable volumetric lighting effect (a.k.a. \"Godrays\")." +msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Set to true to enable waving leaves." -msgstr "" -"A \"true\" beállítás engedélyezi a levelek hullámzását.\n" -"Az árnyalók engedélyezése szükséges hozzá." +msgstr "engedélyezés esetén a levelek hullámozni fognak." #: src/settings_translation_file.cpp -#, fuzzy msgid "Set to true to enable waving liquids (like water)." -msgstr "" -"A \"true\" beállítás engedélyezi a víz hullámzását.\n" -"Az árnyalók engedélyezése szükséges hozzá." +msgstr "Engedélyezés esetén a folyadékok (PL. víz) hullámzani fognak." #: src/settings_translation_file.cpp -#, fuzzy msgid "Set to true to enable waving plants." -msgstr "" -"A \"true\" beállítás engedélyezi a növények hullámzását.\n" -"Az árnyalók engedélyezése szükséges hozzá." +msgstr "Engedélyezés esetén a növények hullámzani fognak." #: src/settings_translation_file.cpp msgid "" @@ -5760,6 +5886,10 @@ msgid "" "top-left - processed base image, top-right - final image\n" "bottom-left - raw base image, bottom-right - bloom texture." msgstr "" +"Igaz értékre állítva a ragyogási hatás hibakereső képernyője jelenik meg.\n" +"Hibakereső módban a képernyő négyfelé osztódik:\n" +"bal-felül - feldolgozott kiindulási kép, jobb-felül - végső kép,\n" +"bal-alul - nyers kiindulási kép, jobb-alul - ragyogás textúrája." #: src/settings_translation_file.cpp msgid "" @@ -5777,14 +5907,14 @@ msgstr "Árnyaló útvonala" #: src/settings_translation_file.cpp msgid "Shaders" -msgstr "Árnyékolók" +msgstr "Árnyalók" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" "Az árnyalók fejlett vizuális effekteket tesznek lehetővé és növelhetik a " "teljesítményt\n" @@ -5801,11 +5931,11 @@ msgstr "Az árnyéktérkép maximális renderelési távolsága kockákban" #: src/settings_translation_file.cpp msgid "Shadow map texture in 32 bits" -msgstr "32 bites árnyéktérkép textúra" +msgstr "32 bites árnyéktérkép-textúra" #: src/settings_translation_file.cpp msgid "Shadow map texture size" -msgstr "Árnyéktérkép textúra méret" +msgstr "Árnyéktérkép textúrájának mérete" #: src/settings_translation_file.cpp msgid "" @@ -5823,14 +5953,14 @@ msgstr "Hibakereső információ megjelenítése" #: src/settings_translation_file.cpp msgid "Show entity selection boxes" -msgstr "Entitások kijelölő dobozának megjelenítése" +msgstr "Entitások kijelölődobozának megjelenítése" #: src/settings_translation_file.cpp msgid "" "Show entity selection boxes\n" "A restart is required after changing this." msgstr "" -"Entitás hitboxok megjelenítése.\n" +"Entitások kijelölődobozának megjelenítése.\n" "A változtatás után a játék újraindítása szükséges." #: src/settings_translation_file.cpp @@ -5849,9 +5979,16 @@ msgid "" "draw calls, benefiting especially high-end GPUs.\n" "Systems with a low-end GPU (or no GPU) would benefit from smaller values." msgstr "" +"Oldalirányú hossza annak a pályablokk-kockának amelyet a kliens egynek " +"tekint,\n" +"amikor rácsgenerálást végez.\n" +"A nagyobb értékek növelik a GPU kihasználtságát a rajzolási hívások " +"csökkentésével,\n" +"ami előnyös a nagy teljesítményű GPU-k számára.\n" +"Gyenge GPU-val rendelkező (vagy anélküli) rendszerek számára kissebb értékek " +"előnyösek." #: src/settings_translation_file.cpp -#, fuzzy 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" @@ -5860,26 +5997,14 @@ msgid "" "Altering this value is for special usage, leaving it unchanged is\n" "recommended." msgstr "" -"A mapgen által generált térképdarabka mérete térképblokkokban (16 kocka) " -"mérve.\n" +"A pályageneráló által generált pályadarabka mérete pályablokkokban (16 " +"kocka) mérve.\n" "FIGYELEM!: Nincs értelme és bizonyos veszélyekkel is jár ennek az értéknek\n" -"5 fölés emelése.\n" -"Ha csökkentjük ezt az értéket, gyakrabban fordulnak elő barlangok és " -"tömlöcök.\n" +"5 fölé emelése.\n" +"Ha csökkentjük ezt az értéket, gyakoribbak lesznek a barlangok és tömlöcök.\n" "Változtasd meg, ha valami különleges okból kell, de ajánlott\n" "változatlanul hagyni." -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" -"A poligonhálót generáló MapBlock cache mérete. Növelése megnöveli a\n" -"cache kiszolgálási teljesítményét, ezáltal csökken a fő szálból másolt " -"adatok\n" -"mennyisége, és ezáltal csökken a szaggatás." - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "Égitestek pályájának döntése" @@ -5919,11 +6044,13 @@ msgstr "Lágy megvilágítás" #, fuzzy msgid "" "Smooths rotation of camera when in cinematic mode, 0 to disable. Enter " -"cinematic mode by using the key set in Change Keys." -msgstr "A kameraforgást lágyítja operatőr módban. 0 a letiltáshoz." +"cinematic mode by using the key set in Controls." +msgstr "" +"A kameraforgást lágyítja operatőr módban. 0 a letiltáshoz. Az operatőr módra " +"váltáshoz nyomd meg a gombot, amelyet a Gombok megváltoztatásánál " +"beállítottál." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Smooths rotation of camera, also called look or mouse smoothing. 0 to " "disable." @@ -5941,6 +6068,15 @@ msgstr "Lopakodás sebessége kocka/másodpercben." msgid "Soft shadow radius" msgstr "Lágy árnyék sugara" +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "Hang" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sound Extensions Blacklist" +msgstr "ContentDB zászló feketelista" + #: src/settings_translation_file.cpp msgid "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -5967,14 +6103,13 @@ msgstr "" "kötegek méretét bizonyos vagy az összes tárgy esetén." #: 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 "" -"Az árnyéktérkép firssítését széthúzza a megadott számú képkockára.\n" +"Az árnyéktérkép firssítését szétterjeszti a megadott számú képkockára.\n" "Magasabb érték esetén az árnyékok késhetnek, alacsabb érékek\n" "viszont több erőforrást igényelnek.\n" "Minimális érték: 1; maximális érték: 16" @@ -5990,7 +6125,6 @@ msgstr "" "A fénygörbe kiemelés Gauss-görbéjének szórása." #: src/settings_translation_file.cpp -#, fuzzy msgid "Static spawn point" msgstr "Statikus újraéledési pont" @@ -6029,7 +6163,6 @@ msgid "Strip color codes" msgstr "Színkódok kinyerése" #: src/settings_translation_file.cpp -#, fuzzy 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" @@ -6042,7 +6175,7 @@ msgid "" "server-intensive extreme water flow and to avoid vast flooding of the\n" "world surface below." msgstr "" -"Az egybefüggő lebegő föld rétegre opcionálisan helyezhető vízfelület " +"Az egybefüggő lebegő földrétegre opcionálisan helyezhető vízfelület " "szintje.\n" "Alapértelmezésben a víz nem engedélyezett és csak akkor helyezi le, ha ez " "az\n" @@ -6050,10 +6183,9 @@ msgstr "" "vékonyítás\n" "felső részének kezdete).\n" "***FIGYELEM! VESZÉLYES LEHET A VILÁGOKRA ÉS A SZERVERTELJESÍTMÉNYRE***:\n" -"Ha endgedélyezve van a vízlehelyezés, úgy kell konfigurálni a lebegő " -"földeket és\n" -"tesztelni kell, hogy valóban egybefüggő réteget alkosson, az " -"'mgv7_floatland_density'\n" +"Ha engedélyezve van a vízlehelyezés, úgy kell konfigurálni és tesztelni a " +"lebegő földeket,\n" +"hogy valóban egybefüggő réteget alkosson, az 'mgv7_floatland_density'\n" "értékének 2,0-nak (vagy az 'mgv7_np_floatland'-től függően más szükséges " "értéknek)\n" "kell lenni, hogy elkerülhető legyen a szervert leterhelő extrém vízfolyás és " @@ -6160,24 +6292,42 @@ msgstr "" "formátum nélkül kerül meghívásra a `/profiler save [format]` parancs." #: src/settings_translation_file.cpp -#, fuzzy +msgid "" +"The delay in milliseconds after which a touch interaction is considered a " +"long tap." +msgstr "" + +#: src/settings_translation_file.cpp msgid "" "The file path relative to your world path in which profiles will be saved to." msgstr "" "A profilok mentésének relatív elérési útja a világod elérési útjához képest." +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "A használni kívánt joystick azonosítója" #: src/settings_translation_file.cpp #, fuzzy -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" "Az érintőképernyős interakció aktiválódásához szükséges távolság pixelekben." #: 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" @@ -6187,9 +6337,18 @@ msgstr "" "A hullámzó folyadékok felszínének maximális magassága.\n" "4,0 = A hullámok magasága két kocka.\n" "0,0 = A hullámok egyáltalán nem mozognak.\n" -"Az alapértelmezett érték 1,0 (1/2 kocka).\n" +"Az alapértelmezett érték 1,0 (1/2 node/kocka).\n" "A hullámzó folyadék engedélyezése szükséges hozzá." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"The minimum time in seconds it takes between digging nodes when holding\n" +"the dig button." +msgstr "" +"Az az idő másodpercben kifejezve, amely a csomópontok ismételt elhelyezése\n" +"között telik el, amikor lenyomva tartja az elhelyezés gombot." + #: src/settings_translation_file.cpp msgid "The network interface that the server listens on." msgstr "A hálózati interfész, amelyen a szerver figyel." @@ -6214,7 +6373,7 @@ msgid "" "This should be configured together with active_object_send_range_blocks." msgstr "" "A játékosok körüli blokktérfogat sugara, amelyen belül érvényesülnek\n" -"az aktív blokkok dolgai. Térképblokkban (16 kocka) mérve.\n" +"az aktív blokkok dolgai. Pályablokkban (16 kocka) mérve.\n" "Az aktív blokkokban betöltődnek az objektumok és ABM-ek futnak.\n" "Ez egyben az a legkisebb sugár is, amelyen belül az aktív objektumokról " "(mobok) gondoskodik a játék.\n" @@ -6227,15 +6386,15 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" "A renderelő háttérprogram.\n" "Ha ezt megváltoztatod, újraindítás szükséges.\n" "Megjegyzés: Androidon, hagyd OGLES1-en, ha bizonytalan vagy! Lehet, hogy nem " "indul az app különben.\n" "Más platformokon az OpenGL az ajánlott.\n" -"Az árnyalókat az OpenGL (csak asztali rendszeren) és OGLES2 (kísérleti) " -"támogatja" +"Az árnyalókat (Shaders) az OpenGL (csak asztali rendszeren) és OGLES2 " +"(kísérleti) támogatja." #: src/settings_translation_file.cpp msgid "" @@ -6252,7 +6411,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 "" -"A körülvett, illetve takarásban lévő kockák árnyékolásának erőssége " +"A kockák környezeti megvilágításból fakadó árnyékolásának erőssége " "(sötétsége).\n" "Alacsonyabb érték sötétebb, magasabb érték világosabb. E beállítás érvényes\n" "értéktartománya 0,25-től 4,0-ig terjed. Ha a tartományon kívüli értéket " @@ -6299,7 +6458,6 @@ msgid "The type of joystick" msgstr "A joystick típusa" #: src/settings_translation_file.cpp -#, fuzzy 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" @@ -6317,6 +6475,10 @@ msgstr "" "A harmadik a négy 2D zajból, amelyek együttesen meghatározzák a dombságok/" "hegységek magasságát." +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -6340,7 +6502,7 @@ msgstr "Idő sebessége" #: src/settings_translation_file.cpp msgid "Timeout for client to remove unused map data from memory, in seconds." msgstr "" -"A kliens számára a fel nem használt térképadatok memóriából való " +"A kliens számára a fel nem használt pályaadatok memóriából való " "eltávolításának időkorlátja másodpercben." #: src/settings_translation_file.cpp @@ -6364,24 +6526,22 @@ msgid "Touchscreen" msgstr "Érintőképernyő" #: src/settings_translation_file.cpp -#, fuzzy msgid "Touchscreen sensitivity" -msgstr "Egér érzékenysége" +msgstr "Az érintőképernyő érzékenysége" #: src/settings_translation_file.cpp -#, fuzzy msgid "Touchscreen sensitivity multiplier." -msgstr "Egér érzékenységi faktora." - -#: src/settings_translation_file.cpp -#, fuzzy -msgid "Touchscreen threshold" -msgstr "Érintőképernyő érzékenysége" +msgstr "Az érintőképernyő érzékenységi többszörözője." #: src/settings_translation_file.cpp msgid "Tradeoffs for performance" msgstr "Teljesítménybeli kompromisszumok" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Translucent liquids" +msgstr "Átlátszatlan folyadékok" + #: src/settings_translation_file.cpp msgid "Transparency Sorting Distance" msgstr "Átlátszósági rendezési távolság" @@ -6417,11 +6577,22 @@ msgid "" "\n" "This setting should only be changed if you have performance problems." msgstr "" +"A kitakarásfigyelő típusa\n" +"\n" +"\"loops\" a hagyományos algoritmus egymásba ágyazott ciklusokkal és O(n³) " +"bonyolultsággal\n" +"\"bfs\" az új szélességi keresésen és oldalsó kiválogatáson alapuló " +"algoritmus\n" +"\n" +"Ez a beállítás csak teljesítményhibák esetén állítandó át." #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"URL to JSON file which provides information about the newest Minetest release" -msgstr "" +"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 "A JSON fájl URL-ja a legújabb Minetest kiadásról" #: src/settings_translation_file.cpp msgid "URL to the server list displayed in the Multiplayer Tab." @@ -6456,7 +6627,7 @@ msgstr "A használaton kívüli szerveradatok eltávolítása a memóriából" #: src/settings_translation_file.cpp msgid "Update information URL" -msgstr "" +msgstr "Frissítési információ URL-ja" #: src/settings_translation_file.cpp msgid "Upper Y limit of dungeons." @@ -6475,27 +6646,26 @@ msgid "Use a cloud animation for the main menu background." msgstr "Felhő animáció használata a főmenü háttereként." #: src/settings_translation_file.cpp -#, fuzzy msgid "Use anisotropic filtering when looking at textures from an angle." -msgstr "Anizotróp szűrés használata, ha egy szögből nézzük a textúrákat." +msgstr "Anizotróp szűrés használata, ha adott szögből nézzük a textúrákat." #: src/settings_translation_file.cpp -#, fuzzy msgid "Use bilinear filtering when scaling textures." -msgstr "Trilineáris szűrés a textúrák méretezéséhez." +msgstr "Bilineáris szűrés a textúrák méretezéséhez." #: src/settings_translation_file.cpp msgid "Use crosshair for touch screen" -msgstr "" +msgstr "Célkereszt haszálata érintőképernyőn" #: 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 "" +"Célkereszt használata tárgyak kijelöléséhez a teljes képernyő helyett.\n" +"engedélyezés esetén egy célkereszt fog objektumokra mutatni a kijelzőn." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Use mipmaps when scaling textures. May slightly increase performance,\n" "especially when using a high-resolution texture pack.\n" @@ -6511,6 +6681,9 @@ msgid "" "This flag enables use of raytraced occlusion culling test for\n" "client mesh sizes smaller than 4x4x4 map blocks." msgstr "" +"Sugárkövetés használata az új kitakarásfigyelőhöz.\n" +"Ez a beállítás engedélyezi a sugárkövetéses kitakarástesztelést\n" +"a 4x4x4 pályablokknál kisebb térrészekhez a kliensben." #: src/settings_translation_file.cpp msgid "" @@ -6518,15 +6691,17 @@ msgid "" "If both bilinear and trilinear filtering are enabled, trilinear filtering\n" "is applied." msgstr "" +"Trilineáris szűrő használata textúrák méretezésekor.\n" +"ha a trilineáris és a bilineáris is engedélyezett, a trilineáris\n" +"fog érvénybe lépni." #: 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) Használd a virtuális joystickot az \"Aux1\" gomb működtetéséhez.\n" +"(Android) Használd a virtuális botkormányt az \"Aux1\" gomb működtetéséhez.\n" "Ha ez engedélyezve van, akkor a virtuális joystick fő körén kívülre húzáskor " "az \"Aux1\" gomb is lenyomódik." @@ -6534,10 +6709,6 @@ msgstr "" msgid "User Interfaces" msgstr "Felhasználói felületek" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "VBO" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "Függőleges szinkron" @@ -6603,6 +6774,9 @@ msgid "" "Vertical screen synchronization. Your system may still force VSync on even " "if this is disabled." msgstr "" +"Függőleges képernyő szinkronizálás (VSync). a rendszer\n" +"akkor is engedélyezettre kényszerítheti, ha itt\n" +"ki van kapcsolva." #: src/settings_translation_file.cpp msgid "Video driver" @@ -6610,7 +6784,7 @@ msgstr "Videó driver" #: src/settings_translation_file.cpp msgid "View bobbing factor" -msgstr "Fejbillegési faktor" +msgstr "Fejbillegés mértéke" #: src/settings_translation_file.cpp msgid "View distance in nodes." @@ -6628,6 +6802,10 @@ msgstr "A virtuális joystick működteti az Aux1 gombot" msgid "Volume" msgstr "Hangerő" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Volume of all sounds.\n" @@ -6636,6 +6814,16 @@ msgstr "" "Az összes hang hangereje.\n" "A hangrendszer engedélyezésére van szükség hozzá." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volume when unfocused" +msgstr "FPS, amikor a játék meg van állítva, vagy nincs fókuszban" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volumetric lighting" +msgstr "Lágy megvilágítás" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6755,13 +6943,13 @@ msgid "" "Mods may still set a background." msgstr "" "Látszódjon-e a névcédulák háttere alapértelmezésként.\n" -"A modok ettől még a beállíthatják a hátteret." +"A modok ettől még beállíthatják a hátteret." #: src/settings_translation_file.cpp msgid "Whether node texture animations should be desynchronized per mapblock." msgstr "" "Legyen-e független a kockák textúraanimációinak időzítése az egyes " -"térképblokkokban." +"pályablokkokban." #: src/settings_translation_file.cpp msgid "" @@ -6773,7 +6961,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Whether the window is maximized." -msgstr "" +msgstr "Amikor az ablak teljes képernyős." #: src/settings_translation_file.cpp msgid "" @@ -6806,18 +6994,16 @@ msgstr "" "A hibakereső információ megjelenítése (ugyanaz a hatás, ha F5-öt nyomunk)." #: src/settings_translation_file.cpp -#, fuzzy msgid "Width component of the initial window size." -msgstr "" -"A kezdőablak szélessége. Teljes képernyős módban nem kerül figyelmbe vételre." +msgstr "A kezdeti ablakméret szélesség-komponense." #: src/settings_translation_file.cpp msgid "Width of the selection box lines around nodes." -msgstr "A kijelölésdoboz vonalainak szélessége a kockák körül." +msgstr "A kijelölődoboz vonalainak szélessége a kockák körül." #: src/settings_translation_file.cpp msgid "Window maximized" -msgstr "" +msgstr "Az ablak már teljes képernyős" #: src/settings_translation_file.cpp msgid "" @@ -6936,12 +7122,18 @@ msgstr "cURL párhuzamossági korlát" #~ msgid "(game support required)" #~ msgstr "(játéktámogatás szükséges)" +#~ msgid "- Address: " +#~ msgstr "- Cím: " + #~ msgid "- Creative Mode: " #~ msgstr "- Kreatív mód: " #~ msgid "- Damage: " #~ msgstr "- Sérülés: " +#~ msgid "- Port: " +#~ msgstr "- Port: " + #~ msgid "" #~ "0 = parallax occlusion with slope information (faster).\n" #~ "1 = relief mapping (slower, more accurate)." @@ -6979,6 +7171,13 @@ msgstr "cURL párhuzamossági korlát" #~ "Hagyd üresen helyi szerver indításához.\n" #~ "Megjegyzés: a cím mező a főmenüben felülírja ezt a beállítást." +#~ msgid "" +#~ "Adjust dpi configuration to your screen (non X11/Android only) e.g. for " +#~ "4k screens." +#~ msgstr "" +#~ "Dpi konfiguráció igazítása a képernyődhöz (nem X11/csak Android) pl. 4k " +#~ "képernyőkhöz." + #~ msgid "" #~ "Adjust the gamma encoding for the light tables. Higher numbers are " #~ "brighter.\n" @@ -7031,6 +7230,9 @@ msgstr "cURL párhuzamossági korlát" #~ msgid "Bits per pixel (aka color depth) in fullscreen mode." #~ msgstr "Bit/pixel (vagyis színmélység) teljes képernyős módban." +#~ msgid "Block bounds shown for all blocks" +#~ msgstr "Blokkhatárok mutatása minden blokk esetén" + #~ msgid "Bump Mapping" #~ msgstr "Bump mapping" @@ -7053,6 +7255,9 @@ msgstr "cURL párhuzamossági korlát" #~ msgid "Camera update toggle key" #~ msgstr "Kamera frissítés váltása gomb" +#~ msgid "Change Keys" +#~ msgstr "Gombok megváltoztatása" + #, fuzzy #~ msgid "Change keys" #~ msgstr "Gombok megváltoztatása" @@ -7129,6 +7334,38 @@ msgstr "cURL párhuzamossági korlát" #~ "A járatok szélességét határozza meg, alacsonyabb érték szélesebb " #~ "járatokat hoz létre." +#, c-format +#~ msgid "" +#~ "Controls:\n" +#~ "- %s: move forwards\n" +#~ "- %s: move backwards\n" +#~ "- %s: move left\n" +#~ "- %s: move right\n" +#~ "- %s: jump/climb up\n" +#~ "- %s: dig/punch/use\n" +#~ "- %s: place/use\n" +#~ "- %s: sneak/climb down\n" +#~ "- %s: drop item\n" +#~ "- %s: inventory\n" +#~ "- Mouse: turn/look\n" +#~ "- Mouse wheel: select item\n" +#~ "- %s: chat\n" +#~ msgstr "" +#~ "Irányítás:\n" +#~ "- %s: mozgás előre\n" +#~ "- %s: mozgás hátra\n" +#~ "- %s: mozgás balra\n" +#~ "- %s: mozgás jobbra\n" +#~ "- %s: ugrás/mászás\n" +#~ "- %s: ásás/ütés/használat\n" +#~ "- %s: letevés/használat\n" +#~ "- %s: lopakodás/lefelé mászás\n" +#~ "- %s: tárgy eldobása\n" +#~ "- %s: leltár\n" +#~ "- Egér: forgás/nézelődés\n" +#~ "- Egérgörgő: tárgy kiválasztása\n" +#~ "- %s: csevegés\n" + #~ msgid "Creative" #~ msgstr "Kreatív" @@ -7138,6 +7375,9 @@ msgstr "cURL párhuzamossági korlát" #~ msgid "Crosshair color (R,G,B)." #~ msgstr "Célkereszt színe (R,G,B)." +#~ msgid "DPI" +#~ msgstr "DPI" + #~ msgid "Damage" #~ msgstr "Sérülés" @@ -7223,6 +7463,13 @@ msgstr "cURL párhuzamossági korlát" #~ msgid "Enable register confirmation" #~ msgstr "Regisztráció megerősítés engedélyezése" +#~ msgid "" +#~ "Enable vertex buffer objects.\n" +#~ "This should greatly improve graphics performance." +#~ msgstr "" +#~ "Vertex buffer objektumok engedélyezése.\n" +#~ "Ez nagyban javíthatja a grafikus teljesítményt." + #~ msgid "Enabled" #~ msgstr "Engedélyezve" @@ -7516,6 +7763,9 @@ msgstr "cURL párhuzamossági korlát" #~ msgid "Instrumentation" #~ msgstr "Behangolás" +#~ msgid "Invalid gamespec." +#~ msgstr "Érvénytelen játékmeghatározás." + #~ msgid "Inventory key" #~ msgstr "Felszerelés gomb" @@ -8208,6 +8458,12 @@ msgstr "cURL párhuzamossági korlát" #~ "Lehetővé teszi, hogy a DirectX működjön a LuaJIT-tel. Tiltsd le, ha " #~ "problémákat okoz." +#~ msgid "Makes all liquids opaque" +#~ msgstr "Az összes folyadékot átlátszatlanná teszi" + +#~ msgid "Mapblock mesh generator's MapBlock cache size in MB" +#~ msgstr "Pályablokkrács-generátorok MapBlock-gyorsítótár mérete MB-ban" + #~ msgid "Menus" #~ msgstr "Menük" @@ -8408,15 +8664,22 @@ msgstr "cURL párhuzamossági korlát" #~ msgid "Simple Leaves" #~ msgstr "Egyszerű levelek" +#~ msgid "" +#~ "Size of the MapBlock cache of the mesh generator. Increasing this will\n" +#~ "increase the cache hit %, reducing the data being copied from the main\n" +#~ "thread, thus reducing jitter." +#~ msgstr "" +#~ "A poligonhálót generáló MapBlock cache mérete. Növelése megnöveli a\n" +#~ "cache kiszolgálási teljesítményét, ezáltal csökken a fő szálból másolt " +#~ "adatok\n" +#~ "mennyisége, és ezáltal csökken a szaggatás." + #~ msgid "Smooth Lighting" #~ msgstr "Lágy megvilágítás" #~ msgid "Smooths rotation of camera. 0 to disable." #~ msgstr "Kameraforgás lágyítása. 0 = letiltás." -#~ msgid "Sound" -#~ msgstr "Hang" - #~ msgid "Special" #~ msgstr "Különleges" @@ -8472,6 +8735,9 @@ msgstr "cURL párhuzamossági korlát" #~ msgid "Touch threshold (px):" #~ msgstr "Érintésküszöb (px):" +#~ msgid "Touchscreen threshold" +#~ msgstr "Érintőképernyő érzékenysége" + #~ msgid "Trilinear Filter" #~ msgstr "Trilineáris szűrés" @@ -8509,6 +8775,9 @@ msgstr "cURL párhuzamossági korlát" #~ "engedélyezve. Ha 0-ra van állítva, az MSAA tiltva van.\n" #~ "E beállítás megváltoztatása után újraindítás szükséges." +#~ msgid "VBO" +#~ msgstr "VBO" + #~ msgid "Vertical screen synchronization." #~ msgstr "Függőleges képernyő szinkronizálás." @@ -8584,8 +8853,14 @@ msgstr "cURL párhuzamossági korlát" #~ msgid "You died." #~ msgstr "Meghaltál." +#~ msgid "You have no games installed." +#~ msgstr "Nincsenek játékok telepítve." + #~ msgid "Z" #~ msgstr "Z" #~ msgid "needs_fallback_font" #~ msgstr "no" + +#~ msgid "ok" +#~ msgstr "ok" diff --git a/po/ia/minetest.po b/po/ia/minetest.po index 19207e731..8f7ae5d50 100644 --- a/po/ia/minetest.po +++ b/po/ia/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" "PO-Revision-Date: 2023-12-03 17:17+0000\n" "Last-Translator: Krock \n" "Language-Team: Interlingua ]" -msgstr "" - -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" +msgid "[all | ] [-t]" msgstr "" #: builtin/fstk/ui.lua @@ -108,6 +104,10 @@ msgstr "" msgid "Main menu" msgstr "" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "" @@ -136,173 +136,180 @@ msgstr "" msgid "We support protocol versions between version $1 and $2." msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download \"$1\"" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +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 "Mods" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "" + +#: 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 "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download \"$1\"" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" msgstr "" #: builtin/mainmenu/content/pkgmgr.lua @@ -449,10 +456,20 @@ msgstr "" msgid "Decorations" msgstr "" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." msgstr "" +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "" @@ -815,10 +832,6 @@ msgstr "" msgid "Back" msgstr "" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -828,7 +841,8 @@ msgstr "" msgid "Clear" msgstr "" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "" @@ -1031,6 +1045,16 @@ msgstr "" msgid "Install games from ContentDB" msgstr "" +#: builtin/mainmenu/tab_local.lua +msgid "Minetest 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 " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "" @@ -1064,7 +1088,7 @@ msgid "Start Game" msgstr "" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." +msgid "You need to install a game before you can create a world." msgstr "" #: builtin/mainmenu/tab_online.lua @@ -1144,18 +1168,10 @@ msgstr "" msgid "Rebuilding shaders..." msgstr "" -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "" - #: src/client/clientlauncher.cpp msgid "Could not find or load game: " msgstr "" -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "" - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "" @@ -1180,24 +1196,20 @@ msgstr "" msgid "Provided world path doesn't exist: " msgstr "" -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +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 "- Address: " -msgstr "" - #: src/client/game.cpp msgid "- Mode: " msgstr "" -#: src/client/game.cpp -msgid "- Port: " -msgstr "" - #: src/client/game.cpp msgid "- Public: " msgstr "" @@ -1232,10 +1244,6 @@ msgstr "" msgid "Block bounds hidden" msgstr "" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "" @@ -1280,6 +1288,10 @@ msgstr "" msgid "Connecting to server..." msgstr "" +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "" @@ -1288,32 +1300,13 @@ msgstr "" msgid "Continue" msgstr "" -#: src/client/game.cpp -#, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" - #: src/client/game.cpp msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1393,6 +1386,10 @@ msgstr "" msgid "Fog enabled" msgstr "" +#: src/client/game.cpp +msgid "Fog enabled by game or mod" +msgstr "" + #: src/client/game.cpp msgid "Game info:" msgstr "" @@ -1413,10 +1410,6 @@ msgstr "" msgid "KiB/s" msgstr "" -#: src/client/game.cpp -msgid "Media..." -msgstr "" - #: src/client/game.cpp msgid "MiB/s" msgstr "" @@ -1572,10 +1565,6 @@ msgstr "" msgid "Zoom currently disabled by game or mod" msgstr "" -#: src/client/game.cpp -msgid "ok" -msgstr "" - #: src/client/gameui.cpp msgid "Chat currently disabled by game or mod" msgstr "" @@ -1896,6 +1885,15 @@ msgstr "" msgid "Minimap in texture mode" msgstr "" +#: src/client/shader.cpp +#, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2085,6 +2083,18 @@ msgstr "" msgid "press key" msgstr "" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Unable to open URL" +msgstr "" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "" @@ -2118,6 +2128,7 @@ msgstr "" #. 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 "ia" @@ -2303,12 +2314,6 @@ msgstr "" msgid "Adds particles when digging a node." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2331,6 +2336,10 @@ msgstr "" msgid "Advanced" msgstr "" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2384,6 +2393,17 @@ msgstr "" msgid "Apple trees noise" 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 "Arm inertia" msgstr "" @@ -2405,12 +2425,21 @@ msgid "" "clients.\n" "Small values potentially improve performance a lot, at the expense of " "visible\n" -"rendering glitches (some blocks will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +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 @@ -2473,6 +2502,10 @@ msgstr "" msgid "Biome noise" msgstr "" +#: src/settings_translation_file.cpp +msgid "Block cull optimize distance" +msgstr "" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "" @@ -2685,6 +2718,12 @@ msgstr "" msgid "Colored shadows" 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -2816,10 +2855,6 @@ msgid "" "Also controls the object crosshair color" msgstr "" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "" @@ -2869,6 +2904,19 @@ msgid "" "but also uses more resources." 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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "" @@ -3053,6 +3101,10 @@ msgstr "" msgid "Enable Bloom Debug" msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable Debanding" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3072,6 +3124,10 @@ msgid "" "filtering." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable Post Processing" +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "" @@ -3114,6 +3170,10 @@ msgstr "" msgid "Enable mouse wheel (scroll) for item selection in hotbar." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable random mod loading (mainly used for testing)." +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3137,6 +3197,10 @@ msgid "" "expecting." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable touchscreen" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3145,12 +3209,6 @@ msgid "" "when connecting to the server." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3180,6 +3238,19 @@ msgstr "" msgid "Enables caching of facedir rotated meshes." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -3974,9 +4045,10 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" #: src/settings_translation_file.cpp @@ -4122,10 +4194,6 @@ msgid "" "Make fog and sky colors depend on daytime (dawn/sunset) and view direction." msgstr "" -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "" @@ -4174,7 +4242,9 @@ 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." +"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 @@ -4209,10 +4279,6 @@ msgstr "" msgid "Mapblock mesh generation threads" msgstr "" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "" @@ -4454,6 +4520,10 @@ msgstr "" msgid "Minimap scan height" msgstr "" +#: src/settings_translation_file.cpp +msgid "Minimum dig repetition interval" +msgstr "" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "" @@ -4522,6 +4592,10 @@ msgstr "" msgid "Mouse sensitivity multiplier." msgstr "" +#: src/settings_translation_file.cpp +msgid "Movement threshold" +msgstr "" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "" @@ -4630,10 +4704,6 @@ msgstr "" msgid "Occlusion Culling" msgstr "" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -4646,6 +4716,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "OpenGL debug" +msgstr "" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "" @@ -4755,6 +4829,14 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "" +#: src/settings_translation_file.cpp +msgid "Protocol version minimum" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -4770,6 +4852,10 @@ msgstr "" msgid "Random input" msgstr "" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "" @@ -4957,8 +5043,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5076,7 +5162,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" @@ -5109,6 +5195,10 @@ msgid "" "Bright colors will bleed over the neighboring objects." 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 "Set to true to enable waving leaves." msgstr "" @@ -5148,8 +5238,7 @@ msgstr "" msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" #: src/settings_translation_file.cpp @@ -5219,13 +5308,6 @@ msgid "" "recommended." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "" @@ -5261,7 +5343,7 @@ 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 Change Keys." +"cinematic mode by using the key set in Controls." msgstr "" #: src/settings_translation_file.cpp @@ -5282,6 +5364,14 @@ msgstr "" msgid "Soft shadow radius" 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 "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -5438,17 +5528,37 @@ msgid "" "when calling `/profiler save [format]` without format." 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 "" "The file path relative to your world path in which profiles will be saved to." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "" #: src/settings_translation_file.cpp -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" #: src/settings_translation_file.cpp @@ -5459,6 +5569,12 @@ msgid "" "Default is 1.0 (1/2 node)." 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 "The network interface that the server listens on." msgstr "" @@ -5485,7 +5601,7 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" #: src/settings_translation_file.cpp @@ -5542,6 +5658,10 @@ msgstr "" msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "" +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -5589,11 +5709,11 @@ msgid "Touchscreen sensitivity multiplier." msgstr "" #: src/settings_translation_file.cpp -msgid "Touchscreen threshold" +msgid "Tradeoffs for performance" msgstr "" #: src/settings_translation_file.cpp -msgid "Tradeoffs for performance" +msgid "Translucent liquids" msgstr "" #: src/settings_translation_file.cpp @@ -5631,7 +5751,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 "" #: src/settings_translation_file.cpp @@ -5729,10 +5851,6 @@ msgstr "" msgid "User Interfaces" msgstr "" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "" @@ -5819,12 +5937,24 @@ msgstr "" msgid "Volume" msgstr "" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +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 "Volumetric lighting" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" diff --git a/po/id/minetest.po b/po/id/minetest.po index 41b373a2c..d8cd40813 100644 --- a/po/id/minetest.po +++ b/po/id/minetest.po @@ -2,10 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: Indonesian (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" -"PO-Revision-Date: 2023-11-29 21:30+0000\n" -"Last-Translator: Muhammad Rifqi Priyo Susanto " -"\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" "Language-Team: Indonesian \n" "Language: id\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.3-dev\n" +"X-Generator: Weblate 5.5-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -72,7 +71,8 @@ msgid "Command not available: " msgstr "Perintah tidak tersedia: " #: builtin/common/chatcommands.lua -msgid "Get help for commands" +#, fuzzy +msgid "Get help for commands (-t: output in chat)" msgstr "Dapatkan bantuan untuk perintah-perintah" #: builtin/common/chatcommands.lua @@ -83,13 +83,10 @@ msgstr "" "all' untuk menampilkan semuanya." #: builtin/common/chatcommands.lua -msgid "[all | ]" +#, fuzzy +msgid "[all | ] [-t]" msgstr "[semua | ]" -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" -msgstr "Oke" - #: builtin/fstk/ui.lua msgid "" msgstr "" @@ -106,6 +103,10 @@ msgstr "Sebuah masalah terjadi:" msgid "Main menu" msgstr "Menu utama" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "Oke" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Sambung ulang" @@ -134,19 +135,27 @@ msgstr "Kami hanya mendukung protokol versi $1." msgid "We support protocol versions between version $1 and $2." msgstr "Kami mendukung protokol antara versi $1 dan versi $2." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "\"$1\" telah ada. Apakah Anda mau menimpanya?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" +msgstr "Terjadi masalah saat memasang \"$1\": $2" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." -msgstr "$1 dan $2 dependensi akan dipasang." +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download \"$1\"" +msgstr "Gagal mengunduh \"$1\"" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" -msgstr "$1 oleh $2" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr "Gagal mengunduh $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "" +"Gagak mengekstrak \"$1\" (jenis berkas tidak didukung atau arsip rusak)" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" @@ -154,157 +163,157 @@ msgstr "" "$1 sedang diunduh,\n" "$2 dalam antrean" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." -msgstr "$1 diunduh..." +msgstr "$1 Diunduh..." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "$1 memerlukan dependensi yang tidak bisa ditemukan." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "$1 akan dipasang dan $2 dependensi akan dilewatkan." - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "Semua paket" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "Telah terpasang" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "Kembali ke Menu Utama" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "ContentDB tidak tersedia saat Minetest dikompilasi tanpa cURL" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "Mengunduh..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +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 +msgid "Loading..." +msgstr "Memuat..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Mods" +msgstr "Mod" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "Tiada paket yang dapat diambil" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "Tidak ada hasil" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "Tiada pembaruan" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "Diantrekan" + +#: builtin/mainmenu/content/dlg_contentdb.lua +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." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "$1 oleh $2" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "$1 memerlukan dependensi yang tidak bisa ditemukan." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "$1 akan dipasang dan $2 dependensi akan dilewatkan." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "Telah terpasang" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "Permainan Dasar:" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "Batal" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "ContentDB tidak tersedia saat Minetest dikompilasi tanpa cURL" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "Dependensi:" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "Mengunduh..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "Terjadi masalah saat memasang \"$1\": $2" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download \"$1\"" -msgstr "Gagal mengunduh \"$1\"" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "Gagal mengunduh $1" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "" -"Gagak mengekstrak \"$1\" (jenis berkas tidak didukung atau arsip rusak)" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "Permainan" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "Pasang" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "Pasang $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "Pasang dependensi yang kurang" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "Memuat..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "Mod" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "Tiada paket yang dapat diambil" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "Tidak ada hasil" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "Tiada pembaruan" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "Tidak ditemukan" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "Timpa" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "Harap pastikan bahwa permainan dasar telah sesuai." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" -msgstr "Diantrekan" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" +msgstr "\"$1\" telah ada. Apakah Anda mau menimpanya?" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "Paket tekstur" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "Paket $1 tidak ditemukan." - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "Copot" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "Perbarui" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "Perbarui Semua [$1]" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "Lihat informasi lebih lanjut di peramban web" - -#: builtin/mainmenu/content/dlg_contentstore.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 "Overwrite" +msgstr "Timpa" #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" @@ -344,7 +353,7 @@ msgstr "(Tidak terpenuhi)" #: builtin/mainmenu/dlg_config_world.lua msgid "Disable all" -msgstr "Matikan semua" +msgstr "Nonaktifkan semua" #: builtin/mainmenu/dlg_config_world.lua msgid "Disable modpack" @@ -452,10 +461,20 @@ msgstr "Buat" msgid "Decorations" msgstr "Dekorasi" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." msgstr "Development Test ditujukan untuk para pengembang." +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "Dungeon" @@ -832,10 +851,6 @@ msgstr "Aksesibilitas" msgid "Back" msgstr "Kembali" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "Ubah Tombol" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -843,9 +858,10 @@ msgstr "Obrolan" #: builtin/mainmenu/settings/dlg_settings.lua builtin/mainmenu/tab_online.lua msgid "Clear" -msgstr "Clear" +msgstr "Bersihkan/Jernih" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "Kontrol" @@ -1050,6 +1066,17 @@ msgstr "Pasang permainan" 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" + +#: builtin/mainmenu/tab_local.lua +msgid "" +"Minetest is a game-creation platform that allows you to play many different " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "Baru" @@ -1083,8 +1110,9 @@ msgid "Start Game" msgstr "Mulai Permainan" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." -msgstr "Anda tidak punya permainan yang terpasang." +#, fuzzy +msgid "You need to install a game before you can create a world." +msgstr "Anda perlu pasang sebuah permainan sebelum pasang sebuah mod" #: builtin/mainmenu/tab_online.lua msgid "Address" @@ -1163,18 +1191,10 @@ msgstr "Memuat tekstur..." msgid "Rebuilding shaders..." msgstr "Membangun ulang shader..." -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "Sambungan bermasalah (terlalu lama?)" - #: src/client/clientlauncher.cpp msgid "Could not find or load game: " msgstr "Tidak dapat mencari atau memuat permainan: " -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "Spesifikasi permainan tidak sah." - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "Menu Utama" @@ -1199,7 +1219,11 @@ msgstr "Berkas kata sandi yang diberikan gagal dibuka: " msgid "Provided world path doesn't exist: " msgstr "Jalur dunia yang diberikan tidak ada: " -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "Media..." + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp msgid "" "\n" "Check debug.txt for details." @@ -1207,18 +1231,10 @@ msgstr "" "\n" "Periksa debug.txt untuk detail." -#: src/client/game.cpp -msgid "- Address: " -msgstr "- Alamat: " - #: src/client/game.cpp msgid "- Mode: " msgstr "- Mode: " -#: src/client/game.cpp -msgid "- Port: " -msgstr "- Porta: " - #: src/client/game.cpp msgid "- Public: " msgstr "- Publik: " @@ -1253,10 +1269,6 @@ msgstr "Maju otomatis dinyalakan" msgid "Block bounds hidden" msgstr "Batasan blok disembunyikan" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "Batasan blok ditampilkan untuk semua blok" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "Batasan blok ditampilkan untuk blok saat ini" @@ -1301,6 +1313,10 @@ msgstr "Skrip sisi klien dimatikan" msgid "Connecting to server..." msgstr "Menyambung ke server..." +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "Sambungan bermasalah (terlalu lama?)" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "Sambungan gagal karena sebab yang tidak diketahui" @@ -1310,45 +1326,13 @@ msgid "Continue" msgstr "Lanjutkan" #: src/client/game.cpp -#, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" -"Kontrol:\n" -"- %s: maju\n" -"- %s: mundur\n" -"- %s: ke kiri\n" -"- %s: ke kanan\n" -"- %s: lompat/panjat\n" -"- %s: gali/pukul/gunakan\n" -"- %s: taruh/gunakan\n" -"- %s: menyelinap/turun\n" -"- %s: jatuhkan barang\n" -"- %s: inventaris\n" -"- Tetikus: belok/toleh\n" -"- Roda tetikus: pilih barang\n" -"- %s: obrolan\n" - -#: src/client/game.cpp +#, fuzzy msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1440,6 +1424,11 @@ msgstr "Kabut dimatikan" 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" + #: src/client/game.cpp msgid "Game info:" msgstr "Informasi permainan:" @@ -1460,10 +1449,6 @@ msgstr "Definisi barang..." msgid "KiB/s" msgstr "KiB/s" -#: src/client/game.cpp -msgid "Media..." -msgstr "Media..." - #: src/client/game.cpp msgid "MiB/s" msgstr "MiB/s" @@ -1626,10 +1611,6 @@ msgstr "Rangka kawat ditampilkan" msgid "Zoom currently disabled by game or mod" msgstr "Zum sedang dilarang oleh permainan atau mod" -#: src/client/game.cpp -msgid "ok" -msgstr "oke" - #: src/client/gameui.cpp msgid "Chat currently disabled by game or mod" msgstr "Obrolan sedang dilarang oleh permainan atau mod" @@ -1702,7 +1683,7 @@ msgstr "Erase OEF" #: src/client/keycode.cpp msgid "Execute" -msgstr "Execute" +msgstr "Menjalankan" #: src/client/keycode.cpp msgid "Help" @@ -1714,23 +1695,23 @@ msgstr "Home" #: src/client/keycode.cpp msgid "IME Accept" -msgstr "IME Accept" +msgstr "IME Terima" #: src/client/keycode.cpp msgid "IME Convert" -msgstr "IME Convert" +msgstr "IME Konversi" #: src/client/keycode.cpp msgid "IME Escape" -msgstr "IME Escape" +msgstr "IME Pelarian" #: src/client/keycode.cpp msgid "IME Mode Change" -msgstr "IME Mode Change" +msgstr "IME Perubahan Mode" #: src/client/keycode.cpp msgid "IME Nonconvert" -msgstr "IME Nonconvert" +msgstr "IME Tidak Berkonversi" #: src/client/keycode.cpp msgid "Insert" @@ -1775,67 +1756,67 @@ msgstr "Num Lock" #: src/client/keycode.cpp msgid "Numpad *" -msgstr "Numpad *" +msgstr "Papan Angka *" #: src/client/keycode.cpp msgid "Numpad +" -msgstr "Numpad +" +msgstr "Papan Angka +" #: src/client/keycode.cpp msgid "Numpad -" -msgstr "Numpad -" +msgstr "Papan Angka -" #: src/client/keycode.cpp msgid "Numpad ." -msgstr "Numpad ." +msgstr "Papan Angka ." #: src/client/keycode.cpp msgid "Numpad /" -msgstr "Numpad /" +msgstr "Papan Angka /" #: src/client/keycode.cpp msgid "Numpad 0" -msgstr "Numpad 0" +msgstr "Papan Angka 0" #: src/client/keycode.cpp msgid "Numpad 1" -msgstr "Numpad 1" +msgstr "Papan Angka 1" #: src/client/keycode.cpp msgid "Numpad 2" -msgstr "Numpad 2" +msgstr "Papan Angka 2" #: src/client/keycode.cpp msgid "Numpad 3" -msgstr "Numpad 3" +msgstr "Papan Angka 3" #: src/client/keycode.cpp msgid "Numpad 4" -msgstr "Numpad 4" +msgstr "Papan Angka 4" #: src/client/keycode.cpp msgid "Numpad 5" -msgstr "Numpad 5" +msgstr "Papan Angka 5" #: src/client/keycode.cpp msgid "Numpad 6" -msgstr "Numpad 6" +msgstr "Papan Angka 6" #: src/client/keycode.cpp msgid "Numpad 7" -msgstr "Numpad 7" +msgstr "Papan Angka 7" #: src/client/keycode.cpp msgid "Numpad 8" -msgstr "Numpad 8" +msgstr "Papan Angka 8" #: src/client/keycode.cpp msgid "Numpad 9" -msgstr "Numpad 9" +msgstr "Papan Angka 9" #: src/client/keycode.cpp msgid "OEM Clear" -msgstr "OEM Clear" +msgstr "OEM Bersihkan" #: src/client/keycode.cpp msgid "Page Down" @@ -1852,12 +1833,12 @@ msgstr "Pause" #: src/client/keycode.cpp msgid "Play" -msgstr "Play" +msgstr "Main" #. ~ "Print screen" key #: src/client/keycode.cpp msgid "Print" -msgstr "Print" +msgstr "Cetak" #: src/client/keycode.cpp msgid "Return Key" @@ -1894,7 +1875,7 @@ msgstr "Scroll Lock" #. ~ Key name #: src/client/keycode.cpp msgid "Select" -msgstr "Select" +msgstr "Pilih" #: src/client/keycode.cpp msgid "Shift Key" @@ -1902,7 +1883,7 @@ msgstr "Shift" #: src/client/keycode.cpp msgid "Sleep" -msgstr "Sleep" +msgstr "Tidur" #: src/client/keycode.cpp msgid "Snapshot" @@ -1950,6 +1931,15 @@ msgstr "Peta mini mode permukaan, Zum %dx" msgid "Minimap in texture mode" msgstr "Peta mini mode tekstur" +#: src/client/shader.cpp +#, fuzzy, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "Gagal membuka laman web" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2143,6 +2133,19 @@ msgstr "Zum" msgid "press key" msgstr "tekan tombol" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +#, fuzzy +msgid "Unable to open URL" +msgstr "Gagal membuka laman web" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "Ubah" @@ -2176,6 +2179,7 @@ msgstr "Volume Suara: %d%%" #. 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 "id" @@ -2396,14 +2400,6 @@ msgstr "Batas pengiriman objek aktif" msgid "Adds particles when digging a node." msgstr "Tambahkan partikel saat menggali nodus." -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" -"Atur konfigurasi dpi ke layar Anda (selain X11/Android saja) misalnya untuk " -"layar 4K." - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2433,6 +2429,10 @@ msgstr "Nama pengurus" msgid "Advanced" msgstr "Lanjutan" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2491,6 +2491,17 @@ msgstr "Sisipkan nama barang pada tooltip." msgid "Apple trees noise" msgstr "Noise pohon apel" +#: 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 "Arm inertia" msgstr "Kelembaman tangan" @@ -2508,18 +2519,37 @@ msgid "Ask to reconnect after crash" msgstr "Minta untuk menyambung ulang setelah mogok" #: src/settings_translation_file.cpp +#, fuzzy 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 will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +msgstr "" +"Pada jarak ini, server akan melakukan optimasi dengan agresif terhadap\n" +"blok yang dikirim kepada klien.\n" +"Nilai yang kecil dapat meningkatkan kinerja dengan glitch pada tampilan\n" +"(beberapa blok di bawah air dan dalam gua tidak akan digambar,\n" +"terkadang juga di darat).\n" +"Nilai yang lebih besar daripada max_block_send_distance mematikan\n" +"optimasi ini.\n" +"Dalam satuan blok peta (16 nodus)." + +#: src/settings_translation_file.cpp +#, fuzzy +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 "" "Pada jarak ini, server akan melakukan optimasi dengan agresif terhadap\n" "blok yang dikirim kepada klien.\n" @@ -2590,13 +2620,18 @@ msgstr "API Bioma" msgid "Biome noise" msgstr "Noise bioma" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Block cull optimize distance" +msgstr "Jarak optimasi pengiriman blok" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "Jarak optimasi pengiriman blok" #: src/settings_translation_file.cpp msgid "Bloom" -msgstr "Bloom" +msgstr "Bloom(Bunga)" #: src/settings_translation_file.cpp msgid "Bloom Intensity" @@ -2612,7 +2647,7 @@ msgstr "Pengali Kekuatan Bloom" #: src/settings_translation_file.cpp msgid "Bobbing" -msgstr "Bobbing" +msgstr "Bobbing(Terombang-Ambing)" #: src/settings_translation_file.cpp msgid "Bold and italic font path" @@ -2806,6 +2841,12 @@ msgstr "Kabut berwarna" msgid "Colored shadows" msgstr "Bayangan berwarna" +#: 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -2972,10 +3013,6 @@ msgstr "" "Warna crosshair (merah,hijau,biru atau R,G,B),\n" "sekaligus mengatur warna crosshair objek" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "DPI" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "Ambang batas ukuran log awakutu" @@ -3030,6 +3067,24 @@ msgstr "" "Ini menyimulasikan efek bayangan halus dengan menerapkan PCF atau\n" "diska Poisson, tetapi menggunakan sumber daya lebih banyak." +#: 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 " +"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" +"Minetest 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" +"Klien lawas dianggap sesuai jika mereka tidak mogok saat menyambung ke " +"server-\n" +"server baru, tetapi mungkin tidak mendukung semua fitur baru yang diharapkan." + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "Menetapkan daerah tempat pohon punya apel." @@ -3232,6 +3287,11 @@ msgstr "Nyalakan Bloom" msgid "Enable Bloom Debug" msgstr "Nyalakan Awakutu Bloom" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Debanding" +msgstr "Nyalakan Kerusakan" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3258,6 +3318,11 @@ msgstr "" "Nilai true berarti menggunakan diska Poisson untuk \"bayangan halus\". Nilai " "lain berarti menggunakan filter PCF." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Post Processing" +msgstr "Pasca-Pengolahan" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "Nyalakan Raytraced Culling" @@ -3307,6 +3372,11 @@ msgstr "Nyalakan pengamanan mod" msgid "Enable mouse wheel (scroll) for item selection in hotbar." msgstr "Nyalakan roda tetikus (gulir) untuk memilih barang dalam hotbar." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable random mod loading (mainly used for testing)." +msgstr "Gunakan masukan pengguna acak (hanya digunakan untuk pengujian)." + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "Gunakan masukan pengguna acak (hanya digunakan untuk pengujian)." @@ -3336,6 +3406,11 @@ msgstr "" "server-\n" "server baru, tetapi mungkin tidak mendukung semua fitur baru yang diharapkan." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable touchscreen" +msgstr "Layar Sentuh" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3347,14 +3422,6 @@ msgstr "" "Server jarak jauh menawarkan cara lebih cepat untuk mengunduh media\n" "(misal tekstur) saat tersambung ke server." -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" -"Nyalakan vertex buffer object.\n" -"Ini dapat meningkatkan kinerja grafika." - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3393,6 +3460,19 @@ msgstr "Jalankan animasi barang inventaris." msgid "Enables caching of facedir rotated meshes." msgstr "Gunakan tembolok untuk facedir mesh yang diputar." +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -4318,10 +4398,12 @@ msgstr "" "- Opaque: matikan transparansi" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" "Lama detikan server dan selang waktu bagi objek secara umum untuk " "diperbarui\n" @@ -4497,10 +4579,6 @@ msgstr "" "Buat warna kabut dan langit tergantung pada waktu (fajar/magrib) dan arah " "pandangan." -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "Buat semua cairan buram" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "Tingkat Kompresi Peta untuk Penyimpanan Diska" @@ -4556,11 +4634,14 @@ msgid "Map generation attributes specific to Mapgen v5." msgstr "Atribut pembuatan peta khusus untuk pembuat peta 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" "When the 'snowbiomes' flag is enabled jungles are automatically enabled and\n" -"the 'jungles' flag is ignored." +"the 'jungles' flag is ignored.\n" +"The 'temples' flag disables generation of desert temples. Normal dungeons " +"will appear instead." msgstr "" "Atribut pembuatan peta khusus untuk pembuat peta v6.\n" "Flag \"snowbiomes\" menyalakan sistem 5 bioma yang baru.\n" @@ -4603,10 +4684,6 @@ msgstr "Jarak waktu pembuatan mesh blok peta" msgid "Mapblock mesh generation threads" msgstr "Utas pembuatan mesh blok peta" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "Ukuran tembolok blok peta dari pembuat mesh blok peta dalam MB" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "Batas waktu pembongkaran blok peta" @@ -4875,6 +4952,11 @@ msgstr "Tingkat minimal log untuk ditulis ke obrolan." 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" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "Batas minimal nilai acak untuk gua besar per potongan peta." @@ -4885,7 +4967,7 @@ msgstr "Batas minimal nilai acak untuk gua kecil per potongan peta." #: src/settings_translation_file.cpp msgid "Mipmapping" -msgstr "Mipmapping" +msgstr "Pemetaan Ulang" #: src/settings_translation_file.cpp msgid "Miscellaneous" @@ -4943,6 +5025,11 @@ msgstr "Kepekaan tetikus" msgid "Mouse sensitivity multiplier." msgstr "Pengali kepekaan tetikus." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Movement threshold" +msgstr "Ambang batas gua besar" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "Noise lumpur" @@ -5075,15 +5162,11 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Occlusion Culler" -msgstr "Occlusion Culler" +msgstr "Oklusi Culler" #: src/settings_translation_file.cpp msgid "Occlusion Culling" -msgstr "Occlusion Culling" - -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "Cairan opak" +msgstr "Pemusnahan Oklusi" #: src/settings_translation_file.cpp msgid "" @@ -5100,6 +5183,11 @@ msgstr "" "sedang \n" "dibuka." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "OpenGL debug" +msgstr "Awakutu pembuat peta" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "Penimpaan opsional untuk warna tautan web pada obrolan." @@ -5231,6 +5319,15 @@ msgstr "" 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. " + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -5248,6 +5345,10 @@ msgstr "Menaikkan medan untuk membuat lembah di sekitar sungai." msgid "Random input" msgstr "Masukan acak" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "Pesan Obrolan Terkini" @@ -5457,13 +5558,14 @@ msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous" msgstr "Lihat https://www.sqlite.org/pragma.html#pragma_synchronous" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Select the antialiasing method to apply.\n" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5623,8 +5725,9 @@ msgstr "" "Rentang: dari -1 ke 1.0" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" "Atur bahasa. Biarkan kosong untuk menggunakan bahasa sistem.\n" @@ -5669,6 +5772,10 @@ msgstr "" "Atur ke true untuk menyalakan efek bloom.\n" "Warna terang akan merambat ke objek di sekitarnya." +#: 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 "Set to true to enable waving leaves." msgstr "Atur ke true untuk menyalakan daun melambai." @@ -5712,11 +5819,11 @@ 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.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" "Shader membolehkan efek visual tingkat lanjut dan dapat meningkatkan " "kinerja\n" @@ -5807,16 +5914,6 @@ msgstr "" "Mengubah nilai ini untuk kegunaan khusus, membiarkannya \n" "disarankan." -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" -"Ukuran dari tembolok blok peta dari pembuat mesh. Menaikkan ini akan\n" -"menambah persentase cache hit, mengurangi data yang disalin dari\n" -"utas utama, sehingga mengurangi jitter." - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "Kemiringan Orbit Benda Langit" @@ -5850,9 +5947,10 @@ msgid "Smooth lighting" msgstr "Pencahayaan halus" #: 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 Change Keys." +"cinematic mode by using the key set in Controls." msgstr "" "Menghaluskan rotasi kamera dalam modus sinema, 0 untuk mematikannya. Masuk " "mode sinema dengan tombol yang diatur di Ubah Tombol." @@ -5877,6 +5975,15 @@ msgstr "Kelajuan menyelinap dalam nodus per detik." msgid "Soft shadow radius" msgstr "Jari-jari bayangan halus" +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "Suara" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sound Extensions Blacklist" +msgstr "Daftar Hitam Flag ContentDB" + #: src/settings_translation_file.cpp msgid "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -6078,18 +6185,39 @@ msgstr "" "Format bawaan pada berkas untuk menyimpan profil,\n" "saat memanggil `/profiler save [format]` tanpa format." +#: 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 "" "The file path relative to your world path in which profiles will be saved to." msgstr "" "Jalur berkas relatif terhadap jalur dunia Anda tempat profil akan disimpan." +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "Identitas dari joystick yang digunakan" #: src/settings_translation_file.cpp -msgid "The length in pixels it takes for touchscreen interaction to start." +#, fuzzy +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" "Jarak dalam piksel yang diperlukan untuk memulai interaksi layar sentuh." @@ -6105,6 +6233,15 @@ msgstr "" "0.0 = Ombak tidak bergerak sama sekali.\n" "Bawaannya 1.0 (1/2 nodus)." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"The minimum time in seconds it takes between digging nodes when holding\n" +"the dig button." +msgstr "" +"Jeda dalam detik antar-penaruhan berulang saat menekan \n" +"tombol taruh." + #: src/settings_translation_file.cpp msgid "The network interface that the server listens on." msgstr "Antarmuka jaringan yang server dengarkan." @@ -6135,11 +6272,12 @@ msgstr "" "Ini harus diatur bersama dengan active_object_range." #: 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" "Penggambar video.\n" "Catatan: Mulai ulang diperlukan setelah mengganti ini!\n" @@ -6219,6 +6357,10 @@ msgstr "" msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "Noise 2D ketiga dari empat yang mengatur ketinggian bukit/gunung." +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -6273,14 +6415,15 @@ msgstr "Kepekaan layar sentuh" msgid "Touchscreen sensitivity multiplier." msgstr "Pengali kepekaan layar sentuh." -#: src/settings_translation_file.cpp -msgid "Touchscreen threshold" -msgstr "Ambang batas layar sentuh" - #: src/settings_translation_file.cpp msgid "Tradeoffs for performance" msgstr "Pertukaran untuk kinerja" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Translucent liquids" +msgstr "Cairan opak" + #: src/settings_translation_file.cpp msgid "Transparency Sorting Distance" msgstr "Jarak Pengurutan Transparansi" @@ -6326,8 +6469,11 @@ msgstr "" "Pengaturan ini seharusnya hanya diubah jika Anda mengalami masalah kinerja." #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 ke berkas JSON yang memberikan informasi tentang rilis Minetest terbaru" @@ -6337,7 +6483,7 @@ msgstr "URL ke daftar server yang tampil pada Tab Multipemain." #: src/settings_translation_file.cpp msgid "Undersampling" -msgstr "Undersampling" +msgstr "Undersampling(Pengambilan sampel yang terlalu rendah)" #: src/settings_translation_file.cpp msgid "" @@ -6386,9 +6532,8 @@ msgstr "" "Gunakan pemfilteran anisotropik saat melihat tekstur pada sudut tertentu." #: src/settings_translation_file.cpp -#, fuzzy msgid "Use bilinear filtering when scaling textures." -msgstr "Gunakan pemfilteran trilinear saat mengubah ukuran tekstur." +msgstr "Gunakan pemfilteran bilinear saat mengubah ukuran tekstur." #: src/settings_translation_file.cpp msgid "Use crosshair for touch screen" @@ -6404,15 +6549,15 @@ msgstr "" "objek." #: src/settings_translation_file.cpp -#, fuzzy 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 "" -"Gunakan mipmap untuk memperkecil tekstur. Bisa sedikit menaikkan kinerja,\n" -"terutama pada saat menggunakan paket tekstur beresolusi tinggi.\n" -"Pengecilan dengan tepat-gamma tidak didukung." +"Gunakan mipmap untuk mengubah ukuran tekstur.\n" +"Penggunaan untuk paket tekstur beresolusi tinggi bisa memperlambat kinerja " +"sistem.\n" +"Pengecilan dengan gama akurat tidak didukung." #: src/settings_translation_file.cpp msgid "" @@ -6425,15 +6570,14 @@ msgstr "" "untuk ukuran mesh klien yang lebih kecil daripada 4x4x4 blok peta." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Use trilinear filtering when scaling textures.\n" "If both bilinear and trilinear filtering are enabled, trilinear filtering\n" "is applied." msgstr "" -"Gunakan pemfilteran trilinear saat memperkecil tekstur.\n" -"Jika pemfilteran bilinear dan trilinear dinyalakan, pemfilteran\n" -"trilinear yang diterapkan." +"Gunakan pemfilteran trilinear saat menskalakan tekstur.\n" +"Jika kedua pemfilteran bilinear dan trilinear dinyalakan bersamaan,\n" +"pemfilteran trilinear akan digunakan." #: src/settings_translation_file.cpp msgid "" @@ -6449,10 +6593,6 @@ msgstr "" msgid "User Interfaces" msgstr "Antarmuka Pengguna" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "VBO" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "VSync (penyinkronan vertikal)" @@ -6545,6 +6685,10 @@ msgstr "Joystick virtual mengetuk tombol Aux1" msgid "Volume" msgstr "Volume" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Volume of all sounds.\n" @@ -6553,6 +6697,16 @@ msgstr "" "Volume semua suara.\n" "Perlu menyalakan sistem suara." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volume when unfocused" +msgstr "FPS saat dijeda atau tidak difokuskan" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volumetric lighting" +msgstr "Pencahayaan halus" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6842,12 +6996,18 @@ msgstr "cURL: batas jumlah paralel" #~ msgid "(game support required)" #~ msgstr "(butuh dukungan permainan)" +#~ msgid "- Address: " +#~ msgstr "- Alamat: " + #~ msgid "- Creative Mode: " #~ msgstr "- Mode Kreatif: " #~ msgid "- Damage: " #~ msgstr "- Kerusakan: " +#~ msgid "- Port: " +#~ msgstr "- Porta: " + #~ msgid "" #~ "0 = parallax occlusion with slope information (faster).\n" #~ "1 = relief mapping (slower, more accurate)." @@ -6885,6 +7045,13 @@ msgstr "cURL: batas jumlah paralel" #~ "Biarkan kosong untuk memulai sebuah server lokal.\n" #~ "Perhatikan bahwa bidang alamat dalam menu utama menimpa pengaturan ini." +#~ msgid "" +#~ "Adjust dpi configuration to your screen (non X11/Android only) e.g. for " +#~ "4k screens." +#~ msgstr "" +#~ "Atur konfigurasi dpi ke layar Anda (selain X11/Android saja) misalnya " +#~ "untuk layar 4K." + #~ msgid "" #~ "Adjust the gamma encoding for the light tables. Higher numbers are " #~ "brighter.\n" @@ -6955,6 +7122,9 @@ msgstr "cURL: batas jumlah paralel" #~ msgid "Bits per pixel (aka color depth) in fullscreen mode." #~ msgstr "Bit per piksel (alias kedalaman warna) dalam mode layar penuh." +#~ msgid "Block bounds shown for all blocks" +#~ msgstr "Batasan blok ditampilkan untuk semua blok" + #~ msgid "Bump Mapping" #~ msgstr "Bump Mapping" @@ -6978,6 +7148,9 @@ msgstr "cURL: batas jumlah paralel" #~ msgid "Center of light curve mid-boost." #~ msgstr "Titik tengah penguatan tengah kurva cahaya." +#~ msgid "Change Keys" +#~ msgstr "Ubah Tombol" + #~ msgid "Change keys" #~ msgstr "Ubah tombol" @@ -7053,6 +7226,38 @@ msgstr "cURL: batas jumlah paralel" #~ msgstr "" #~ "Mengatur lebar terowongan, nilai lebih kecil terowongan semakin lebar." +#, c-format +#~ msgid "" +#~ "Controls:\n" +#~ "- %s: move forwards\n" +#~ "- %s: move backwards\n" +#~ "- %s: move left\n" +#~ "- %s: move right\n" +#~ "- %s: jump/climb up\n" +#~ "- %s: dig/punch/use\n" +#~ "- %s: place/use\n" +#~ "- %s: sneak/climb down\n" +#~ "- %s: drop item\n" +#~ "- %s: inventory\n" +#~ "- Mouse: turn/look\n" +#~ "- Mouse wheel: select item\n" +#~ "- %s: chat\n" +#~ msgstr "" +#~ "Kontrol:\n" +#~ "- %s: maju\n" +#~ "- %s: mundur\n" +#~ "- %s: ke kiri\n" +#~ "- %s: ke kanan\n" +#~ "- %s: lompat/panjat\n" +#~ "- %s: gali/pukul/gunakan\n" +#~ "- %s: taruh/gunakan\n" +#~ "- %s: menyelinap/turun\n" +#~ "- %s: jatuhkan barang\n" +#~ "- %s: inventaris\n" +#~ "- Tetikus: belok/toleh\n" +#~ "- Roda tetikus: pilih barang\n" +#~ "- %s: obrolan\n" + #~ msgid "Creative" #~ msgstr "Kreatif" @@ -7062,6 +7267,9 @@ msgstr "cURL: batas jumlah paralel" #~ msgid "Crosshair color (R,G,B)." #~ msgstr "Warna crosshair: (merah,hijau,biru) atau (R,G,B)." +#~ msgid "DPI" +#~ msgstr "DPI" + #~ msgid "Damage" #~ msgstr "Kerusakan" @@ -7150,6 +7358,13 @@ msgstr "cURL: batas jumlah paralel" #~ msgid "Enable register confirmation" #~ msgstr "Gunakan konfirmasi pendaftaran" +#~ msgid "" +#~ "Enable vertex buffer objects.\n" +#~ "This should greatly improve graphics performance." +#~ msgstr "" +#~ "Nyalakan vertex buffer object.\n" +#~ "Ini dapat meningkatkan kinerja grafika." + #~ msgid "Enabled" #~ msgstr "Dinyalakan" @@ -7464,6 +7679,9 @@ msgstr "cURL: batas jumlah paralel" #~ msgid "Instrumentation" #~ msgstr "Instrumentasi" +#~ msgid "Invalid gamespec." +#~ msgstr "Spesifikasi permainan tidak sah." + #~ msgid "Inventory key" #~ msgstr "Tombol inventaris" @@ -8159,6 +8377,12 @@ msgstr "cURL: batas jumlah paralel" #~ msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles." #~ msgstr "Buat DirectX bekerja dengan LuaJIT. Matikan jika bermasalah." +#~ msgid "Makes all liquids opaque" +#~ msgstr "Buat semua cairan buram" + +#~ msgid "Mapblock mesh generator's MapBlock cache size in MB" +#~ msgstr "Ukuran tembolok blok peta dari pembuat mesh blok peta dalam MB" + #~ msgid "Menus" #~ msgstr "Menu" @@ -8389,15 +8613,21 @@ msgstr "cURL: batas jumlah paralel" #~ msgid "Simple Leaves" #~ msgstr "Daun Sederhana" +#~ msgid "" +#~ "Size of the MapBlock cache of the mesh generator. Increasing this will\n" +#~ "increase the cache hit %, reducing the data being copied from the main\n" +#~ "thread, thus reducing jitter." +#~ msgstr "" +#~ "Ukuran dari tembolok blok peta dari pembuat mesh. Menaikkan ini akan\n" +#~ "menambah persentase cache hit, mengurangi data yang disalin dari\n" +#~ "utas utama, sehingga mengurangi jitter." + #~ msgid "Smooth Lighting" #~ msgstr "Pencahayaan Halus" #~ msgid "Smooths rotation of camera. 0 to disable." #~ msgstr "Penghalusan perputaran kamera. 0 untuk tidak menggunakannya." -#~ msgid "Sound" -#~ msgstr "Suara" - #~ msgid "Special" #~ msgstr "Spesial" @@ -8461,6 +8691,9 @@ 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" @@ -8510,6 +8743,9 @@ msgstr "cURL: batas jumlah paralel" #~ "Jika diatur 0, MSAA dimatikan.\n" #~ "Dibutuhkan mulai ulang setelah penggantian pengaturan ini." +#~ msgid "VBO" +#~ msgstr "VBO" + #~ msgid "Variation of hill height and lake depth on floatland smooth terrain." #~ msgstr "" #~ "Variasi dari ketinggian bukit dan kedalaman danau pada medan halus " @@ -8612,8 +8848,14 @@ msgstr "cURL: batas jumlah paralel" #~ msgid "You died." #~ msgstr "Anda mati" +#~ msgid "You have no games installed." +#~ msgstr "Anda tidak punya permainan yang terpasang." + #~ msgid "Z" #~ msgstr "Z" #~ msgid "needs_fallback_font" #~ msgstr "no" + +#~ msgid "ok" +#~ msgstr "oke" diff --git a/po/it/minetest.po b/po/it/minetest.po index 4d7805101..a88323256 100644 --- a/po/it/minetest.po +++ b/po/it/minetest.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: Italian (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" -"PO-Revision-Date: 2023-11-12 15:37+0000\n" -"Last-Translator: Giov4 \n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" +"PO-Revision-Date: 2024-01-18 07:31+0000\n" +"Last-Translator: Filippo Alfieri \n" "Language-Team: Italian \n" "Language: it\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-dev\n" +"X-Generator: Weblate 5.4-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -71,7 +71,8 @@ msgid "Command not available: " msgstr "Comando non disponibile: " #: builtin/common/chatcommands.lua -msgid "Get help for commands" +#, fuzzy +msgid "Get help for commands (-t: output in chat)" msgstr "Ottieni aiuto per i comandi" #: builtin/common/chatcommands.lua @@ -82,13 +83,10 @@ msgstr "" "digita '.help all' per elencare tutti i comandi." #: builtin/common/chatcommands.lua -msgid "[all | ]" +#, fuzzy +msgid "[all | ] [-t]" msgstr "[tutto | ]" -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" -msgstr "Conferma" - #: builtin/fstk/ui.lua msgid "" msgstr "" @@ -105,6 +103,10 @@ msgstr "Si è verificato un errore:" msgid "Main menu" msgstr "Menu principale" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "Conferma" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Riconnettiti" @@ -133,19 +135,28 @@ msgstr "Supportiamo solo la versione $1 del protocollo." msgid "We support protocol versions between version $1 and $2." msgstr "Supportiamo versioni di protocollo comprese tra la $1 e la $2." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "\"$1\" esiste già. Vuoi sovrascriverlo?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" +msgstr "Errore nell'installare \"$1\": $2" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." -msgstr "Le dipendenze $1 e $2 saranno installate." +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download \"$1\"" +msgstr "Impossibile scaricare \"$1\"" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" -msgstr "$1 con $2" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr "Impossibile scaricare $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "" +"Impossibile estrarre \"$1\" (tipo di file non supportato o archivio " +"danneggiato)" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" @@ -153,158 +164,157 @@ msgstr "" "Scaricando $1,\n" "$2 in coda" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." msgstr "Scaricando $1..." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "$1 impossibile trovare le dipendeze necessarie." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "$1 sarà installato, e $2 dipendenze verranno ignorate." - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "Tutti i contenuti" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "Già installato" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "Torna al Menu Principale" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "ContentDB non è disponibile quando Minetest viene compilato senza cURL" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "Scaricamento..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "Giochi" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +msgstr "Installa" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp +msgid "Loading..." +msgstr "Caricamento..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Mods" +msgstr "Mod" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "Non è stato possibile recuperare alcun contenuto" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "Nessun risultato" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "Nessun aggiornamento" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "In coda" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "Pacchetti texture" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "Il contenuto $1 non è stato trovato." + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "Disinstalla" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "Aggiorna" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "Aggiorna Tutto [$1]" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "View more information in a web browser" +msgstr "Visualizza ulteriori informazioni in un browser Web" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "You need to install a game before you can install a mod" +msgstr "Devi installare un gioco prima di poter installare un mod" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 and $2 dependencies will be installed." +msgstr "Le dipendenze $1 e $2 saranno installate." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "$1 con $2" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "$1 impossibile trovare le dipendeze necessarie." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "$1 sarà installato, e $2 dipendenze verranno ignorate." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "Già installato" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "Gioco di Base:" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "Annulla" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "ContentDB non è disponibile quando Minetest viene compilato senza cURL" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "Dipendenze:" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "Scaricamento..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "Errore nell'installare \"$1\": $2" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download \"$1\"" -msgstr "Impossibile scaricare \"$1\"" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "Impossibile scaricare $1" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "" -"Impossibile estrarre \"$1\" (tipo di file non supportato o archivio " -"danneggiato)" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "Giochi" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "Installa" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "Installa $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "Installa le dipendenze mancanti" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "Caricamento..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "Mod" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "Non è stato possibile recuperare alcun contenuto" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "Nessun risultato" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "Nessun aggiornamento" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "Non trovato" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "Sovrascrivi" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "Per favore, controlla che il gioco di base sia corretto." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" -msgstr "In coda" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" +msgstr "\"$1\" esiste già. Vuoi sovrascriverlo?" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "Pacchetti texture" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "Il contenuto $1 non è stato trovato." - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "Disinstalla" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "Aggiorna" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "Aggiorna Tutto [$1]" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "Visualizza ulteriori informazioni in un browser Web" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" -msgstr "Devi installare un gioco prima di poter installare un mod" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" +msgstr "Sovrascrivi" #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" @@ -454,10 +464,20 @@ msgstr "Crea" msgid "Decorations" msgstr "Decorazioni" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." msgstr "\"Development Test\" è progettato per gli sviluppatori." +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "Sotterranei" @@ -601,7 +621,7 @@ msgstr "Nome del mondo" #: builtin/mainmenu/dlg_delete_content.lua msgid "Are you sure you want to delete \"$1\"?" -msgstr "Siete sicuri di volere cancellare \"$1\"?" +msgstr "Vuoi veramente cancellare \"$1\"?" #: builtin/mainmenu/dlg_delete_content.lua #: builtin/mainmenu/dlg_delete_world.lua builtin/mainmenu/tab_local.lua @@ -652,7 +672,7 @@ msgstr "Registrati" #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "Dismiss" -msgstr "" +msgstr "Chiudi" #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "" @@ -678,9 +698,8 @@ msgstr "" "Il gioco Minetest Game non è più installato per impostazione predefinita" #: builtin/mainmenu/dlg_reinstall_mtg.lua -#, fuzzy msgid "Reinstall Minetest Game" -msgstr "Installa un altro gioco" +msgstr "Installa nuovamente Minetest Game" #: builtin/mainmenu/dlg_rename_modpack.lua msgid "Accept" @@ -757,9 +776,8 @@ msgid "Select file" msgstr "Scegli un file" #: builtin/mainmenu/settings/components.lua -#, fuzzy msgid "Set" -msgstr "Selezione" +msgstr "Seleziona" #: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua msgid "(No description of setting given)" @@ -838,10 +856,6 @@ msgstr "Accessibilità" msgid "Back" msgstr "Indietro" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "Cambia i Tasti" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -851,7 +865,8 @@ msgstr "Chat" msgid "Clear" msgstr "Canc" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "Controlli" @@ -860,12 +875,10 @@ msgid "General" msgstr "Generale" #: builtin/mainmenu/settings/dlg_settings.lua -#, fuzzy msgid "Movement" -msgstr "Movimento rapido" +msgstr "Movimento" #: builtin/mainmenu/settings/dlg_settings.lua -#, fuzzy msgid "Reset setting to default" msgstr "Ripristina predefinito" @@ -987,18 +1000,16 @@ msgid "Browse online content" msgstr "Esplora i contenuti online" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Browse online content [$1]" -msgstr "Esplora i contenuti online" +msgstr "Esplora i contenuti online [$1]" #: builtin/mainmenu/tab_content.lua msgid "Content" msgstr "Contenuto" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Content [$1]" -msgstr "Contenuto" +msgstr "Contenuto [$1]" #: builtin/mainmenu/tab_content.lua msgid "Disable Texture Pack" @@ -1021,9 +1032,8 @@ msgid "Rename" msgstr "Rinomina" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Update available?" -msgstr "" +msgstr "Aggiornamento disponibile?" #: builtin/mainmenu/tab_content.lua msgid "Use Texture Pack" @@ -1061,6 +1071,18 @@ msgstr "Installa un gioco" msgid "Install games from ContentDB" msgstr "Installa giochi da ContentDB" +#: builtin/mainmenu/tab_local.lua +#, fuzzy +msgid "Minetest doesn't come with a game by default." +msgstr "" +"Il gioco Minetest Game non è più installato per impostazione predefinita" + +#: builtin/mainmenu/tab_local.lua +msgid "" +"Minetest is a game-creation platform that allows you to play many different " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "Nuovo" @@ -1094,8 +1116,9 @@ msgid "Start Game" msgstr "Gioca" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." -msgstr "Non hai nessun gioco installato." +#, fuzzy +msgid "You need to install a game before you can create a world." +msgstr "Devi installare un gioco prima di poter installare un mod" #: builtin/mainmenu/tab_online.lua msgid "Address" @@ -1174,18 +1197,10 @@ msgstr "Caricando le textures..." msgid "Rebuilding shaders..." msgstr "Ricostruendo le shaders..." -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "Errore di connessione (scaduta?)" - #: src/client/clientlauncher.cpp msgid "Could not find or load game: " msgstr "Impossibile trovare o caricare il gioco: " -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "Requisiti del gioco non validi." - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "Menu Principale" @@ -1210,7 +1225,11 @@ msgstr "Impossibile aprire il file di password fornito: " msgid "Provided world path doesn't exist: " msgstr "Il percorso del mondo fornito non esiste: " -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "File multimediali..." + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp msgid "" "\n" "Check debug.txt for details." @@ -1218,18 +1237,10 @@ msgstr "" "\n" "Controlla debug.txt per i dettagli." -#: src/client/game.cpp -msgid "- Address: " -msgstr "- Indirizzo: " - #: src/client/game.cpp msgid "- Mode: " msgstr "- Modalità: " -#: src/client/game.cpp -msgid "- Port: " -msgstr "- Porta: " - #: src/client/game.cpp msgid "- Public: " msgstr "- Pubblico: " @@ -1264,10 +1275,6 @@ msgstr "Avanzamento automatico abilitato" msgid "Block bounds hidden" msgstr "Limiti del blocco nascosti" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "I limiti del blocco sono mostrati per tutti i blocchi" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "I limiti del blocco sono mostrati per il blocco attuale" @@ -1313,6 +1320,10 @@ msgstr "Scripting su lato client disabilitato" msgid "Connecting to server..." msgstr "Connessione al server..." +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "Errore di connessione (scaduta?)" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "Connessione fallita per motivo sconosciuto" @@ -1321,47 +1332,14 @@ msgstr "Connessione fallita per motivo sconosciuto" msgid "Continue" msgstr "Continua" -#: src/client/game.cpp -#, fuzzy, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" -"Controlli:\n" -"- %s: avanza\n" -"- %s: arretra\n" -"- %s: sinistra\n" -"- %s: destra\n" -"- %s: salta/scala su\n" -"- %s: scava/colpisci\n" -"- %s: piazza/utilizza\n" -"- %s: furtivo/scendi\n" -"- %s: getta via oggetto\n" -"- %s: inventario\n" -"- Mouse: girati/guarda\n" -"- Rotella mouse: scegli oggetto\n" -"- %s: chat\n" - #: src/client/game.cpp #, fuzzy msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1453,6 +1431,11 @@ msgstr "Nebbia disattivata" msgid "Fog enabled" msgstr "Nebbia attivata" +#: src/client/game.cpp +#, fuzzy +msgid "Fog enabled by game or mod" +msgstr "Ingrandimento attualmente disabilitato dal gioco o da un mod" + #: src/client/game.cpp msgid "Game info:" msgstr "Informazioni del gioco:" @@ -1473,10 +1456,6 @@ msgstr "Definizione degli oggetti..." msgid "KiB/s" msgstr "KiB/s" -#: src/client/game.cpp -msgid "Media..." -msgstr "File multimediali..." - #: src/client/game.cpp msgid "MiB/s" msgstr "MiB/s" @@ -1638,10 +1617,6 @@ msgstr "Struttura a fili visualizzata" msgid "Zoom currently disabled by game or mod" msgstr "Ingrandimento attualmente disabilitato dal gioco o da un mod" -#: src/client/game.cpp -msgid "ok" -msgstr "va bene" - #: src/client/gameui.cpp msgid "Chat currently disabled by game or mod" msgstr "Chat attualmente disabilitata dal gioco o da un mod" @@ -1975,6 +1950,15 @@ msgstr "Minimappa in modalità superficie, ingrandimento x%d" msgid "Minimap in texture mode" msgstr "Minimappa in modalità texture" +#: src/client/shader.cpp +#, fuzzy, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "Impossibile aprire la pagina web" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2167,6 +2151,19 @@ msgstr "Ingrandimento" msgid "press key" msgstr "premi il tasto" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +#, fuzzy +msgid "Unable to open URL" +msgstr "Impossibile aprire la pagina web" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "Cambia" @@ -2200,6 +2197,7 @@ msgstr "Volume suono: %d%%" #. 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 "it" @@ -2433,14 +2431,6 @@ msgstr "Raggio di invio degli oggetti attivi" msgid "Adds particles when digging a node." msgstr "Aggiunge particelle quando scavi un nodo." -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" -"Regolate la configurazione dpi per il vostro schermo (solo non X11/Android) " -"per es. per schermi 4K." - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2472,6 +2462,10 @@ msgstr "Nome amministratore" msgid "Advanced" msgstr "Avanzate" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2533,6 +2527,17 @@ msgstr "Posponi nome oggetto a suggerimenti." msgid "Apple trees noise" msgstr "Rumore dei meli" +#: 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 "Arm inertia" msgstr "Inerzia del braccio" @@ -2550,18 +2555,38 @@ msgid "Ask to reconnect after crash" msgstr "Chiedi di riconnettersi dopo un crash" #: src/settings_translation_file.cpp +#, fuzzy 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 will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +msgstr "" +"A questa distanza il server ottimizzerà aggressivamente quali blocchi sono\n" +"inviati ai client.\n" +"Potenzialmente valori piccoli migliorano molto le prestazioni, al costo di\n" +"difetti di disegno visibili (alcuni blocchi non saranno disegnati sott'acqua " +"e\n" +"nelle grotte, come a volte sul terreno).\n" +"Impostarla a un valore maggiore di max_block_send_distance disabilita\n" +"questa ottimizzazione.\n" +"Fissata in blocchi mappa (16 nodi)." + +#: src/settings_translation_file.cpp +#, fuzzy +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 "" "A questa distanza il server ottimizzerà aggressivamente quali blocchi sono\n" "inviati ai client.\n" @@ -2635,6 +2660,11 @@ msgstr "Biomi" msgid "Biome noise" msgstr "Rumore biomi" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Block cull optimize distance" +msgstr "Distanza di ottimizzazione dell'invio dei blocchi" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "Distanza di ottimizzazione dell'invio dei blocchi" @@ -2857,6 +2887,12 @@ msgstr "Nebbia colorata" msgid "Colored shadows" msgstr "Ombre colorate" +#: 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -3028,10 +3064,6 @@ msgstr "" "Colore del mirino (R,G,B).\n" "Controlla anche il colore del mirino dell'oggetto" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "DPI" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "Dimensione del file di debug" @@ -3087,6 +3119,25 @@ msgstr "" "disk\n" "ma utilizza più risorse." +#: 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 " +"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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" +"Abilitare per impedire ai client obsoleti di connettersi.\n" +"I client più vecchi sono compatibili nel senso che non andranno in crash " +"alla connessione\n" +"ai nuovi server, ma potrebbero non supportare tutte le nuove caratteristiche " +"che ti aspetti." + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "Definisce aree in cui gli alberi hanno le mele." @@ -3295,6 +3346,11 @@ msgstr "Attiva Bagliore" msgid "Enable Bloom Debug" msgstr "Attiva Debug per il Bagliore" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Debanding" +msgstr "Abilita il Ferimento" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3321,6 +3377,11 @@ msgstr "" "Se abilitato si hanno le \\\"ombre morbide\\\". Altrimenti utilizza il " "filtraggio PCF." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Post Processing" +msgstr "Post-elaborazione" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "Attiva Culling con Ray Tracing" @@ -3371,6 +3432,13 @@ msgstr "" "Abilita lo scorrimento della rotellina del mouse per la selezione degli " "oggetti nella hotbar." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable random mod loading (mainly used for testing)." +msgstr "" +"Abilita l'ingresso di dati casuali da parte dell'utente (utilizzato solo per " +"i test)." + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3403,6 +3471,11 @@ msgstr "" "ai nuovi server, ma potrebbero non supportare tutte le nuove caratteristiche " "che ti aspetti." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable touchscreen" +msgstr "Touch screen" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3416,14 +3489,6 @@ msgstr "" "scaricare\n" "contenuti multimediali (es. textures) quando ci si connette al server." -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" -"Attivare gli oggetti tampone per i vertici.\n" -"Questo dovrebbe migliorare notevolmente le prestazioni grafiche." - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3464,6 +3529,19 @@ msgstr "Attiva l'animazione degli oggetti dell'inventario." msgid "Enables caching of facedir rotated meshes." msgstr "Attiva la cache delle mesh ruotate con facedir." +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -4435,10 +4513,12 @@ msgstr "" "- Opache: disabilita la trasparenza" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" "Durata di un tick del server e intervallo con cui gli oggetti sono " "generalmente\n" @@ -4623,10 +4703,6 @@ msgstr "" "Far sì che i colori di nebbia e cielo dipendano da ora del giorno (alba/" "tramonto) e direzione della visuale." -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "Rende opachi tutti i liquidi" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "Livello di compressione della mappa per l'archiviazione su disco" @@ -4688,11 +4764,14 @@ msgstr "" "Attributi di generazione della mappa specifici del generatore di mappe 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" "When the 'snowbiomes' flag is enabled jungles are automatically enabled and\n" -"the 'jungles' flag is ignored." +"the 'jungles' flag is ignored.\n" +"The 'temples' flag disables generation of desert temples. Normal dungeons " +"will appear instead." msgstr "" "Attributi di generazione della mappa specifici del generatore di mappe v6.\n" "Il valore \"snowbiomes\" abilita il nuovo sistema di 5 biomi.\n" @@ -4735,10 +4814,6 @@ msgstr "Ritardo di generazione della mesh del blocco mappa" msgid "Mapblock mesh generation threads" msgstr "Thread per la generazione delle mesh dei blocchi mappa" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "Dimensione in MB del generatore mesh del blocco mappa" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "Scadenza dello scaricamento del blocco mappa" @@ -5016,6 +5091,11 @@ msgstr "Livello di registro minimo da scriversi nell'area di messaggistica." msgid "Minimap scan height" msgstr "Altezza di scansione della minimappa" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Minimum dig repetition interval" +msgstr "Intervallo di ripetizione per il piazzamento" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "" @@ -5085,6 +5165,11 @@ msgstr "Sensibilità del mouse" msgid "Mouse sensitivity multiplier." msgstr "Moltiplicatore della sensibilità del mouse." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Movement threshold" +msgstr "Soglia della caverna" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "Rumore del fango" @@ -5231,10 +5316,6 @@ msgstr "Occlusion Culler" msgid "Occlusion Culling" msgstr "Occlusion culling su lato server" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "Liquidi opachi" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -5250,6 +5331,11 @@ msgstr "" "Apre il menu di pausa quando si perde la messa a fuoco della finestra. Non\n" "mette in pausa se è aperta una finestra di dialogo." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "OpenGL debug" +msgstr "Debug del generatore mappa" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "Sovrascrittura opzionale per i colori dei link web in chat." @@ -5389,6 +5475,15 @@ msgid "Proportion of large caves that contain liquid." msgstr "" "Proporzione delle grotte di grandi dimensioni che contiene del liquido." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Protocol version minimum" +msgstr "La versione del protocollo non coincide. " + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -5407,6 +5502,10 @@ msgstr "Solleva il terreno per creare vallate attorno ai fiumi." msgid "Random input" msgstr "Dati in ingresso casuali" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "Messaggi di chat recenti" @@ -5600,7 +5699,6 @@ msgstr "" "Usa 0 per la qualità predefinita." #: src/settings_translation_file.cpp -#, fuzzy msgid "Screenshots" msgstr "Screenshot" @@ -5623,13 +5721,14 @@ msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous" msgstr "Si veda http://www.sqlite.org/pragma.html#pragma_synchronous" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Select the antialiasing method to apply.\n" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5794,8 +5893,9 @@ msgstr "" "Intervallo: da -1 a 1.0" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" "Imposta la Lingua. Lascia vuoto per usare la Lingua di sistema.\n" @@ -5845,6 +5945,10 @@ msgstr "" "Imposta su vero per abilitare l'effetto bagliore.\n" "I colori brillanti brilleranno sugli oggetti vicini." +#: src/settings_translation_file.cpp +msgid "Set to true to enable volumetric lighting effect (a.k.a. \"Godrays\")." +msgstr "" + #: src/settings_translation_file.cpp #, fuzzy msgid "Set to true to enable waving leaves." @@ -5900,11 +6004,11 @@ 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.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" "Gli shader permettono l'utilizzo di effetti visivi avanzati e potrebbero " "aumentare\n" @@ -5998,16 +6102,6 @@ msgstr "" "L'alterazione di questo valore è per uso speciale, si raccomanda di\n" "lasciarlo invariato." -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" -"Dimensione della cache del blocco mappa del generatore della mesh.\n" -"Aumentandola si incrementerà l'impatto percentuale sulla cache, diminuendo\n" -"i dati copiati dal thread principale, riducendo così lo sfarfallio." - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "Inclinazione dell'orbita di un corpo celeste" @@ -6047,7 +6141,7 @@ msgstr "Illuminazione uniforme" #, fuzzy msgid "" "Smooths rotation of camera when in cinematic mode, 0 to disable. Enter " -"cinematic mode by using the key set in Change Keys." +"cinematic mode by using the key set in Controls." msgstr "" "Rende fluida la rotazione della telecamera in modalità cinematic. 0 per " "disattivare." @@ -6073,6 +6167,15 @@ msgstr "Velocità furtiva, in nodi al secondo." msgid "Soft shadow radius" msgstr "Raggio dell'ombra morbida" +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "Audio" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sound Extensions Blacklist" +msgstr "Contenuti esclusi da ContentDB" + #: src/settings_translation_file.cpp msgid "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -6286,6 +6389,12 @@ msgstr "" "Il formato predefinito in cui si salvano i profili,\n" "quando si chiama \"/profiler save [format]\" senza formato." +#: 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 #, fuzzy msgid "" @@ -6294,13 +6403,27 @@ msgstr "" "Il percorso del file relativo al percorso del vostro mondo in cui saranno " "salvati i profili." +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "L'identificatore del joystick da usare" #: src/settings_translation_file.cpp #, fuzzy -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "La distanza in pixel richiesta per avviare l'interazione touch screen." #: src/settings_translation_file.cpp @@ -6317,6 +6440,16 @@ msgstr "" "Il valore predefinito è 1.0 (1/2 nodo).\n" "Richiede l'abilitazione dei liquidi ondulanti." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"The minimum time in seconds it takes between digging nodes when holding\n" +"the dig button." +msgstr "" +"Il tempo in secondi che intercorre tra il piazzamento dei nodi quando si " +"tiene\n" +"premuto il pulsante piazza." + #: src/settings_translation_file.cpp msgid "The network interface that the server listens on." msgstr "Su quale interfaccia di rete sarà in ascolto il server." @@ -6349,11 +6482,12 @@ 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" "OpenGL is the default for desktop, and OGLES2 for Android.\n" -"Shaders are supported by OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" "Il rendering di back-end.\n" "Dopo averlo cambiato è necessario un riavvio.\n" @@ -6442,6 +6576,10 @@ msgstr "" "Terzo di 4 rumori 2D che insieme definiscono l'intervallo di altezza " "collinare/montuoso." +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -6500,15 +6638,15 @@ msgstr "Sensibilità del mouse" msgid "Touchscreen sensitivity multiplier." msgstr "Moltiplicatore della sensibilità del mouse." -#: src/settings_translation_file.cpp -#, fuzzy -msgid "Touchscreen threshold" -msgstr "Soglia del touch screen" - #: src/settings_translation_file.cpp msgid "Tradeoffs for performance" msgstr "Compromessi per migliorare le prestazioni" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Translucent liquids" +msgstr "Liquidi opachi" + #: src/settings_translation_file.cpp msgid "Transparency Sorting Distance" msgstr "Distanza di Ordinamento della Trasparenza" @@ -6554,8 +6692,11 @@ msgstr "" "prestazioni." #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 del file JSON che fornisce informazioni sulla versione più recente di " "Minetest" @@ -6687,10 +6828,6 @@ msgstr "" msgid "User Interfaces" msgstr "Interfacce utente" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "VBO" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "Sincronia verticale" @@ -6784,6 +6921,10 @@ msgstr "Il joystick virtuale aziona il pulsante \"Speciale\"" msgid "Volume" msgstr "Volume" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Volume of all sounds.\n" @@ -6792,6 +6933,16 @@ msgstr "" "Volume dei suoni.\n" "Necessita l'attivazione dell'audio." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volume when unfocused" +msgstr "FPS quando il gioco è in pausa o in secondo piano" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volumetric lighting" +msgstr "Illuminazione uniforme" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -7102,12 +7253,18 @@ msgstr "Limite parallelo cURL" #~ msgid "(game support required)" #~ msgstr "(è richiesto il supporto del gioco)" +#~ msgid "- Address: " +#~ msgstr "- Indirizzo: " + #~ msgid "- Creative Mode: " #~ msgstr "- Modalità creativa: " #~ msgid "- Damage: " #~ msgstr "- Ferimento: " +#~ msgid "- Port: " +#~ msgstr "- Porta: " + #~ msgid "" #~ "0 = parallax occlusion with slope information (faster).\n" #~ "1 = relief mapping (slower, more accurate)." @@ -7147,6 +7304,13 @@ msgstr "Limite parallelo cURL" #~ "Si noti che il campo indirizzo nel menu principale sovrascrive questa " #~ "impostazione." +#~ msgid "" +#~ "Adjust dpi configuration to your screen (non X11/Android only) e.g. for " +#~ "4k screens." +#~ msgstr "" +#~ "Regolate la configurazione dpi per il vostro schermo (solo non X11/" +#~ "Android) per es. per schermi 4K." + #~ msgid "" #~ "Adjust the gamma encoding for the light tables. Higher numbers are " #~ "brighter.\n" @@ -7204,6 +7368,9 @@ msgstr "Limite parallelo cURL" #~ msgid "Bits per pixel (aka color depth) in fullscreen mode." #~ msgstr "Bit per pixel (o profondità di colore) in modalità schermo intero." +#~ msgid "Block bounds shown for all blocks" +#~ msgstr "I limiti del blocco sono mostrati per tutti i blocchi" + #~ msgid "Bump Mapping" #~ msgstr "Bump Mapping" @@ -7228,6 +7395,9 @@ msgstr "Limite parallelo cURL" #~ msgid "Center of light curve mid-boost." #~ msgstr "Centro dell'aumento mediano della curva della luce." +#~ msgid "Change Keys" +#~ msgstr "Cambia i Tasti" + #, fuzzy #~ msgid "Change keys" #~ msgstr "Cambia i Tasti" @@ -7304,6 +7474,38 @@ msgstr "Limite parallelo cURL" #~ "Controlla la larghezza delle gallerie, un valore più piccolo crea " #~ "gallerie più larghe." +#, fuzzy, c-format +#~ msgid "" +#~ "Controls:\n" +#~ "- %s: move forwards\n" +#~ "- %s: move backwards\n" +#~ "- %s: move left\n" +#~ "- %s: move right\n" +#~ "- %s: jump/climb up\n" +#~ "- %s: dig/punch/use\n" +#~ "- %s: place/use\n" +#~ "- %s: sneak/climb down\n" +#~ "- %s: drop item\n" +#~ "- %s: inventory\n" +#~ "- Mouse: turn/look\n" +#~ "- Mouse wheel: select item\n" +#~ "- %s: chat\n" +#~ msgstr "" +#~ "Controlli:\n" +#~ "- %s: avanza\n" +#~ "- %s: arretra\n" +#~ "- %s: sinistra\n" +#~ "- %s: destra\n" +#~ "- %s: salta/scala su\n" +#~ "- %s: scava/colpisci\n" +#~ "- %s: piazza/utilizza\n" +#~ "- %s: furtivo/scendi\n" +#~ "- %s: getta via oggetto\n" +#~ "- %s: inventario\n" +#~ "- Mouse: girati/guarda\n" +#~ "- Rotella mouse: scegli oggetto\n" +#~ "- %s: chat\n" + #~ msgid "Creative" #~ msgstr "Creativa" @@ -7313,6 +7515,9 @@ msgstr "Limite parallelo cURL" #~ msgid "Crosshair color (R,G,B)." #~ msgstr "Colore del mirino (R,G,B)." +#~ msgid "DPI" +#~ msgstr "DPI" + #~ msgid "Damage" #~ msgstr "Ferimento" @@ -7407,6 +7612,13 @@ msgstr "Limite parallelo cURL" #~ msgid "Enable register confirmation" #~ msgstr "Abilita conferma registrazione" +#~ msgid "" +#~ "Enable vertex buffer objects.\n" +#~ "This should greatly improve graphics performance." +#~ msgstr "" +#~ "Attivare gli oggetti tampone per i vertici.\n" +#~ "Questo dovrebbe migliorare notevolmente le prestazioni grafiche." + #~ msgid "Enabled" #~ msgstr "Abilitato" @@ -7716,6 +7928,9 @@ msgstr "Limite parallelo cURL" #~ msgid "Instrumentation" #~ msgstr "Predisposizione" +#~ msgid "Invalid gamespec." +#~ msgstr "Requisiti del gioco non validi." + #~ msgid "Inventory key" #~ msgstr "Tasto inventario" @@ -8413,6 +8628,12 @@ msgstr "Limite parallelo cURL" #~ msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles." #~ msgstr "Fa lavorare DirectX con LuaJIT. Disabilitare se provoca problemi." +#~ msgid "Makes all liquids opaque" +#~ msgstr "Rende opachi tutti i liquidi" + +#~ msgid "Mapblock mesh generator's MapBlock cache size in MB" +#~ msgstr "Dimensione in MB del generatore mesh del blocco mappa" + #~ msgid "Menus" #~ msgstr "Menu" @@ -8651,15 +8872,22 @@ msgstr "Limite parallelo cURL" #~ msgid "Simple Leaves" #~ msgstr "Foglie Semplici" +#~ msgid "" +#~ "Size of the MapBlock cache of the mesh generator. Increasing this will\n" +#~ "increase the cache hit %, reducing the data being copied from the main\n" +#~ "thread, thus reducing jitter." +#~ msgstr "" +#~ "Dimensione della cache del blocco mappa del generatore della mesh.\n" +#~ "Aumentandola si incrementerà l'impatto percentuale sulla cache, " +#~ "diminuendo\n" +#~ "i dati copiati dal thread principale, riducendo così lo sfarfallio." + #~ msgid "Smooth Lighting" #~ msgstr "Illuminazione Uniforme" #~ msgid "Smooths rotation of camera. 0 to disable." #~ msgstr "Rende fluida la rotazione della telecamera. 0 per disattivare." -#~ msgid "Sound" -#~ msgstr "Audio" - #~ msgid "Special" #~ msgstr "Speciale" @@ -8724,6 +8952,10 @@ 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" @@ -8779,6 +9011,9 @@ msgstr "Limite parallelo cURL" #~ "Se impostato a 0, MSAA è disabilitato.\n" #~ "È necessario riavviare dopo aver modificato questa opzione." +#~ msgid "VBO" +#~ msgstr "VBO" + #~ msgid "Variation of hill height and lake depth on floatland smooth terrain." #~ msgstr "" #~ "Variazione dell'altezza delle colline, e della profondità dei laghi sul\n" @@ -8884,8 +9119,14 @@ msgstr "Limite parallelo cURL" #~ msgid "You died." #~ msgstr "Sei morto" +#~ msgid "You have no games installed." +#~ msgstr "Non hai nessun gioco installato." + #~ msgid "Z" #~ msgstr "Z" #~ msgid "needs_fallback_font" #~ msgstr "no" + +#~ msgid "ok" +#~ msgstr "va bene" diff --git a/po/ja/minetest.po b/po/ja/minetest.po index 1621f6734..f08ea965f 100644 --- a/po/ja/minetest.po +++ b/po/ja/minetest.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: Japanese (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" -"PO-Revision-Date: 2023-11-22 00:17+0000\n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" +"PO-Revision-Date: 2024-08-08 13:09+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.2\n" +"X-Generator: Weblate 5.7-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -71,8 +71,8 @@ msgid "Command not available: " msgstr "コマンドは使用できません: " #: builtin/common/chatcommands.lua -msgid "Get help for commands" -msgstr "コマンドのヘルプを表示する" +msgid "Get help for commands (-t: output in chat)" +msgstr "コマンドのヘルプを表示 (-t: チャットで出力)" #: builtin/common/chatcommands.lua msgid "" @@ -82,12 +82,8 @@ msgstr "" "べてを一覧表示します。" #: builtin/common/chatcommands.lua -msgid "[all | ]" -msgstr "[all | ]" - -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" -msgstr "OK" +msgid "[all | ] [-t]" +msgstr "[all | ] [-t]" #: builtin/fstk/ui.lua msgid "" @@ -105,6 +101,10 @@ msgstr "エラーが発生しました:" msgid "Main menu" msgstr "メインメニュー" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "OK" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "再接続" @@ -133,19 +133,26 @@ msgstr "プロトコルはバージョン$1のみをサポートしています msgid "We support protocol versions between version $1 and $2." msgstr "バージョン$1から$2までのプロトコルをサポートしています。" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "「$1」はすでに存在します。上書きしますか?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" +msgstr "「$1」をインストール中にエラー: $2" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." -msgstr "$1 と依存MOD $2 がインストールされます。" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download \"$1\"" +msgstr "「$1」のダウンロードに失敗" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" -msgstr "$1 by $2" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr "$1のダウンロードに失敗" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "「$1」の展開に失敗 (ディスク容量の不足、サポートされていないファイルタイプま" +"たは壊れたアーカイブ)" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" @@ -153,157 +160,157 @@ msgstr "" "$1 ダウンロード中、\n" "$2 ダウンロード待機中" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." msgstr "$1 ダウンロード中..." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "$1 つの必要な依存MODが見つかりませんでした。" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "$1 がインストールされ、依存MOD $2 はスキップされます。" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "すべて" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "インストール済み" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "メインメニューへ" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "MinetestがcURLなしでコンパイルされた場合、コンテンツDBは使用できません" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "ダウンロード中..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "パッケージの依存関係を取得するエラー" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "ゲーム" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +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 "Mods" +msgstr "MOD" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "パッケージを取得できませんでした" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "見つかりませんでした" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "更新なし" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "待機中" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "テクスチャパック" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "パッケージ $1 が見つかりませんでした。" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "削除" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "更新" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "すべて更新 [$1]" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "View more information in a web browser" +msgstr "Webブラウザで詳細を見る" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "You need to install a game before you can install a mod" +msgstr "MODをインストールする前に、ゲームをインストールする必要があります" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 and $2 dependencies will be installed." +msgstr "$1 と依存MOD $2 がインストールされます。" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "$1 by $2" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "$1 つの必要な依存MODが見つかりませんでした。" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "$1 がインストールされ、依存MOD $2 はスキップされます。" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "インストール済み" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "基盤ゲーム:" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "キャンセル" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "MinetestがcURLなしでコンパイルされた場合、コンテンツDBは使用できません" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "依存MOD:" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "ダウンロード中..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "「$1」をインストール中にエラー: $2" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download \"$1\"" -msgstr "「$1」のダウンロードに失敗" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "$1のダウンロードに失敗" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "" -"「$1」の展開に失敗 (サポートされていないファイル形式または壊れたアーカイブ)" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "ゲーム" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "入手" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "$1 のインストール" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "不足依存MODインストール" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "読み込み中..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "MOD" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "パッケージを取得できませんでした" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "見つかりませんでした" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "更新なし" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "見つかりません" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "上書き" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "基盤となるゲームが正しいかどうか確認してください。" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" -msgstr "待機中" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" +msgstr "「$1」はすでに存在します。上書きしますか?" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "テクスチャパック" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "パッケージ $1 が見つかりませんでした。" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "削除" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "更新" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "すべて更新 [$1]" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "Webブラウザで詳細を見る" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" -msgstr "MODをインストールする前に、ゲームをインストールする必要があります" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" +msgstr "上書き" #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" @@ -451,10 +458,21 @@ msgstr "作成" msgid "Decorations" msgstr "デコレーション" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "砂漠の寺院" + #: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." msgstr "Development Testは開発者用です。" +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "砂漠のバイオームで生成された異なるダンジョンのバリエーション(ダンジョンが有効" +"になっている場合のみ)" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "ダンジョン" @@ -640,7 +658,7 @@ msgstr "パスワード" #: builtin/mainmenu/dlg_register.lua msgid "Passwords do not match" -msgstr "パスワードが一致しない" +msgstr "パスワードが一致しません" #: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua msgid "Register" @@ -828,10 +846,6 @@ msgstr "アクセシビリティ" msgid "Back" msgstr "戻る" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "キー変更" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -841,9 +855,10 @@ msgstr "チャット" msgid "Clear" msgstr "Clear" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: 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" @@ -924,7 +939,7 @@ msgstr "とても弱く" #: builtin/mainmenu/tab_about.lua msgid "About" -msgstr "情報" +msgstr "ContentDBについて" #: builtin/mainmenu/tab_about.lua msgid "Active Contributors" @@ -1046,6 +1061,17 @@ msgstr "ゲームをインストール" msgid "Install games from ContentDB" msgstr "コンテンツDBからゲームをインストール" +#: builtin/mainmenu/tab_local.lua +msgid "Minetest doesn't come with a game by default." +msgstr "Minetest は初期状態でゲームが付属していません。" + +#: builtin/mainmenu/tab_local.lua +msgid "" +"Minetest is a game-creation platform that allows you to play many different " +"games." +msgstr "Minetestは、さまざまなゲームで遊ぶことを可能にするゲーム制作プラットフォーム" +"です." + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "新規作成" @@ -1079,8 +1105,8 @@ msgid "Start Game" msgstr "ゲームスタート" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." -msgstr "ゲームがインストールされていません。" +msgid "You need to install a game before you can create a world." +msgstr "ワールドを作る前に、ゲームをインストールする必要があります。" #: builtin/mainmenu/tab_online.lua msgid "Address" @@ -1159,18 +1185,10 @@ msgstr "テクスチャを読み込み中..." msgid "Rebuilding shaders..." msgstr "シェーダーを再構築中..." -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "接続エラー (タイムアウト?)" - #: src/client/clientlauncher.cpp msgid "Could not find or load game: " msgstr "ゲームが見つからないか読み込めません: " -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "無効なゲーム情報です。" - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "メインメニュー" @@ -1195,7 +1213,11 @@ msgstr "パスワードファイルを開けませんでした: " msgid "Provided world path doesn't exist: " msgstr "ワールドが存在しません: " -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "メディアを受信中..." + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp msgid "" "\n" "Check debug.txt for details." @@ -1203,18 +1225,10 @@ msgstr "" "\n" "詳細はdebug.txtを確認してください。" -#: src/client/game.cpp -msgid "- Address: " -msgstr "- アドレス: " - #: src/client/game.cpp msgid "- Mode: " msgstr "- モード: " -#: src/client/game.cpp -msgid "- Port: " -msgstr "- ポート: " - #: src/client/game.cpp msgid "- Public: " msgstr "- 公開サーバー: " @@ -1249,10 +1263,6 @@ msgstr "自動前進 有効" msgid "Block bounds hidden" msgstr "ブロック境界線を非表示" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "すべてのブロックにブロック境界線を表示" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "現在のブロックにブロック境界を表示" @@ -1279,11 +1289,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" @@ -1297,6 +1307,10 @@ msgstr "クライアント側のスクリプトは無効" msgid "Connecting to server..." msgstr "サーバーに接続中..." +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "接続エラー (タイムアウト?)" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "未知の理由で接続に失敗しました" @@ -1305,46 +1319,13 @@ msgstr "未知の理由で接続に失敗しました" msgid "Continue" msgstr "再開" -#: src/client/game.cpp -#, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" -"操作方法:\n" -"- %s: 前進\n" -"- %s: 後退\n" -"- %s: 左移動\n" -"- %s: 右移動\n" -"- %s: ジャンプ/登る\n" -"- %s: 掘る/パンチ/使う\n" -"- %s: 置く/使う\n" -"- %s: スニーク/降りる\n" -"- %s: アイテムを落とす\n" -"- %s: インベントリ\n" -"- マウス: 振り向く/見る\n" -"- マウスホイール: アイテム選択\n" -"- %s: チャット\n" - #: src/client/game.cpp msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1356,15 +1337,15 @@ msgstr "" "操作方法:\n" "メニューなし:\n" "- スライド: 見回す\n" -"- タップ: 置く/使う\n" -"- ロングタップ: 掘る/パンチ/使う  ブロックの破壊- ダブルタップ: 設置/使用\n" -"メニュー/インベントリの操作:\n" +"- タップ: 置く/パンチ/使う(基本)\n" +"- ロングタップ: 掘る/使う(基本)\n" +"メニュー/インベントリを開く:\n" "- ダブルタップ (メニューの外):\n" " --> 閉じる\n" "- アイテムをタッチし、スロットをタッチ:\n" " --> アイテムを移動\n" "- タッチしてドラッグし、二本目の指でタップ:\n" -" --> アイテムを1つスロットに置く\n" +" --> スロットにアイテムを1つ置く\n" #: src/client/game.cpp #, c-format @@ -1436,6 +1417,10 @@ msgstr "霧 無効" msgid "Fog enabled" msgstr "霧 有効" +#: src/client/game.cpp +msgid "Fog enabled by game or mod" +msgstr "霧はゲームやMODによって有効化されている" + #: src/client/game.cpp msgid "Game info:" msgstr "ゲーム情報:" @@ -1456,10 +1441,6 @@ msgstr "アイテムを定義中..." msgid "KiB/s" msgstr "KiB/秒" -#: src/client/game.cpp -msgid "Media..." -msgstr "メディアを受信中..." - #: src/client/game.cpp msgid "MiB/s" msgstr "MiB/秒" @@ -1615,10 +1596,6 @@ msgstr "ワイヤーフレーム 表示" msgid "Zoom currently disabled by game or mod" msgstr "ズームはゲームやMODによって無効化されている" -#: src/client/game.cpp -msgid "ok" -msgstr "決定" - #: src/client/gameui.cpp msgid "Chat currently disabled by game or mod" msgstr "チャットはゲームやMODによって無効化されている" @@ -1939,6 +1916,15 @@ msgstr "ミニマップ 表面モード、ズーム x%d" msgid "Minimap in texture mode" msgstr "ミニマップ テクスチャモード" +#: src/client/shader.cpp +#, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "「%s」シェーダーをコンパイルできませんでした。" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "シェーダーは有効ですが、このドライバはGLSLをサポートしていません。" + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2054,7 +2040,7 @@ msgstr "キーが重複しています" #: src/gui/guiKeyChangeMenu.cpp msgid "Keybindings." -msgstr "キーに対する機能の割り当て。" +msgstr "キーに対する機能の割り当てです。" #: src/gui/guiKeyChangeMenu.cpp msgid "Left" @@ -2132,6 +2118,18 @@ msgstr "ズーム" msgid "press key" msgstr "キー入力待ち" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "開く" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "URLを開く?" + +#: src/gui/guiOpenURL.cpp +msgid "Unable to open URL" +msgstr "URLを開くことができない" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "変更" @@ -2165,6 +2163,7 @@ msgstr "音量: %d%%" #. 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 "ja" @@ -2383,13 +2382,6 @@ msgstr "アクティブなオブジェクトの送信範囲" msgid "Adds particles when digging a node." msgstr "ノードを掘る際にパーティクルを追加します。" -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" -"4kスクリーンなどのための、画面の解像度の設定です (非X11/Android環境のみ)。" - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2418,6 +2410,10 @@ msgstr "管理者名" msgid "Advanced" msgstr "詳細" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "液体が半透明になることを可能にします。" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2476,6 +2472,28 @@ msgstr "ツールチップにアイテム名を付け加えます。" msgid "Apple trees noise" 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 "" +"色帯状のアーティファクトを減らすためにディザリングを適用します。\n" +"ディザリングにより、可逆圧縮されたスクリーンショットのサイズが大幅に増加しま" +"す。\n" +"また、ディスプレイまたはオペレーティング " +"システムが追加のディザリングを実行する場合、\n" +"またはカラー チャネルが 8 ビットに量子化されていない場合、" +"ディザリングは正しく動作\n" +"しません。\n" +"OpenGL ES では、" +"ディザリングはシェーダーが高い浮動小数点精度をサポートしている場合に\n" +"のみ機能し、パフォーマンスに大きな影響を与える可能性があります。" + #: src/settings_translation_file.cpp msgid "Arm inertia" msgstr "腕の惰性" @@ -2499,22 +2517,36 @@ msgid "" "clients.\n" "Small values potentially improve performance a lot, at the expense of " "visible\n" -"rendering glitches (some blocks will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." msgstr "" "この距離でサーバーはどのブロックをクライアントへ送信するかを積極的に\n" "最適化します。\n" "小さい値に設定すると、描画の視覚的な不具合を犠牲にして、\n" "パフォーマンスが大幅に向上する可能性があります(いくつかのブロックは\n" -"水中や洞窟、時には陸の上でも描画されません)。\n" +"洞窟で正しく描画されません)。\n" "max_block_send_distance より大きい値に設定すると、この最適化は\n" "無効になります。 \n" "マップブロック(16ノード)で表記。" +#: 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 "" +"この距離でサーバーはよりシンプルで安価なオクルージョンチェックを行います。\n" +"小さい値に設定すると、描画の視覚的な不具合(不足するブロック)を一時的に\n" +"犠牲にして、パフォーマンスが向上する可能性があります。\n" +"これは特に非常に広い視野(500以上)に有用です。\n" +"マップブロック(16ノード)で表記。" + #: src/settings_translation_file.cpp msgid "Audio" msgstr "オーディオ" @@ -2575,6 +2607,10 @@ msgstr "バイオームAPI" msgid "Biome noise" msgstr "バイオームノイズ" +#: src/settings_translation_file.cpp +msgid "Block cull optimize distance" +msgstr "ブロックカリングの最適化距離" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "ブロック送信最適化距離" @@ -2633,7 +2669,7 @@ msgstr "カメラの滑らかさ" #: src/settings_translation_file.cpp msgid "Camera smoothing in cinematic mode" -msgstr "映画風モードでのカメラの滑らかさ" +msgstr "シネマティックモードでのカメラの滑らかさ" #: src/settings_translation_file.cpp msgid "Cave noise" @@ -2791,6 +2827,14 @@ msgstr "色つきの霧" msgid "Colored shadows" 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 "" +"使用されるべきでない拡張子ALおよびALCのカンマ区切りリストです。\n" +"テストのために有用です。 詳細は al_extensions.[h,cpp] を参照してください。" + #: src/settings_translation_file.cpp msgid "" "Comma-separated list of flags to hide in the content repository.\n" @@ -2954,10 +2998,6 @@ msgstr "" "十字カーソルの色 (R,G,B)。\n" "オブジェクト十字カーソルの色も制御" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "DPI" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "デバッグログファイルのサイズのしきい値" @@ -3013,6 +3053,27 @@ msgstr "" "レートするものです。\n" "しかし、より多くのリソースを消費します。" +#: 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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" +"接続を許可する最も古いクライアントを定義します。\n" +"古いクライアントは、" +"新しいサーバーに接続するときにクラッシュしないという意味では\n" +"互換性がありますが、期待されるすべての新機能をサポートしているわけではない可" +"能性があります。\n" +"これにより、strict_protocol_version_checking よりも細かい管理ができます。\n" +"Minetest は依然として独自の内部最小値を強制しており、\n" +"strict_protocol_version_checking はこれをが効果的に上書きします。" + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "木にリンゴがある地域を定義します。" @@ -3211,6 +3272,10 @@ msgstr "ブルームを有効化" msgid "Enable Bloom Debug" msgstr "ブルームデバッグを有効化" +#: src/settings_translation_file.cpp +msgid "Enable Debanding" +msgstr "バンディング除去有効" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3237,6 +3302,10 @@ msgstr "" "有効にするとポアソンディスクを使用して「やわらない影」を作ります。それ以外の" "ときはPCFフィルタリングを使用します。" +#: src/settings_translation_file.cpp +msgid "Enable Post Processing" +msgstr "後処理有効" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "レイトレース カリングの有効化" @@ -3284,6 +3353,10 @@ msgstr "MODのセキュリティを有効化" msgid "Enable mouse wheel (scroll) for item selection in hotbar." msgstr "ホットバーの項目選択のためのマウスホイール(スクロール)を有効にします。" +#: src/settings_translation_file.cpp +msgid "Enable random mod loading (mainly used for testing)." +msgstr "ランダムなMODの読み込みを有効にします(主にテストに使用されます)。" + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "ランダムなユーザー入力を有効にします (テストにのみ使用)。" @@ -3313,6 +3386,10 @@ msgstr "" "意味で互換性がありますが、期待しているすべての新機能をサポート\n" "しているわけではありません。" +#: src/settings_translation_file.cpp +msgid "Enable touchscreen" +msgstr "タッチスクリーン有効" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3325,14 +3402,6 @@ msgstr "" "リモートサーバはサーバーに接続するときにメディア (例えば、テクスチャ) を\n" "ダウンロードするための非常に高速な方法を提供します。" -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" -"頂点バッファオブジェクトを有効にします。\n" -"これにより、グラフィックスのパフォーマンスが大幅に向上します。" - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3371,6 +3440,20 @@ msgstr "インベントリのアイテムのアニメーションを有効にし msgid "Enables caching of facedir rotated meshes." msgstr "facedir回転メッシュのキャッシングを有効にします。" +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +msgstr "OpenGL ドライバでデバッグとエラーチェックを有効にします。" + +#: 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." +msgstr "タッチスクリーンモードを有効にし、タッチスクリーンでゲームを遊ぶことができま" +"す。" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -4293,12 +4376,13 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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" +"クライアント メニューからホストされるセッションには適用されません。" #: src/settings_translation_file.cpp msgid "Length of liquid waves." @@ -4468,10 +4552,6 @@ msgid "" "Make fog and sky colors depend on daytime (dawn/sunset) and view direction." msgstr "霧と空の色を日中(夜明け/日没)と視線方向に依存させます。" -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "すべての液体を不透明にする" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "ディスクストレージのマップ圧縮レベル" @@ -4531,12 +4611,16 @@ 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." +"the 'jungles' flag is ignored.\n" +"The 'temples' flag disables generation of desert temples. Normal dungeons " +"will appear instead." msgstr "" "マップジェネレータ v6 に固有のマップ生成属性。\n" "'snowbiomes' フラグは新しい5つのバイオームシステムを有効にします。\n" "'snowbiomes' フラグを有効にすると、ジャングルが自動的に有効になり、\n" -"'jungles' フラグは無視されます。" +"'jungles' フラグは無視されます。\n" +"'temples' フラグは砂漠の寺院の生成を無効にします。代わりに通常のダンジョンが" +"生成されます。" #: src/settings_translation_file.cpp msgid "" @@ -4574,10 +4658,6 @@ msgstr "マップブロックのメッシュ生成遅延" msgid "Mapblock mesh generation threads" msgstr "マップブロックメッシュ生成スレッド数" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "メッシュ生成のマップブロックキャッシュサイズ(MB)" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "マップブロック破棄タイムアウト" @@ -4844,6 +4924,10 @@ msgstr "チャットに書き込まれる最小限のログレベル。" msgid "Minimap scan height" msgstr "ミニマップのスキャン高さ" +#: src/settings_translation_file.cpp +msgid "Minimum dig repetition interval" +msgstr "繰り返し掘る最小間隔" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "マップチャンクあたりの大きな洞窟の乱数の最小値。" @@ -4912,6 +4996,10 @@ msgstr "マウスの感度" msgid "Mouse sensitivity multiplier." msgstr "マウス感度の倍率。" +#: src/settings_translation_file.cpp +msgid "Movement threshold" +msgstr "動きのしきい値" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "泥ノイズ" @@ -5048,10 +5136,6 @@ msgstr "オクルージョンカラー" msgid "Occlusion Culling" msgstr "オクルージョンカリング" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "不透明な液体" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -5066,6 +5150,10 @@ msgstr "" "ウィンドウのフォーカスが失われたときにポーズメニューを開きます。\n" "フォームスペックが開かれているときはポーズメニューを開きません。" +#: src/settings_translation_file.cpp +msgid "OpenGL debug" +msgstr "OpenGLのデバッグ" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "チャットのウェブリンクの色を上書きするオプションです。" @@ -5196,6 +5284,14 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "大きな洞窟の液体を含む割合です。" +#: src/settings_translation_file.cpp +msgid "Protocol version minimum" +msgstr "プロトコルバージョンの最小限" + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "パンチのジェスチャー" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -5213,6 +5309,10 @@ msgstr "川の周りに谷を作るために地形を上げます。" msgid "Random input" msgstr "ランダム入力" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "MODのランダム読み込み" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "最近のチャットメッセージ" @@ -5425,8 +5525,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5444,8 +5544,8 @@ msgstr "" "\n" "* 必須なし - アンチエイリアシングなし (既定)\n" "\n" -"* FSAA - ハードウェア認証フルスクリーンアンチエイリアシング(シェーダーと互換" -"性なし)\n" +"* FSAA - ハードウェアによるフルスクリーンアンチエイリアシング\n" +"(後処理およびアンダーサンプリングと互換性なし)\n" "別名 マルチサンプルアンチエイリアシング(MSAA)\n" "ブロックの縁を滑らかにしますが、テクスチャの内部には影響しません。\n" "このオプションを変更するには再起動が必要です。\n" @@ -5456,8 +5556,8 @@ msgstr "" "処理速度と画質のバランスをとります。\n" "\n" "* SSAA - スーパーサンプリングアンチエイリアシング(シェーダーが必要)\n" -"シーンの高解像度画像をレンダリングした後、スケールダウンしてエイリアシング効" -"果を\n" +"シーンの高解像度画像をレンダリングした後、" +"スケールダウンしてエイリアシング効果を\n" "軽減します。これは最も遅く、最も正確な方式です。" #: src/settings_translation_file.cpp @@ -5588,11 +5688,11 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" -"言語を設定してください。システム言語を使用するには空のままにします。\n" -"変更後は再起動が必要です。" +"言語を設定してください。初期状態ではシステム言語が使用されます。\n" +"変更後の再起動が必要です。" #: src/settings_translation_file.cpp msgid "" @@ -5632,6 +5732,11 @@ msgstr "" "有効にするとブルーム効果が有効になります。\n" "明るい色が隣接するオブジェクトににじみます。" +#: src/settings_translation_file.cpp +msgid "Set to true to enable volumetric lighting effect (a.k.a. \"Godrays\")." +msgstr "true " +"に設定すると、ボリュームライティング効果(別名「Godrays」)が有効になります。" + #: src/settings_translation_file.cpp msgid "Set to true to enable waving leaves." msgstr "有効にすると葉が揺れるようになります。" @@ -5678,12 +5783,10 @@ msgstr "シェーダー" msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" -"シェーダーは高度な視覚効果を可能にし、ビデオカードによっては\n" -"パフォーマンスが向上する可能性があります。\n" -"これはOpenGLビデオバックエンドでのみ機能します。" +"シェーダーにより高度な視覚効果が可能になり、一部のビデオ カードの\n" +"パフォーマンスが向上する場合があります。" #: src/settings_translation_file.cpp msgid "Shadow filter quality" @@ -5767,16 +5870,6 @@ msgstr "" "この値を変更するのは特別な用途のためです。変更しないで\n" "おくことをお勧めします。" -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" -"メッシュ生成のマップブロックキャッシュサイズ。これを大きくすると、\n" -"キャッシュヒット率が上がり、メインスレッドからコピーされるデータが\n" -"減るため、ジッタが減少します。" - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "天体の軌道傾斜角" @@ -5812,10 +5905,10 @@ 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 Change Keys." +"cinematic mode by using the key set in Controls." msgstr "" -"映画風モードでのカメラの旋回を滑らかにします。無効にするには 0。キー変更で設" -"定されたキーを使用して映画風モードに切替えます。" +"シネマティックモードでのカメラの旋回を滑らかにし、0 で無効にします。\n" +"キー割り当てで設定されたキーを使用してシネマティックモードに切替えます。" #: src/settings_translation_file.cpp msgid "" @@ -5837,6 +5930,14 @@ msgstr "スニーク時の速度、1秒あたりのノード数です。" msgid "Soft shadow radius" 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 "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -6038,18 +6139,47 @@ msgstr "" "観測記録が保存されている既定のファイル形式、\n" "`/profiler save [format]`がファイル形式なしで呼び出されたときに使われます。" +#: 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 "" "The file path relative to your world path in which profiles will be saved to." msgstr "観測記録が保存されるワールドパスに対する相対的なファイルパスです。" +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" +"プレイヤー/エンティティをパンチするためのジェスチャーです。\n" +"これはゲームやMODによって上書きされる可能性があります。\n" +"\n" +"* ショートタップ\n" +"使いやすく、名前は挙げませんが他のゲームでもよく知られています。\n" +"\n" +"* ロングタップ\n" +"古典的な Minetest のモバイル版操作として知られています。\n" +"戦闘はほぼ不可能です。" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "使用するジョイスティックの識別子" #: src/settings_translation_file.cpp -msgid "The length in pixels it takes for touchscreen interaction to start." -msgstr "タッチスクリーン操作が開始されるまでにかかるピクセル単位の長さ。" +msgid "" +"The length in pixels after which a touch interaction is considered movement." +msgstr "タッチ操作が動きと見なされるまでのピクセル単位の長さです。" #: src/settings_translation_file.cpp msgid "" @@ -6063,6 +6193,14 @@ msgstr "" "0.0 = 波はまったく動きません。\n" "既定は 1.0 (1/2 ノード) です。" +#: src/settings_translation_file.cpp +msgid "" +"The minimum time in seconds it takes between digging nodes when holding\n" +"the dig button." +msgstr "" +"掘削ボタンを押したときにノードを掘る間にかかる秒単位の\n" +"最小時間です。" + #: src/settings_translation_file.cpp msgid "The network interface that the server listens on." msgstr "サーバーが待機しているネットワークインターフェース。" @@ -6097,12 +6235,12 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" "レンダリングのバックエンドです。\n" -"注:これを変更した後は再起動が必要です。\n" +"注:これを変更した後は再起動が必要です!\n" "デスクトップでは OpenGL が、Android では OGLES2 が規定です。\n" -"シェーダーは OpenGL と OGLES2 (実験的) でサポートされています。" +"シェーダーは OGLES1 以外のすべてでサポートされています。" #: src/settings_translation_file.cpp msgid "" @@ -6170,6 +6308,10 @@ msgstr "" msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "一緒に丘陵/山岳地帯の高さを定義する2Dノイズ4つのうちの3番目です。" +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "ロングタップのしきい値" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -6223,14 +6365,14 @@ msgstr "タッチスクリーンの感度" msgid "Touchscreen sensitivity multiplier." msgstr "タッチスクリーン感度の倍率。" -#: src/settings_translation_file.cpp -msgid "Touchscreen threshold" -msgstr "タッチスクリーンのしきい値" - #: src/settings_translation_file.cpp msgid "Tradeoffs for performance" msgstr "パフォーマンスのためのトレードオフ" +#: src/settings_translation_file.cpp +msgid "Translucent liquids" +msgstr "半透明な液体" + #: src/settings_translation_file.cpp msgid "Transparency Sorting Distance" msgstr "透明度の並べ替え距離" @@ -6275,8 +6417,12 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" -msgstr "最新のMinetestリリースに関する情報を提供するJSONファイルへのURL" +"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 "" +"最新の Minetest リリースに関する情報を提供する JSON ファイルへの URL\n" +"これが空の場合、エンジンは更新をチェックしません。" #: src/settings_translation_file.cpp msgid "URL to the server list displayed in the Multiplayer Tab." @@ -6332,9 +6478,8 @@ msgid "Use anisotropic filtering when looking at textures from an angle." msgstr "ある角度からテクスチャを見るときに異方性フィルタリングを使用します。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Use bilinear filtering when scaling textures." -msgstr "テクスチャを拡大縮小する場合はトライリニアフィルタリングを使用します。" +msgstr "テクスチャを拡大縮小するときはバイリニアフィルタリングを使用します。" #: src/settings_translation_file.cpp msgid "Use crosshair for touch screen" @@ -6349,15 +6494,14 @@ msgstr "" "有効にすると、十字カーソルが表示されオブジェクトの選択に使用されます。" #: src/settings_translation_file.cpp -#, fuzzy 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 "" -"テクスチャを縮小するときにミップマッピングを使用します。特に高解像度の\n" -"テクスチャパックを使用するときにパフォーマンスがわずかに向上する\n" -"可能性があります。ガンマ補正の縮小はサポートされていません。" +"テクスチャを拡大縮小するときにミップマッピングを使用します。\n" +"特に高解像度のテクスチャパックを使用するときにパフォーマンスがわずかに\n" +"向上する可能性があります。ガンマ補正の縮小はサポートされていません。" #: src/settings_translation_file.cpp msgid "" @@ -6370,13 +6514,12 @@ msgstr "" "対するレイトレースオクルージョンカリング テストの使用を有効にします。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Use trilinear filtering when scaling textures.\n" "If both bilinear and trilinear filtering are enabled, trilinear filtering\n" "is applied." msgstr "" -"テクスチャを縮小するときはトリリニアフィルタリングを使用します。\n" +"テクスチャを拡大縮小するときはトリリニアフィルタリングを使用します。\n" "バイリニアフィルタリングとトリリニアフィルタリングの両方が有効な場合、\n" "トリリニアフィルタリングが適用されます。" @@ -6394,10 +6537,6 @@ msgstr "" msgid "User Interfaces" msgstr "ユーザーインターフェース" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "VBO" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "VSYNC" @@ -6490,6 +6629,10 @@ msgstr "バーチャルパッドで Aux1 ボタン動作" msgid "Volume" msgstr "音量" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +msgstr "ウィンドウがフォーカスされていないときの音量乗数です。" + #: src/settings_translation_file.cpp msgid "" "Volume of all sounds.\n" @@ -6498,6 +6641,14 @@ msgstr "" "すべての音の音量。\n" "サウンド システムを有効にする必要があります。" +#: src/settings_translation_file.cpp +msgid "Volume when unfocused" +msgstr "フォーカスされていないときの音量" + +#: src/settings_translation_file.cpp +msgid "Volumetric lighting" +msgstr "ボリュームライティング" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6794,12 +6945,18 @@ msgstr "cURL並行処理制限" #~ msgid "(game support required)" #~ msgstr "(ゲームサポート必須)" +#~ msgid "- Address: " +#~ msgstr "- アドレス: " + #~ msgid "- Creative Mode: " #~ msgstr "- クリエイティブモード: " #~ msgid "- Damage: " #~ msgstr "- ダメージ: " +#~ msgid "- Port: " +#~ msgstr "- ポート: " + #~ msgid "" #~ "0 = parallax occlusion with slope information (faster).\n" #~ "1 = relief mapping (slower, more accurate)." @@ -6837,6 +6994,12 @@ msgstr "cURL並行処理制限" #~ "ローカルサーバーを起動する際は空白に設定してください。\n" #~ "メインメニューのアドレス欄はこの設定を上書きすることに注意してください。" +#~ msgid "" +#~ "Adjust dpi configuration to your screen (non X11/Android only) e.g. for " +#~ "4k screens." +#~ msgstr "" +#~ "4kスクリーンなどのための、画面の解像度の設定です (非X11/Android環境のみ)。" + #~ msgid "" #~ "Adjust the gamma encoding for the light tables. Higher numbers are " #~ "brighter.\n" @@ -6905,6 +7068,9 @@ msgstr "cURL並行処理制限" #~ msgid "Bits per pixel (aka color depth) in fullscreen mode." #~ msgstr "フルスクリーンモードでのビット数(色深度)。" +#~ msgid "Block bounds shown for all blocks" +#~ msgstr "すべてのブロックにブロック境界線を表示" + #~ msgid "Bump Mapping" #~ msgstr "バンプマッピング" @@ -6929,6 +7095,9 @@ msgstr "cURL並行処理制限" #~ msgid "Center of light curve mid-boost." #~ msgstr "光度曲線ミッドブーストの中心。" +#~ msgid "Change Keys" +#~ msgstr "キー変更" + #~ msgid "Change keys" #~ msgstr "キー変更" @@ -7002,6 +7171,38 @@ msgstr "cURL並行処理制限" #~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." #~ msgstr "トンネルの幅を制御、小さい方の値ほど広いトンネルを生成します。" +#, c-format +#~ msgid "" +#~ "Controls:\n" +#~ "- %s: move forwards\n" +#~ "- %s: move backwards\n" +#~ "- %s: move left\n" +#~ "- %s: move right\n" +#~ "- %s: jump/climb up\n" +#~ "- %s: dig/punch/use\n" +#~ "- %s: place/use\n" +#~ "- %s: sneak/climb down\n" +#~ "- %s: drop item\n" +#~ "- %s: inventory\n" +#~ "- Mouse: turn/look\n" +#~ "- Mouse wheel: select item\n" +#~ "- %s: chat\n" +#~ msgstr "" +#~ "操作方法:\n" +#~ "- %s: 前進\n" +#~ "- %s: 後退\n" +#~ "- %s: 左移動\n" +#~ "- %s: 右移動\n" +#~ "- %s: ジャンプ/登る\n" +#~ "- %s: 掘る/パンチ/使う\n" +#~ "- %s: 置く/使う\n" +#~ "- %s: スニーク/降りる\n" +#~ "- %s: アイテムを落とす\n" +#~ "- %s: インベントリ\n" +#~ "- マウス: 振り向く/見る\n" +#~ "- マウスホイール: アイテム選択\n" +#~ "- %s: チャット\n" + #~ msgid "Creative" #~ msgstr "クリエイティブ" @@ -7011,6 +7212,9 @@ msgstr "cURL並行処理制限" #~ msgid "Crosshair color (R,G,B)." #~ msgstr "照準線の色 (R,G,B)。" +#~ msgid "DPI" +#~ msgstr "DPI" + #~ msgid "Damage" #~ msgstr "ダメージ" @@ -7109,6 +7313,13 @@ msgstr "cURL並行処理制限" #~ msgid "Enable register confirmation" #~ msgstr "登録確認を有効化" +#~ msgid "" +#~ "Enable vertex buffer objects.\n" +#~ "This should greatly improve graphics performance." +#~ msgstr "" +#~ "頂点バッファオブジェクトを有効にします。\n" +#~ "これにより、グラフィックスのパフォーマンスが大幅に向上します。" + #~ msgid "Enabled" #~ msgstr "有効" @@ -7419,6 +7630,9 @@ msgstr "cURL並行処理制限" #~ msgid "Instrumentation" #~ msgstr "計測器" +#~ msgid "Invalid gamespec." +#~ msgstr "無効なゲーム情報です。" + #~ msgid "Inventory key" #~ msgstr "インベントリキー" @@ -8114,6 +8328,12 @@ msgstr "cURL並行処理制限" #~ msgstr "" #~ "DirectX を LuaJIT と連携させます。問題がある場合は無効にしてください。" +#~ msgid "Makes all liquids opaque" +#~ msgstr "すべての液体を不透明にする" + +#~ msgid "Mapblock mesh generator's MapBlock cache size in MB" +#~ msgstr "メッシュ生成のマップブロックキャッシュサイズ(MB)" + #~ msgid "Menus" #~ msgstr "メニュー" @@ -8355,15 +8575,21 @@ msgstr "cURL並行処理制限" #~ msgid "Simple Leaves" #~ msgstr "シンプルな葉" +#~ msgid "" +#~ "Size of the MapBlock cache of the mesh generator. Increasing this will\n" +#~ "increase the cache hit %, reducing the data being copied from the main\n" +#~ "thread, thus reducing jitter." +#~ msgstr "" +#~ "メッシュ生成のマップブロックキャッシュサイズ。これを大きくすると、\n" +#~ "キャッシュヒット率が上がり、メインスレッドからコピーされるデータが\n" +#~ "減るため、ジッタが減少します。" + #~ msgid "Smooth Lighting" #~ msgstr "滑らかな光" #~ msgid "Smooths rotation of camera. 0 to disable." #~ msgstr "カメラの回転を滑らかにします。無効にする場合は 0。" -#~ msgid "Sound" -#~ msgstr "サウンド" - #~ msgid "Special" #~ msgstr "スペシャル" @@ -8427,6 +8653,9 @@ msgstr "cURL並行処理制限" #~ msgid "Touch threshold (px):" #~ msgstr "タッチのしきい値 (px):" +#~ msgid "Touchscreen threshold" +#~ msgstr "タッチスクリーンのしきい値" + #~ msgid "Trilinear Filter" #~ msgstr "トライリニアフィルタ" @@ -8476,6 +8705,9 @@ msgstr "cURL並行処理制限" #~ "0 に設定すると、MSAAは無効になります。\n" #~ "このオプションを変更した場合、再起動が必要です。" +#~ msgid "VBO" +#~ msgstr "VBO" + #~ msgid "Variation of hill height and lake depth on floatland smooth terrain." #~ msgstr "浮遊大陸の滑らかな地形における丘の高さと湖の深さの変動。" @@ -8577,8 +8809,14 @@ msgstr "cURL並行処理制限" #~ msgid "You died." #~ msgstr "あなたは死にました。" +#~ msgid "You have no games installed." +#~ msgstr "ゲームがインストールされていません。" + #~ msgid "Z" #~ msgstr "Z" #~ msgid "needs_fallback_font" #~ msgstr "yes" + +#~ msgid "ok" +#~ msgstr "決定" diff --git a/po/jbo/minetest.po b/po/jbo/minetest.po index bea978812..927b0f307 100644 --- a/po/jbo/minetest.po +++ b/po/jbo/minetest.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: Lojban (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" -"PO-Revision-Date: 2021-02-13 08:50+0000\n" -"Last-Translator: Wuzzy \n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" +"PO-Revision-Date: 2024-07-10 01:09+0000\n" +"Last-Translator: Qimar \n" "Language-Team: Lojban \n" "Language: jbo\n" @@ -12,16 +12,15 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.5-dev\n" +"X-Generator: Weblate 5.7-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" -msgstr "" +msgstr "kutygau le casnu liste" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Empty command." -msgstr "minde" +msgstr "minde fi noda" #: builtin/client/chatcommands.lua #, fuzzy @@ -29,31 +28,28 @@ msgid "Exit to main menu" msgstr "sisti tu'a le se kelci" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Invalid command: " -msgstr "minde" +msgstr "smucau minde fi tu'a zo'oi " #: builtin/client/chatcommands.lua msgid "Issued command: " -msgstr "" +msgstr "minde fi tu'a zo'oi " #: builtin/client/chatcommands.lua -#, fuzzy msgid "List online players" -msgstr "nonselkansa" +msgstr "jarco loka kelci liste" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Online players: " -msgstr "nonselkansa" +msgstr "lo'i kelci cu se cmima " #: builtin/client/chatcommands.lua msgid "The out chat queue is now empty." -msgstr "" +msgstr "le bartu casnu liste ca ku kunti" #: builtin/client/chatcommands.lua msgid "This command is disabled by server." -msgstr "" +msgstr "le ti te minde cu na se curmi le samtcise'u" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -64,22 +60,21 @@ msgid "You died" msgstr ".i do morsi" #: builtin/common/chatcommands.lua -#, fuzzy msgid "Available commands:" -msgstr "minde" +msgstr "lo'i cumki te minde cu se cmima" #: builtin/common/chatcommands.lua -#, fuzzy msgid "Available commands: " -msgstr "minde" +msgstr "lo'i cumki te minde cu se cmima " #: builtin/common/chatcommands.lua msgid "Command not available: " -msgstr "" +msgstr "le minde na ka'e se pilno " #: builtin/common/chatcommands.lua -msgid "Get help for commands" -msgstr "" +#, fuzzy +msgid "Get help for commands (-t: output in chat)" +msgstr "cpedu lo sidju be fi tu'a lo se minde" #: builtin/common/chatcommands.lua msgid "" @@ -87,13 +82,9 @@ msgid "" msgstr "" #: builtin/common/chatcommands.lua -msgid "[all | ]" +msgid "[all | ] [-t]" msgstr "" -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" -msgstr "fitytu'i" - #: builtin/fstk/ui.lua msgid "" msgstr "" @@ -113,6 +104,10 @@ msgstr ".i da nabmi" msgid "Main menu" msgstr "ralju liste" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "je'e" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "za'u re'u samjo'e" @@ -143,181 +138,188 @@ msgstr "" msgid "We support protocol versions between version $1 and $2." msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "Failed to download \"$1\"" +msgstr ".i da nabmi fi le nu kibycpa la'o zoi. $1 .zoi" + +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr ".i da nabmi fi le nu kibycpa la'o zoi. $1 .zoi" + +#: builtin/mainmenu/content/contentdb.lua +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua #, fuzzy msgid "$1 downloading..." msgstr ".i ca'o samymo'i" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "se cmima ro bakfu" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "xruti fi tu'a le ralju liste" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr ".i ca'o cpacu" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "se kelci" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +msgstr "samtcise'a" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp +msgid "Loading..." +msgstr ".i ca'o samymo'i" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Mods" +msgstr "se samtcise'a" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr ".i na kakne le ka kibycpa pa bakfu" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr ".i no da ckaji lo se sisku" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "noda cnino" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#, fuzzy +msgid "Queued" +msgstr "mo'u jmina ko'a le se liste" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#, fuzzy +msgid "Texture packs" +msgstr "jvinu bakfu" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "to'e samtcise'a" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "ningau" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "View more information in a web browser" +msgstr "tcidu tu'a lo drata lo kibro" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "You need to install a game before you can install a mod" +msgstr "sarcu fa lonu cpacu lo se kelci vau lonu samtcise'a" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 and $2 dependencies will be installed." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "ba'o se ci'erse'a" + +#: builtin/mainmenu/content/dlg_install.lua #, fuzzy msgid "Base Game:" msgstr "cfari fa lo nu kelci" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" -msgstr "fitytoltu'i" +msgstr "je'enai" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "jai se nitcu" -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Downloading..." -msgstr ".i ca'o samymo'i" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to download \"$1\"" -msgstr ".i da nabmi fi le nu kibycpa la'o zoi. $1 .zoi" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr ".i da nabmi fi le nu kibycpa la'o zoi. $1 .zoi" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "se kelci" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "samtcise'a" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #, fuzzy msgid "Install $1" msgstr "samtcise'a" -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" -msgstr "na'e se nitcu" +msgstr "cpacu lo se nitcu" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr ".i ca'o samymo'i" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "se samtcise'a" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr ".i na kakne le ka kibycpa pa bakfu" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr ".i no da ckaji lo se sisku" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" -msgstr "" +msgstr "facki fi noda" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Please check that the base game is correct." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #, fuzzy -msgid "Texture packs" -msgstr "jvinu bakfu" +msgid "Please check that the base game is correct." +msgstr "e'o ko cipcta lo jicmu se kelci loka drani" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "to'e samtcise'a" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" -msgstr "" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" +msgstr "basti" #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" @@ -358,23 +360,23 @@ msgstr "" #: builtin/mainmenu/dlg_config_world.lua msgid "(Unsatisfied)" -msgstr "" +msgstr "na banzu" #: builtin/mainmenu/dlg_config_world.lua msgid "Disable all" -msgstr "ro co'e cu ganda" +msgstr "ganda roda" #: builtin/mainmenu/dlg_config_world.lua msgid "Disable modpack" -msgstr "le se samtcise'a bakfu cu ganda" +msgstr "ganda le se samtcise'a bakfu" #: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" -msgstr "ro co'e cu katci" +msgstr "katci roda" #: builtin/mainmenu/dlg_config_world.lua msgid "Enable modpack" -msgstr "le se samtcise'a bakfu cu katci" +msgstr "katci le se samtcise'a bakfu" #: builtin/mainmenu/dlg_config_world.lua msgid "" @@ -384,7 +386,7 @@ msgstr "" #: builtin/mainmenu/dlg_config_world.lua msgid "Find More Mods" -msgstr "" +msgstr "sisku loka drata vau lo'i samtcise'a" #: builtin/mainmenu/dlg_config_world.lua msgid "Mod:" @@ -409,19 +411,18 @@ msgid "No modpack description provided." msgstr "to'i no da ve skicu le se samtcise'a bakfu toi" #: builtin/mainmenu/dlg_config_world.lua -#, fuzzy msgid "No optional dependencies" -msgstr "na'e se nitcu" +msgstr "noda se nitcu" #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Optional dependencies:" -msgstr "na'e se nitcu" +msgstr "no'e se nitcu" #: builtin/mainmenu/dlg_config_world.lua #: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua #: src/gui/guiKeyChangeMenu.cpp msgid "Save" -msgstr "co'a vreji" +msgstr "rejgau" #: builtin/mainmenu/dlg_config_world.lua msgid "World:" @@ -437,45 +438,53 @@ msgstr ".i zoi zoi. $1 .zoi xa'o cmene pa munje" #: builtin/mainmenu/dlg_create_world.lua msgid "Additional terrain" -msgstr "" +msgstr "ziljmina tumla" #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Altitude chill" -msgstr "" +msgstr "nilga'u lenku" #: builtin/mainmenu/dlg_create_world.lua msgid "Altitude dry" -msgstr "" +msgstr "nilga'u sudga" #: builtin/mainmenu/dlg_create_world.lua msgid "Biome blending" -msgstr "" +msgstr "timymo'a mixre" #: builtin/mainmenu/dlg_create_world.lua msgid "Biomes" -msgstr "" +msgstr "timymo'a" #: builtin/mainmenu/dlg_create_world.lua msgid "Caverns" -msgstr "" +msgstr "kevna ciste" #: builtin/mainmenu/dlg_create_world.lua msgid "Caves" -msgstr "kevzda" +msgstr "kevna" #: builtin/mainmenu/dlg_create_world.lua msgid "Create" msgstr "cupra" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Decorations" -msgstr "datni" +msgstr "jadni" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Development Test is meant for developers." -msgstr ".i la'o zoi. Minimal development test .zoi na'o selpli lo favgau .o'i" +msgstr ".i la'o zoi. Development Test .zoi na'o selpli lo favgau .o'i" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" @@ -483,16 +492,15 @@ msgstr "kevdi'u" #: builtin/mainmenu/dlg_create_world.lua msgid "Flat terrain" -msgstr "" +msgstr "plita tumla" #: builtin/mainmenu/dlg_create_world.lua msgid "Floating landmasses in the sky" -msgstr "lo tumla cu fulta lo tsani" +msgstr "tsani fulta tumla" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Floatlands (experimental)" -msgstr "fulta tumla" +msgstr "fulta tumla o'isai" #: builtin/mainmenu/dlg_create_world.lua msgid "Generate non-fractal terrain: Oceans and underground" @@ -500,27 +508,27 @@ msgstr "" #: builtin/mainmenu/dlg_create_world.lua msgid "Hills" -msgstr "" +msgstr "cmama'a" #: builtin/mainmenu/dlg_create_world.lua msgid "Humid rivers" -msgstr "" +msgstr "rirxe vi lo cilmo tumla" #: builtin/mainmenu/dlg_create_world.lua msgid "Increases humidity around rivers" -msgstr "" +msgstr "zenba loka cilmo vi lo rirxe" #: builtin/mainmenu/dlg_create_world.lua msgid "Install another game" -msgstr "" +msgstr "cpacu lo drata se kelci" #: builtin/mainmenu/dlg_create_world.lua msgid "Lakes" -msgstr "" +msgstr "lalxu" #: builtin/mainmenu/dlg_create_world.lua msgid "Low humidity and high heat causes shallow or dry rivers" -msgstr "" +msgstr "lonu sudga je glare vacri cu rinka lonu caxno ja sudga rirxe" #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp #, fuzzy @@ -529,11 +537,11 @@ msgstr "te cupra le munje" #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Mapgen flags" -msgstr "" +msgstr "tcita lo te cupra be le munje" #: builtin/mainmenu/dlg_create_world.lua msgid "Mapgen-specific flags" -msgstr "" +msgstr "tcita lo te cupra be le steci munje" #: builtin/mainmenu/dlg_create_world.lua msgid "Mountains" @@ -541,11 +549,11 @@ msgstr "cmana" #: builtin/mainmenu/dlg_create_world.lua msgid "Mud flow" -msgstr "" +msgstr "derpesxu flecu" #: builtin/mainmenu/dlg_create_world.lua msgid "Network of tunnels and caves" -msgstr "" +msgstr "stura so'i kevlu'a" #: builtin/mainmenu/dlg_create_world.lua msgid "No game selected" @@ -553,11 +561,11 @@ msgstr ".i do cuxna no se kelci" #: builtin/mainmenu/dlg_create_world.lua msgid "Reduces heat with altitude" -msgstr "" +msgstr "nilga'u lenku" #: builtin/mainmenu/dlg_create_world.lua msgid "Reduces humidity with altitude" -msgstr "" +msgstr "nilga'u sudga" #: builtin/mainmenu/dlg_create_world.lua msgid "Rivers" @@ -565,7 +573,7 @@ msgstr "rirxe" #: builtin/mainmenu/dlg_create_world.lua msgid "Sea level rivers" -msgstr "" +msgstr "xamsi nilga'u rirxe" #: builtin/mainmenu/dlg_create_world.lua #: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua @@ -584,7 +592,7 @@ msgstr "" #: builtin/mainmenu/dlg_create_world.lua msgid "Structures appearing on the terrain, typically trees and plants" -msgstr "" +msgstr "tumla jadni to na'o tricu je spati toi" #: builtin/mainmenu/dlg_create_world.lua msgid "Temperate, Desert" @@ -600,19 +608,19 @@ msgstr "" #: builtin/mainmenu/dlg_create_world.lua msgid "Terrain surface erosion" -msgstr "" +msgstr "nu sraku le tumla" #: builtin/mainmenu/dlg_create_world.lua msgid "Trees and jungle grass" -msgstr "" +msgstr "tricu je cicricfoi srasu" #: builtin/mainmenu/dlg_create_world.lua msgid "Vary river depth" -msgstr "" +msgstr "vrici rirxe bo nilcoi" #: builtin/mainmenu/dlg_create_world.lua msgid "Very large caverns deep in the underground" -msgstr "" +msgstr "mutce barda ke condi tumsfeni'a kevna" #: builtin/mainmenu/dlg_create_world.lua msgid "World name" @@ -845,10 +853,6 @@ msgstr "" msgid "Back" msgstr "xruti" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -858,7 +862,8 @@ msgstr "tavla" msgid "Clear" msgstr "" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "" @@ -912,7 +917,7 @@ msgstr "" #: builtin/mainmenu/settings/shadows_component.lua msgid "Custom" -msgstr "" +msgstr "steci" #: builtin/mainmenu/settings/shadows_component.lua msgid "Disabled" @@ -921,27 +926,27 @@ msgstr "ganda" #: builtin/mainmenu/settings/shadows_component.lua #: src/settings_translation_file.cpp msgid "Dynamic shadows" -msgstr "" +msgstr "cenba ctino" #: builtin/mainmenu/settings/shadows_component.lua msgid "High" -msgstr "" +msgstr "mutce" #: builtin/mainmenu/settings/shadows_component.lua msgid "Low" -msgstr "" +msgstr "milxe" #: builtin/mainmenu/settings/shadows_component.lua msgid "Medium" -msgstr "" +msgstr "no'e mutce" #: builtin/mainmenu/settings/shadows_component.lua msgid "Very High" -msgstr "" +msgstr "tcetce" #: builtin/mainmenu/settings/shadows_component.lua msgid "Very Low" -msgstr "" +msgstr "mlimli" #: builtin/mainmenu/tab_about.lua msgid "About" @@ -957,11 +962,11 @@ msgstr "" #: builtin/mainmenu/tab_about.lua msgid "Core Developers" -msgstr "" +msgstr "liste lo'i ralju zbapla" #: builtin/mainmenu/tab_about.lua msgid "Core Team" -msgstr "" +msgstr "liste lo'i ralju bende" #: builtin/mainmenu/tab_about.lua msgid "Irrlicht device:" @@ -984,7 +989,7 @@ msgstr "liste lu'i ro pu je nai ca gunka" #: builtin/mainmenu/tab_about.lua msgid "Previous Core Developers" -msgstr "" +msgstr "liste lo'i ba'o ralju zbapla" #: builtin/mainmenu/tab_about.lua msgid "Share debug log" @@ -992,7 +997,7 @@ msgstr "" #: builtin/mainmenu/tab_content.lua msgid "Browse online content" -msgstr "" +msgstr "catlu lo kibro" #: builtin/mainmenu/tab_content.lua msgid "Browse online content [$1]" @@ -1009,9 +1014,8 @@ msgid "Content [$1]" msgstr "kakne le ka se samtcise'a" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Disable Texture Pack" -msgstr "le jvinu bakfu cu ganda" +msgstr "gandygau le jvinu bakfu" #: builtin/mainmenu/tab_content.lua msgid "Installed Packages:" @@ -1028,7 +1032,7 @@ msgstr "to'i no da ve skicu le bakfu toi" #: builtin/mainmenu/tab_content.lua msgid "Rename" -msgstr "basti fi le ka cmene" +msgstr "basygau fi le cmene" #: builtin/mainmenu/tab_content.lua #, fuzzy @@ -1037,7 +1041,7 @@ msgstr "ti'orkemsamtci to na kakne toi" #: builtin/mainmenu/tab_content.lua msgid "Use Texture Pack" -msgstr "" +msgstr "pilno le jvinu bakfu" #: builtin/mainmenu/tab_local.lua msgid "Announce Server" @@ -1053,7 +1057,7 @@ msgstr "finti se kelci" #: builtin/mainmenu/tab_local.lua msgid "Enable Damage" -msgstr "pilno lo selxai" +msgstr "cumgau lonu xrani" #: builtin/mainmenu/tab_local.lua #, fuzzy @@ -1065,12 +1069,21 @@ msgid "Host Server" msgstr "co'a samtcise'u" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "Install a game" -msgstr "samtcise'a" +msgstr "samtcise'a lo se kelci" #: builtin/mainmenu/tab_local.lua msgid "Install games from ContentDB" +msgstr "samtcise'a lo se kelci ra'i la'oi ContentDB" + +#: builtin/mainmenu/tab_local.lua +msgid "Minetest 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 " +"games." msgstr "" #: builtin/mainmenu/tab_local.lua @@ -1079,7 +1092,7 @@ msgstr "cnino" #: builtin/mainmenu/tab_local.lua msgid "No world created or selected!" -msgstr ".i do no munje cu cupra ja cu cuxna" +msgstr ".i do na cupra ja cuxna lo munje" #: builtin/mainmenu/tab_local.lua msgid "Play Game" @@ -1090,13 +1103,12 @@ msgid "Port" msgstr "judrnporte" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "Select Mods" -msgstr ".i ko cuxna fi lu'i le munje" +msgstr "cuxna fi lo'i se samtcise'a" #: builtin/mainmenu/tab_local.lua msgid "Select World:" -msgstr ".i ko cuxna fi lu'i le munje" +msgstr "cuxna fi lo'i munje" #: builtin/mainmenu/tab_local.lua msgid "Server Port" @@ -1107,13 +1119,13 @@ msgid "Start Game" msgstr "co'a kelci" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." -msgstr ".i do samtcise'a no se kelci" +#, fuzzy +msgid "You need to install a game before you can create a world." +msgstr "sarcu fa lonu cpacu lo se kelci vau lonu samtcise'a" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Address" -msgstr "- judri: " +msgstr "judri" #: builtin/mainmenu/tab_online.lua msgid "Creative mode" @@ -1122,7 +1134,7 @@ msgstr "finti se kelci" #. ~ PvP = Player versus Player #: builtin/mainmenu/tab_online.lua msgid "Damage / PvP" -msgstr "" +msgstr "cumki fa lonu simxu lonu xrani" #: builtin/mainmenu/tab_online.lua #, fuzzy @@ -1197,12 +1209,6 @@ msgstr ".i ca'o samymo'i le tengu datnyvei" msgid "Rebuilding shaders..." msgstr "" -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "" -".i da nabmi fi le nu co'a jorne to la'a cu'i le temci cu dukse le ka clani " -"toi" - #: src/client/clientlauncher.cpp #, fuzzy msgid "Could not find or load game: " @@ -1210,10 +1216,6 @@ msgstr "" ".i na cumki fa le nu le se kelci cu jai se facki je cu se samymo'i .i ky. du " "la'o zoi." -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr ".i le se kelci ve skicu vreji na drani" - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "ralju liste" @@ -1238,7 +1240,11 @@ msgstr "" msgid "Provided world path doesn't exist: " msgstr "" -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "" + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp msgid "" "\n" "Check debug.txt for details." @@ -1246,18 +1252,10 @@ msgstr "" "\n" ".i sarcu fa le nu do cipcta la'o zoi. debug.txt .zoi kei tu'a le tcila" -#: src/client/game.cpp -msgid "- Address: " -msgstr "- judri: " - #: src/client/game.cpp msgid "- Mode: " msgstr "" -#: src/client/game.cpp -msgid "- Port: " -msgstr "- judrnporte: " - #: src/client/game.cpp msgid "- Public: " msgstr "- gubni: " @@ -1296,10 +1294,6 @@ msgstr "za'i ca'u muvdu" msgid "Block bounds hidden" msgstr "" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "" @@ -1347,6 +1341,12 @@ msgstr "" msgid "Connecting to server..." msgstr ".i ca'o samjo'e le samse'u" +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "" +".i da nabmi fi le nu co'a jorne to la'a cu'i le temci cu dukse le ka clani " +"toi" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "" @@ -1355,32 +1355,13 @@ msgstr "" msgid "Continue" msgstr "ranji" -#: src/client/game.cpp -#, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" - #: src/client/game.cpp msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1430,38 +1411,40 @@ msgstr "sisti tu'a le samtci" #: src/client/game.cpp msgid "Fast mode disabled" -msgstr "" +msgstr "na sutra klama kakne" #: src/client/game.cpp msgid "Fast mode enabled" -msgstr "" +msgstr "sutra klama kakne" #: src/client/game.cpp msgid "Fast mode enabled (note: no 'fast' privilege)" -msgstr "" +msgstr "sutra klama na'e kakne ki'u lonu na curmi" #: src/client/game.cpp msgid "Fly mode disabled" -msgstr "" +msgstr "na vofli kakne" #: src/client/game.cpp -#, fuzzy msgid "Fly mode enabled" -msgstr "selpli" +msgstr "vofli kakne" #: src/client/game.cpp msgid "Fly mode enabled (note: no 'fly' privilege)" -msgstr "" +msgstr "vofli na'e kakne ki'u lonu na curmi" #: src/client/game.cpp -#, fuzzy msgid "Fog disabled" -msgstr "selpli" +msgstr "se mipri bumru" + +#: src/client/game.cpp +msgid "Fog enabled" +msgstr "jarco bumru" #: src/client/game.cpp #, fuzzy -msgid "Fog enabled" -msgstr "selpli" +msgid "Fog enabled by game or mod" +msgstr "na curmi lonu jbiji'u" #: src/client/game.cpp msgid "Game info:" @@ -1484,10 +1467,6 @@ msgstr ".i ca'o samymo'i tu'a le dacti" msgid "KiB/s" msgstr "" -#: src/client/game.cpp -msgid "Media..." -msgstr "" - #: src/client/game.cpp msgid "MiB/s" msgstr "" @@ -1503,15 +1482,15 @@ msgstr "nonselkansa" #: src/client/game.cpp msgid "Noclip mode disabled" -msgstr "" +msgstr "na pagre be roda kakne" #: src/client/game.cpp msgid "Noclip mode enabled" -msgstr "" +msgstr "pagre be roda kakne" #: src/client/game.cpp msgid "Noclip mode enabled (note: no 'noclip' privilege)" -msgstr "" +msgstr "na pagre be roda na'e kakne ki'u lonu na curmi" #: src/client/game.cpp #, fuzzy @@ -1559,9 +1538,8 @@ msgid "Sound Volume" msgstr "ni sance" #: src/client/game.cpp -#, fuzzy msgid "Sound muted" -msgstr "lo ni sance " +msgstr "smaji" #: src/client/game.cpp msgid "Sound system is disabled" @@ -1572,9 +1550,8 @@ msgid "Sound system is not supported on this build" msgstr "" #: src/client/game.cpp -#, fuzzy msgid "Sound unmuted" -msgstr "lo ni sance " +msgstr "ba'o smaji" #: src/client/game.cpp #, c-format @@ -1593,15 +1570,15 @@ msgstr "" #: src/client/game.cpp msgid "Unlimited viewing range disabled" -msgstr "" +msgstr "jvinu jimte" #: src/client/game.cpp msgid "Unlimited viewing range enabled" -msgstr "" +msgstr "na jvinu jimte" #: src/client/game.cpp msgid "Unlimited viewing range enabled, but forbidden by game or mod" -msgstr "" +msgstr "lonu claxu lo jvinu jimte cu na se curmi" #: src/client/game.cpp #, c-format @@ -1641,19 +1618,15 @@ msgstr ".i fe lo ni sance cu cenba fi li %d ce'i" #: src/client/game.cpp msgid "Wireframe shown" -msgstr "" +msgstr "ca'o jarco lo munje greku" #: src/client/game.cpp msgid "Zoom currently disabled by game or mod" -msgstr "" - -#: src/client/game.cpp -msgid "ok" -msgstr "je'e" +msgstr "na curmi lonu jbiji'u" #: src/client/gameui.cpp msgid "Chat currently disabled by game or mod" -msgstr "" +msgstr "na curmi lonu tavla" #: src/client/gameui.cpp msgid "Chat hidden" @@ -1686,38 +1659,36 @@ msgstr "" #: src/client/keycode.cpp msgid "Backspace" -msgstr "" +msgstr "prula'i vimcu tekla" #. ~ Usually paired with the Pause key #: src/client/keycode.cpp -#, fuzzy msgid "Break Key" -msgstr "za'i masno cadzu" +msgstr "dicra tekla" #: src/client/keycode.cpp msgid "Caps Lock" -msgstr "" +msgstr "lerfu stela tekla" #: src/client/keycode.cpp msgid "Clear Key" -msgstr "" +msgstr "romei vimcu tekla" #: src/client/keycode.cpp msgid "Control Key" -msgstr "" +msgstr "kontrol zei tekla" #: src/client/keycode.cpp -#, fuzzy msgid "Delete Key" -msgstr "vimcu" +msgstr "bavla'i vimcu tekla" #: src/client/keycode.cpp msgid "Down Arrow" -msgstr "" +msgstr "dizlo tekla" #: src/client/keycode.cpp msgid "End" -msgstr "" +msgstr "fanmo tekla" #: src/client/keycode.cpp #, fuzzy @@ -1730,7 +1701,7 @@ msgstr "" #: src/client/keycode.cpp msgid "Help" -msgstr "" +msgstr "sidju" #: src/client/keycode.cpp msgid "Home" @@ -1760,19 +1731,19 @@ msgstr "" #: src/client/keycode.cpp msgid "Insert" -msgstr "" +msgstr "setca tekla" #: src/client/keycode.cpp msgid "Left Arrow" -msgstr "" +msgstr "zunle tekla" #: src/client/keycode.cpp msgid "Left Button" -msgstr "zulselpevysmacu" +msgstr "zunle sma'acu bo tekla" #: src/client/keycode.cpp msgid "Left Control" -msgstr "" +msgstr "zunle kontrol zei tekla" #: src/client/keycode.cpp msgid "Left Menu" @@ -1780,11 +1751,11 @@ msgstr "" #: src/client/keycode.cpp msgid "Left Shift" -msgstr "" +msgstr "zunle cift zei tekla" #: src/client/keycode.cpp msgid "Left Windows" -msgstr "" +msgstr "zunle uindos zei tekla" #. ~ Key name, common on Windows keyboards #: src/client/keycode.cpp @@ -1793,11 +1764,11 @@ msgstr "" #: src/client/keycode.cpp msgid "Middle Button" -msgstr "mijyselpevysmacu" +msgstr "midju sma'acu bo tekla" #: src/client/keycode.cpp msgid "Num Lock" -msgstr "" +msgstr "namcu stela tekla" #: src/client/keycode.cpp msgid "Numpad *" @@ -1866,16 +1837,16 @@ msgstr "la'o gy.OEM Clear.gy." #: src/client/keycode.cpp msgid "Page Down" -msgstr "" +msgstr "papri dizlo tekla" #: src/client/keycode.cpp msgid "Page Up" -msgstr "" +msgstr "papri galtu tekla" #. ~ Usually paired with the Break key #: src/client/keycode.cpp msgid "Pause Key" -msgstr "" +msgstr "denpa tekla" #: src/client/keycode.cpp msgid "Play" @@ -1888,20 +1859,19 @@ msgstr "" #: src/client/keycode.cpp msgid "Return Key" -msgstr "" +msgstr "gasnu tekla" #: src/client/keycode.cpp -#, fuzzy msgid "Right Arrow" -msgstr "ri'u muvdu" +msgstr "pritu tekla" #: src/client/keycode.cpp msgid "Right Button" -msgstr "prityselpevysmacu" +msgstr "pritu sma'acu bo tekla" #: src/client/keycode.cpp msgid "Right Control" -msgstr "" +msgstr "pritu kontrol zei tekla" #: src/client/keycode.cpp msgid "Right Menu" @@ -1909,15 +1879,15 @@ msgstr "" #: src/client/keycode.cpp msgid "Right Shift" -msgstr "" +msgstr "pritu cift zei tekla" #: src/client/keycode.cpp msgid "Right Windows" -msgstr "" +msgstr "pritu uindos zei tekla" #: src/client/keycode.cpp msgid "Scroll Lock" -msgstr "" +msgstr "muvdu stela tekla" #. ~ Key name #: src/client/keycode.cpp @@ -1926,7 +1896,7 @@ msgstr "" #: src/client/keycode.cpp msgid "Shift Key" -msgstr "" +msgstr "cift zei tekla" #: src/client/keycode.cpp msgid "Sleep" @@ -1938,15 +1908,15 @@ msgstr "" #: src/client/keycode.cpp msgid "Space" -msgstr "" +msgstr "se ragve tekla" #: src/client/keycode.cpp msgid "Tab" -msgstr "" +msgstr "pagyca'o tekla" #: src/client/keycode.cpp msgid "Up Arrow" -msgstr "" +msgstr "galtu tekla" #: src/client/keycode.cpp #, fuzzy @@ -1980,6 +1950,15 @@ msgstr "" msgid "Minimap in texture mode" msgstr "" +#: src/client/shader.cpp +#, fuzzy, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr ".i da nabmi fi le nu kibycpa la'o zoi. $1 .zoi" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2108,7 +2087,7 @@ msgstr "minde" #: src/gui/guiKeyChangeMenu.cpp msgid "Mute" -msgstr "" +msgstr "sance fanta" #: src/gui/guiKeyChangeMenu.cpp msgid "Next item" @@ -2175,13 +2154,26 @@ msgstr "mu'e co'a jonai mo'u sutra" #: src/gui/guiKeyChangeMenu.cpp msgid "Zoom" -msgstr "" +msgstr "jbiji'u" #: src/gui/guiKeyChangeMenu.cpp #, fuzzy msgid "press key" msgstr ".i ko da'ergau pa batke" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +#, fuzzy +msgid "Unable to open URL" +msgstr ".i da nabmi fi le nu kibycpa la'o zoi. $1 .zoi" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "basti" @@ -2218,6 +2210,7 @@ msgstr "lo ni sance " #. 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 "jbo" @@ -2405,12 +2398,6 @@ msgstr "" msgid "Adds particles when digging a node." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2434,6 +2421,10 @@ msgstr "cmene le munje" msgid "Advanced" msgstr "" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2488,6 +2479,17 @@ msgstr "" msgid "Apple trees noise" 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 "Arm inertia" msgstr "" @@ -2509,12 +2511,21 @@ msgid "" "clients.\n" "Small values potentially improve performance a lot, at the expense of " "visible\n" -"rendering glitches (some blocks will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +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 @@ -2578,6 +2589,10 @@ msgstr "" msgid "Biome noise" msgstr "" +#: src/settings_translation_file.cpp +msgid "Block cull optimize distance" +msgstr "" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "" @@ -2799,6 +2814,12 @@ msgstr "le bumgapci cu skari" msgid "Colored shadows" msgstr "le bumgapci cu skari" +#: 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -2933,10 +2954,6 @@ msgid "" "Also controls the object crosshair color" msgstr "" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "" @@ -2986,6 +3003,19 @@ msgid "" "but also uses more resources." 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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "" @@ -3173,6 +3203,11 @@ msgstr "ro co'e cu katci" msgid "Enable Bloom Debug" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Debanding" +msgstr "cumgau lonu xrani" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3192,6 +3227,10 @@ msgid "" "filtering." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable Post Processing" +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "" @@ -3234,6 +3273,10 @@ msgstr "" msgid "Enable mouse wheel (scroll) for item selection in hotbar." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable random mod loading (mainly used for testing)." +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3257,6 +3300,10 @@ msgid "" "expecting." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable touchscreen" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3265,12 +3312,6 @@ msgid "" "when connecting to the server." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3300,6 +3341,19 @@ msgstr "" msgid "Enables caching of facedir rotated meshes." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -4097,9 +4151,10 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" #: src/settings_translation_file.cpp @@ -4248,10 +4303,6 @@ msgid "" "Make fog and sky colors depend on daytime (dawn/sunset) and view direction." msgstr "" -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "" @@ -4300,7 +4351,9 @@ 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." +"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 @@ -4335,10 +4388,6 @@ msgstr "" msgid "Mapblock mesh generation threads" msgstr "" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "" @@ -4580,6 +4629,10 @@ msgstr "" msgid "Minimap scan height" msgstr "" +#: src/settings_translation_file.cpp +msgid "Minimum dig repetition interval" +msgstr "" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "" @@ -4648,6 +4701,10 @@ msgstr "" msgid "Mouse sensitivity multiplier." msgstr "" +#: src/settings_translation_file.cpp +msgid "Movement threshold" +msgstr "" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "" @@ -4758,10 +4815,6 @@ msgstr "" msgid "Occlusion Culling" msgstr "" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -4774,6 +4827,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "OpenGL debug" +msgstr "" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "" @@ -4884,6 +4941,15 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Protocol version minimum" +msgstr "le ve judrnporte favatcini na mapti " + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -4899,6 +4965,10 @@ msgstr "" msgid "Random input" msgstr "" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "" @@ -5088,8 +5158,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5213,7 +5283,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" @@ -5246,6 +5316,10 @@ msgid "" "Bright colors will bleed over the neighboring objects." 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 "Set to true to enable waving leaves." msgstr "" @@ -5285,8 +5359,7 @@ msgstr "ti'orkemsamtci" msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" #: src/settings_translation_file.cpp @@ -5356,13 +5429,6 @@ msgid "" "recommended." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "" @@ -5399,7 +5465,7 @@ msgstr "lo xutla se gusni" #: 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 Change Keys." +"cinematic mode by using the key set in Controls." msgstr "" #: src/settings_translation_file.cpp @@ -5421,6 +5487,15 @@ msgstr "" msgid "Soft shadow radius" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sound" +msgstr "smaji" + +#: src/settings_translation_file.cpp +msgid "Sound Extensions Blacklist" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -5577,17 +5652,37 @@ msgid "" "when calling `/profiler save [format]` without format." 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 "" "The file path relative to your world path in which profiles will be saved to." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "" #: src/settings_translation_file.cpp -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" #: src/settings_translation_file.cpp @@ -5598,6 +5693,12 @@ msgid "" "Default is 1.0 (1/2 node)." 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 "The network interface that the server listens on." msgstr "" @@ -5624,7 +5725,7 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" #: src/settings_translation_file.cpp @@ -5681,6 +5782,10 @@ msgstr "" msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "" +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -5728,12 +5833,13 @@ msgid "Touchscreen sensitivity multiplier." msgstr "" #: src/settings_translation_file.cpp -msgid "Touchscreen threshold" +msgid "Tradeoffs for performance" msgstr "" #: src/settings_translation_file.cpp -msgid "Tradeoffs for performance" -msgstr "" +#, fuzzy +msgid "Translucent liquids" +msgstr ".i ca'o samymo'i lo me la'o gy.node.gy." #: src/settings_translation_file.cpp msgid "Transparency Sorting Distance" @@ -5771,7 +5877,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 "" #: src/settings_translation_file.cpp @@ -5869,10 +5977,6 @@ msgstr "" msgid "User Interfaces" msgstr "" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "" @@ -5959,12 +6063,25 @@ msgstr "" msgid "Volume" msgstr "lo ni sance" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +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 +#, fuzzy +msgid "Volumetric lighting" +msgstr "lo xutla se gusni" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6208,9 +6325,15 @@ msgstr "" msgid "cURL parallel limit" msgstr "" +#~ msgid "- Address: " +#~ msgstr "- judri: " + #~ msgid "- Creative Mode: " #~ msgstr "- finti se kelci: " +#~ msgid "- Port: " +#~ msgstr "- judrnporte: " + #~ msgid "3D Clouds" #~ msgstr "cibyca'u dilnu" @@ -6317,6 +6440,9 @@ msgstr "" #~ msgid "Information:" #~ msgstr "datni" +#~ msgid "Invalid gamespec." +#~ msgstr ".i le se kelci ve skicu vreji na drani" + #, fuzzy #~ msgid "Inventory key" #~ msgstr "lo dacti uidje" @@ -6462,5 +6588,11 @@ msgstr "" #~ msgid "You died." #~ msgstr ".i do morsi" +#~ msgid "You have no games installed." +#~ msgstr ".i do samtcise'a no se kelci" + #~ msgid "needs_fallback_font" #~ msgstr "no" + +#~ msgid "ok" +#~ msgstr "je'e" diff --git a/po/jv/minetest.po b/po/jv/minetest.po index d9888c73f..4ea01af34 100644 --- a/po/jv/minetest.po +++ b/po/jv/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" "PO-Revision-Date: 2023-11-17 00:07+0000\n" "Last-Translator: Muhammad Rifqi Priyo Susanto " "\n" @@ -77,7 +77,7 @@ msgid "Command not available: " msgstr "" #: builtin/common/chatcommands.lua -msgid "Get help for commands" +msgid "Get help for commands (-t: output in chat)" msgstr "" #: builtin/common/chatcommands.lua @@ -86,13 +86,9 @@ msgid "" msgstr "" #: builtin/common/chatcommands.lua -msgid "[all | ]" +msgid "[all | ] [-t]" msgstr "" -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" -msgstr "Oke" - #: builtin/fstk/ui.lua msgid "" msgstr "" @@ -109,6 +105,10 @@ msgstr "Wonten kasalahan:" msgid "Main menu" msgstr "Menu utama" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "Oke" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Sambet Malih" @@ -137,19 +137,25 @@ msgstr "Kami namung saged protokol versi $1." msgid "We support protocol versions between version $1 and $2." msgstr "Kami namung saged protokol versi antawis $1 kaliyan $2." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" +msgstr "Salah pasang \"$1\": $2" + +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download \"$1\"" +msgstr "Gagal ngundhuh \"$1\"" + +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr "Gagal ngundhuh $1" + +#: builtin/mainmenu/content/contentdb.lua +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." -msgstr "$1 kaliyan $2 dependensi badhe dipunpasang." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" -msgstr "$1 dening $2" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" @@ -157,156 +163,157 @@ msgstr "" "$1 dipunundhuh,\n" "$2 dipunantreaken" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." msgstr "$1 dipunundhuh..." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "Sedaya paket" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "Sampung dipunpasang" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "Balik dhateng menu utama" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "Ngundhuh..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +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 +msgid "Loading..." +msgstr "Ngewrat..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Mods" +msgstr "Mod" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "Boten wonten paket ingkang saget dipundhut" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "Tanpa asil" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "Tanpa pangenggalan" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "Dipunantreaken" + +#: builtin/mainmenu/content/dlg_contentdb.lua +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." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "$1 dening $2" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "Sampung dipunpasang" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "Dolanan Dhasar:" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "Batal" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "Dependensi:" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "Ngundhuh..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "Salah pasang \"$1\": $2" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download \"$1\"" -msgstr "Gagal ngundhuh \"$1\"" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "Gagal ngundhuh $1" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "Dolanan" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "Pasang" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "Pasang $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "Ngewrat..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "Mod" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "Boten wonten paket ingkang saget dipundhut" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "Tanpa asil" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "Tanpa pangenggalan" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "Boten kepanggih" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "Tindhih" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" -msgstr "Dipunantreaken" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "Paket tekstur" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "Paket $1 boten kepanggih." - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "Copot" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "Enggalaken" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "Enggalaken Sedaya [$1]" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" -msgstr "" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" +msgstr "Tindhih" #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" @@ -452,10 +459,20 @@ msgstr "Damel" msgid "Decorations" msgstr "" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." msgstr "" +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "" @@ -818,10 +835,6 @@ msgstr "" msgid "Back" msgstr "" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "Gantos Tombol" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -831,7 +844,8 @@ msgstr "" msgid "Clear" msgstr "" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "" @@ -1034,6 +1048,16 @@ msgstr "Pasang dolanan" 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." +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "" +"Minetest is a game-creation platform that allows you to play many different " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "Enggal" @@ -1067,8 +1091,8 @@ msgid "Start Game" msgstr "Wiwit Dolanan" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." -msgstr "Panjenengan boten gadhah dolanan ingkang dipunpasang." +msgid "You need to install a game before you can create a world." +msgstr "" #: builtin/mainmenu/tab_online.lua msgid "Address" @@ -1147,18 +1171,10 @@ msgstr "" msgid "Rebuilding shaders..." msgstr "" -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "" - #: src/client/clientlauncher.cpp msgid "Could not find or load game: " msgstr "" -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "" - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "Menu Utama" @@ -1183,7 +1199,11 @@ msgstr "" msgid "Provided world path doesn't exist: " msgstr "" -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "" + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp msgid "" "\n" "Check debug.txt for details." @@ -1191,18 +1211,10 @@ msgstr "" "\n" "Priksa debug.txt kagem peprincen." -#: src/client/game.cpp -msgid "- Address: " -msgstr "" - #: src/client/game.cpp msgid "- Mode: " msgstr "" -#: src/client/game.cpp -msgid "- Port: " -msgstr "" - #: src/client/game.cpp msgid "- Public: " msgstr "" @@ -1237,10 +1249,6 @@ msgstr "" msgid "Block bounds hidden" msgstr "" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "" @@ -1285,6 +1293,10 @@ msgstr "" msgid "Connecting to server..." msgstr "" +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "" @@ -1293,32 +1305,13 @@ msgstr "" msgid "Continue" msgstr "Nerusaken" -#: src/client/game.cpp -#, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" - #: src/client/game.cpp msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1398,6 +1391,10 @@ msgstr "" msgid "Fog enabled" msgstr "" +#: src/client/game.cpp +msgid "Fog enabled by game or mod" +msgstr "" + #: src/client/game.cpp msgid "Game info:" msgstr "" @@ -1418,10 +1415,6 @@ msgstr "" msgid "KiB/s" msgstr "" -#: src/client/game.cpp -msgid "Media..." -msgstr "" - #: src/client/game.cpp msgid "MiB/s" msgstr "" @@ -1577,10 +1570,6 @@ msgstr "" msgid "Zoom currently disabled by game or mod" msgstr "" -#: src/client/game.cpp -msgid "ok" -msgstr "oke" - #: src/client/gameui.cpp msgid "Chat currently disabled by game or mod" msgstr "" @@ -1901,6 +1890,15 @@ msgstr "" msgid "Minimap in texture mode" msgstr "" +#: src/client/shader.cpp +#, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2090,6 +2088,18 @@ msgstr "" msgid "press key" msgstr "pencet tombol" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Unable to open URL" +msgstr "" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "Gantos" @@ -2123,6 +2133,7 @@ msgstr "Volume Swanten: %d%%" #. 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 "jv" @@ -2310,12 +2321,6 @@ msgstr "" msgid "Adds particles when digging a node." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2338,6 +2343,10 @@ msgstr "" msgid "Advanced" msgstr "" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2391,6 +2400,17 @@ msgstr "" msgid "Apple trees noise" 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 "Arm inertia" msgstr "" @@ -2412,12 +2432,21 @@ msgid "" "clients.\n" "Small values potentially improve performance a lot, at the expense of " "visible\n" -"rendering glitches (some blocks will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +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 @@ -2480,6 +2509,10 @@ msgstr "" msgid "Biome noise" msgstr "" +#: src/settings_translation_file.cpp +msgid "Block cull optimize distance" +msgstr "" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "" @@ -2692,6 +2725,12 @@ msgstr "" msgid "Colored shadows" 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -2823,10 +2862,6 @@ msgid "" "Also controls the object crosshair color" msgstr "" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "" @@ -2876,6 +2911,19 @@ msgid "" "but also uses more resources." 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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "" @@ -3060,6 +3108,11 @@ msgstr "" msgid "Enable Bloom Debug" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Debanding" +msgstr "Ngagem Karisakan" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3079,6 +3132,10 @@ msgid "" "filtering." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable Post Processing" +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "" @@ -3121,6 +3178,10 @@ msgstr "" msgid "Enable mouse wheel (scroll) for item selection in hotbar." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable random mod loading (mainly used for testing)." +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3144,6 +3205,10 @@ msgid "" "expecting." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable touchscreen" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3152,12 +3217,6 @@ msgid "" "when connecting to the server." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3187,6 +3246,19 @@ msgstr "" msgid "Enables caching of facedir rotated meshes." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -3981,9 +4053,10 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" #: src/settings_translation_file.cpp @@ -4129,10 +4202,6 @@ msgid "" "Make fog and sky colors depend on daytime (dawn/sunset) and view direction." msgstr "" -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "" @@ -4181,7 +4250,9 @@ 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." +"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 @@ -4216,10 +4287,6 @@ msgstr "" msgid "Mapblock mesh generation threads" msgstr "" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "" @@ -4461,6 +4528,10 @@ msgstr "" msgid "Minimap scan height" msgstr "" +#: src/settings_translation_file.cpp +msgid "Minimum dig repetition interval" +msgstr "" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "" @@ -4529,6 +4600,10 @@ msgstr "" msgid "Mouse sensitivity multiplier." msgstr "" +#: src/settings_translation_file.cpp +msgid "Movement threshold" +msgstr "" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "" @@ -4637,10 +4712,6 @@ msgstr "" msgid "Occlusion Culling" msgstr "" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -4653,6 +4724,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "OpenGL debug" +msgstr "" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "" @@ -4762,6 +4837,15 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Protocol version minimum" +msgstr "Versi protokol boten cocog. " + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -4777,6 +4861,10 @@ msgstr "" msgid "Random input" msgstr "" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "" @@ -4964,8 +5052,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5083,7 +5171,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" @@ -5116,6 +5204,10 @@ msgid "" "Bright colors will bleed over the neighboring objects." 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 "Set to true to enable waving leaves." msgstr "" @@ -5155,8 +5247,7 @@ msgstr "" msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" #: src/settings_translation_file.cpp @@ -5226,13 +5317,6 @@ msgid "" "recommended." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "" @@ -5268,7 +5352,7 @@ 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 Change Keys." +"cinematic mode by using the key set in Controls." msgstr "" #: src/settings_translation_file.cpp @@ -5289,6 +5373,14 @@ msgstr "" msgid "Soft shadow radius" msgstr "" +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "Swanten" + +#: src/settings_translation_file.cpp +msgid "Sound Extensions Blacklist" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -5445,17 +5537,37 @@ msgid "" "when calling `/profiler save [format]` without format." 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 "" "The file path relative to your world path in which profiles will be saved to." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "" #: src/settings_translation_file.cpp -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" #: src/settings_translation_file.cpp @@ -5466,6 +5578,12 @@ msgid "" "Default is 1.0 (1/2 node)." 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 "The network interface that the server listens on." msgstr "" @@ -5492,7 +5610,7 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" #: src/settings_translation_file.cpp @@ -5549,6 +5667,10 @@ msgstr "" msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "" +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -5596,11 +5718,11 @@ msgid "Touchscreen sensitivity multiplier." msgstr "" #: src/settings_translation_file.cpp -msgid "Touchscreen threshold" +msgid "Tradeoffs for performance" msgstr "" #: src/settings_translation_file.cpp -msgid "Tradeoffs for performance" +msgid "Translucent liquids" msgstr "" #: src/settings_translation_file.cpp @@ -5638,7 +5760,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 "" #: src/settings_translation_file.cpp @@ -5736,10 +5860,6 @@ msgstr "" msgid "User Interfaces" msgstr "" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "" @@ -5826,12 +5946,24 @@ msgstr "" msgid "Volume" msgstr "Volume" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +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 "Volumetric lighting" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6068,11 +6200,17 @@ msgstr "" msgid "cURL parallel limit" msgstr "" +#~ msgid "Change Keys" +#~ msgstr "Gantos Tombol" + #~ msgid "Change keys" #~ msgstr "Gantos tombol" -#~ msgid "Sound" -#~ msgstr "Swanten" - #~ msgid "Uninstall Package" #~ msgstr "Copot Paket" + +#~ msgid "You have no games installed." +#~ msgstr "Panjenengan boten gadhah dolanan ingkang dipunpasang." + +#~ msgid "ok" +#~ msgstr "oke" diff --git a/po/kk/minetest.po b/po/kk/minetest.po index 45ec93c41..b93a16b3b 100644 --- a/po/kk/minetest.po +++ b/po/kk/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Kazakh (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\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" "Language-Team: Kazakh ]" -msgstr "" - -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" +msgid "[all | ] [-t]" msgstr "" #: builtin/fstk/ui.lua @@ -106,6 +102,10 @@ msgstr "Қате кездесті:" msgid "Main menu" msgstr "Басты мәзір" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "" @@ -134,176 +134,183 @@ msgstr "" msgid "We support protocol versions between version $1 and $2." msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download \"$1\"" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua #, fuzzy msgid "$1 downloading..." msgstr "Жүктелуде..." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "Ойындар" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +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 "Mods" +msgstr "Модтар" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#, fuzzy +msgid "No updates" +msgstr "Жаңарту" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "Жою" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "Жаңарту" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "" + +#: 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 "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "Болдырмау" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download \"$1\"" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "Ойындар" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #, fuzzy msgid "Install $1" msgstr "Жою" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "Жүктелуде..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "Модтар" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "No updates" -msgstr "Жаңарту" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "Жою" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "Жаңарту" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" msgstr "" #: builtin/mainmenu/content/pkgmgr.lua @@ -450,10 +457,20 @@ msgstr "" msgid "Decorations" msgstr "" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." msgstr "" +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "" @@ -817,10 +834,6 @@ msgstr "" msgid "Back" msgstr "" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -830,7 +843,8 @@ msgstr "" msgid "Clear" msgstr "" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "" @@ -1034,6 +1048,16 @@ msgstr "Жою" msgid "Install games from ContentDB" msgstr "" +#: builtin/mainmenu/tab_local.lua +msgid "Minetest 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 " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "Жаңа" @@ -1067,7 +1091,7 @@ msgid "Start Game" msgstr "" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." +msgid "You need to install a game before you can create a world." msgstr "" #: builtin/mainmenu/tab_online.lua @@ -1147,18 +1171,10 @@ msgstr "" msgid "Rebuilding shaders..." msgstr "" -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "" - #: src/client/clientlauncher.cpp msgid "Could not find or load game: " msgstr "" -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "" - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "Басты мәзір" @@ -1183,24 +1199,20 @@ msgstr "" msgid "Provided world path doesn't exist: " msgstr "" -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +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 "- Address: " -msgstr "" - #: src/client/game.cpp msgid "- Mode: " msgstr "" -#: src/client/game.cpp -msgid "- Port: " -msgstr "" - #: src/client/game.cpp msgid "- Public: " msgstr "" @@ -1236,10 +1248,6 @@ msgstr "" msgid "Block bounds hidden" msgstr "" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "" @@ -1284,6 +1292,10 @@ msgstr "" msgid "Connecting to server..." msgstr "" +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "" @@ -1292,32 +1304,13 @@ msgstr "" msgid "Continue" msgstr "Жалғастыру" -#: src/client/game.cpp -#, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" - #: src/client/game.cpp msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1397,6 +1390,10 @@ msgstr "" msgid "Fog enabled" msgstr "Тұман қосылды" +#: src/client/game.cpp +msgid "Fog enabled by game or mod" +msgstr "" + #: src/client/game.cpp msgid "Game info:" msgstr "" @@ -1417,10 +1414,6 @@ msgstr "" msgid "KiB/s" msgstr "" -#: src/client/game.cpp -msgid "Media..." -msgstr "" - #: src/client/game.cpp msgid "MiB/s" msgstr "" @@ -1577,10 +1570,6 @@ msgstr "" msgid "Zoom currently disabled by game or mod" msgstr "" -#: src/client/game.cpp -msgid "ok" -msgstr "" - #: src/client/gameui.cpp msgid "Chat currently disabled by game or mod" msgstr "" @@ -1903,6 +1892,15 @@ msgstr "" msgid "Minimap in texture mode" msgstr "" +#: src/client/shader.cpp +#, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2092,6 +2090,18 @@ msgstr "" msgid "press key" msgstr "" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Unable to open URL" +msgstr "" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "" @@ -2125,6 +2135,7 @@ msgstr "" #. 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 "kk" @@ -2310,12 +2321,6 @@ msgstr "" msgid "Adds particles when digging a node." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2338,6 +2343,10 @@ msgstr "" msgid "Advanced" msgstr "" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2391,6 +2400,17 @@ msgstr "" msgid "Apple trees noise" 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 "Arm inertia" msgstr "Қол инерциясы" @@ -2412,12 +2432,21 @@ msgid "" "clients.\n" "Small values potentially improve performance a lot, at the expense of " "visible\n" -"rendering glitches (some blocks will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +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 @@ -2480,6 +2509,10 @@ msgstr "" msgid "Biome noise" msgstr "" +#: src/settings_translation_file.cpp +msgid "Block cull optimize distance" +msgstr "" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "" @@ -2694,6 +2727,12 @@ msgstr "" msgid "Colored shadows" 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -2825,10 +2864,6 @@ msgid "" "Also controls the object crosshair color" msgstr "" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "" @@ -2878,6 +2913,19 @@ msgid "" "but also uses more resources." 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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "" @@ -3062,6 +3110,10 @@ msgstr "" msgid "Enable Bloom Debug" msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable Debanding" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3081,6 +3133,10 @@ msgid "" "filtering." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable Post Processing" +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "" @@ -3123,6 +3179,10 @@ msgstr "" msgid "Enable mouse wheel (scroll) for item selection in hotbar." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable random mod loading (mainly used for testing)." +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3146,6 +3206,10 @@ msgid "" "expecting." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable touchscreen" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3154,12 +3218,6 @@ msgid "" "when connecting to the server." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3189,6 +3247,19 @@ msgstr "" msgid "Enables caching of facedir rotated meshes." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -3987,9 +4058,10 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" #: src/settings_translation_file.cpp @@ -4135,10 +4207,6 @@ msgid "" "Make fog and sky colors depend on daytime (dawn/sunset) and view direction." msgstr "" -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "" @@ -4187,7 +4255,9 @@ 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." +"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 @@ -4222,10 +4292,6 @@ msgstr "" msgid "Mapblock mesh generation threads" msgstr "" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "" @@ -4467,6 +4533,10 @@ msgstr "" msgid "Minimap scan height" msgstr "" +#: src/settings_translation_file.cpp +msgid "Minimum dig repetition interval" +msgstr "" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "" @@ -4535,6 +4605,10 @@ msgstr "" msgid "Mouse sensitivity multiplier." msgstr "" +#: src/settings_translation_file.cpp +msgid "Movement threshold" +msgstr "" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "" @@ -4643,10 +4717,6 @@ msgstr "" msgid "Occlusion Culling" msgstr "" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -4659,6 +4729,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "OpenGL debug" +msgstr "" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "" @@ -4768,6 +4842,14 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "" +#: src/settings_translation_file.cpp +msgid "Protocol version minimum" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -4783,6 +4865,10 @@ msgstr "" msgid "Random input" msgstr "" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "" @@ -4970,8 +5056,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5089,7 +5175,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" @@ -5122,6 +5208,10 @@ msgid "" "Bright colors will bleed over the neighboring objects." 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 "Set to true to enable waving leaves." msgstr "" @@ -5161,8 +5251,7 @@ msgstr "" msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" #: src/settings_translation_file.cpp @@ -5232,13 +5321,6 @@ msgid "" "recommended." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "" @@ -5274,7 +5356,7 @@ 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 Change Keys." +"cinematic mode by using the key set in Controls." msgstr "" #: src/settings_translation_file.cpp @@ -5295,6 +5377,14 @@ msgstr "" msgid "Soft shadow radius" 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 "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -5451,17 +5541,37 @@ msgid "" "when calling `/profiler save [format]` without format." 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 "" "The file path relative to your world path in which profiles will be saved to." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "" #: src/settings_translation_file.cpp -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" #: src/settings_translation_file.cpp @@ -5472,6 +5582,12 @@ msgid "" "Default is 1.0 (1/2 node)." 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 "The network interface that the server listens on." msgstr "" @@ -5498,7 +5614,7 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" #: src/settings_translation_file.cpp @@ -5555,6 +5671,10 @@ msgstr "" msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "" +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -5602,11 +5722,11 @@ msgid "Touchscreen sensitivity multiplier." msgstr "" #: src/settings_translation_file.cpp -msgid "Touchscreen threshold" +msgid "Tradeoffs for performance" msgstr "" #: src/settings_translation_file.cpp -msgid "Tradeoffs for performance" +msgid "Translucent liquids" msgstr "" #: src/settings_translation_file.cpp @@ -5644,7 +5764,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 "" #: src/settings_translation_file.cpp @@ -5742,10 +5864,6 @@ msgstr "" msgid "User Interfaces" msgstr "" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "" @@ -5832,12 +5950,24 @@ msgstr "" msgid "Volume" msgstr "" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +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 "Volumetric lighting" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" diff --git a/po/kn/minetest.po b/po/kn/minetest.po index 0ec29a58a..c64e7c8ff 100644 --- a/po/kn/minetest.po +++ b/po/kn/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Kannada (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" "PO-Revision-Date: 2021-01-02 07:29+0000\n" "Last-Translator: Tejaswi Hegde \n" "Language-Team: Kannada ]" +msgid "[all | ] [-t]" msgstr "" -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" -msgstr "ಸರಿ" - #: builtin/fstk/ui.lua msgid "" msgstr "" @@ -104,6 +100,10 @@ msgstr "ದೋಷ ವೊಂದು ಸಂಭವಿಸಿದೆ:" msgid "Main menu" msgstr "ಮುಖ್ಯ ಮೆನು" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "ಸರಿ" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "ಮರುಸಂಪರ್ಕಿಸು" @@ -132,178 +132,185 @@ msgstr "ನಾವು $ 1 ಪ್ರೋಟೋಕಾಲ್ ಆವೃತ್ತಿಯ msgid "We support protocol versions between version $1 and $2." msgstr "ಆವೃತ್ತಿ $1 ಮತ್ತು $2 ನಡುವಿನ ಪ್ರೋಟೋಕಾಲ್ ಆವೃತ್ತಿಯನ್ನು ನಾವು ಬೆಂಬಲಿಸುತ್ತೇವೆ." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "Failed to download \"$1\"" +msgstr "$1 ಡೌನ್ಲೋಡ್ ಮಾಡಲು ಆಗಿಲ್ಲ" + +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr "$1 ಡೌನ್ಲೋಡ್ ಮಾಡಲು ಆಗಿಲ್ಲ" + +#: builtin/mainmenu/content/contentdb.lua +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua #, fuzzy msgid "$1 downloading..." msgstr "ಡೌನ್ ಲೋಡ್ ಆಗುತ್ತಿದೆ..." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "ಎಲ್ಲಾ ಪ್ಯಾಕೇಜುಗಳು" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "ಮುಖ್ಯ ಮೆನುಗೆ ಹಿಂತಿರುಗಿ" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "cURL ಇಲ್ಲದೆ ಮೈನ್ ಟೆಸ್ಟ್ ಅನ್ನು ಕಂಪೈಲ್ ಮಾಡಿದಾಗ ContentDB ಲಭ್ಯವಿಲ್ಲ" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "ಡೌನ್ ಲೋಡ್ ಆಗುತ್ತಿದೆ..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "ಆಟಗಳು" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +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 "Mods" +msgstr "ಮಾಡ್‍ಗಳು" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "ಯಾವುದೇ ಪ್ಯಾಕೇಜ್ ಗಳನ್ನು ಪಡೆಯಲಾಗಲಿಲ್ಲ" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "ಫಲಿತಾಂಶಗಳಿಲ್ಲ" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#, fuzzy +msgid "No updates" +msgstr "ನವೀಕರಿಸಿ" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "ಟೆಕ್‍ಸ್ಚರ್ ಪ್ಯಾಕ್ಗಳು" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "ಅನ್ಇನ್ಸ್ಟಾಲ್" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "ನವೀಕರಿಸಿ" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "" + +#: 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 "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "ರದ್ದುಮಾಡಿ" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "cURL ಇಲ್ಲದೆ ಮೈನ್ ಟೆಸ್ಟ್ ಅನ್ನು ಕಂಪೈಲ್ ಮಾಡಿದಾಗ ContentDB ಲಭ್ಯವಿಲ್ಲ" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "ಅವಲಂಬನೆಗಳು:" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "ಡೌನ್ ಲೋಡ್ ಆಗುತ್ತಿದೆ..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to download \"$1\"" -msgstr "$1 ಡೌನ್ಲೋಡ್ ಮಾಡಲು ಆಗಿಲ್ಲ" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "$1 ಡೌನ್ಲೋಡ್ ಮಾಡಲು ಆಗಿಲ್ಲ" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "ಆಟಗಳು" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "ಇನ್ಸ್ಟಾಲ್" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #, fuzzy msgid "Install $1" msgstr "ಇನ್ಸ್ಟಾಲ್" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #, fuzzy msgid "Install missing dependencies" msgstr "ಐಚ್ಛಿಕ ಅವಲಂಬನೆಗಳು:" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "ಲೋಡ್ ಆಗುತ್ತಿದೆ..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "ಮಾಡ್‍ಗಳು" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "ಯಾವುದೇ ಪ್ಯಾಕೇಜ್ ಗಳನ್ನು ಪಡೆಯಲಾಗಲಿಲ್ಲ" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "ಫಲಿತಾಂಶಗಳಿಲ್ಲ" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "No updates" -msgstr "ನವೀಕರಿಸಿ" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "ಟೆಕ್‍ಸ್ಚರ್ ಪ್ಯಾಕ್ಗಳು" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "ಅನ್ಇನ್ಸ್ಟಾಲ್" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "ನವೀಕರಿಸಿ" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" msgstr "" #: builtin/mainmenu/content/pkgmgr.lua @@ -457,10 +464,20 @@ msgstr "ರಚಿಸು" msgid "Decorations" msgstr "ಅಲಂಕಾರಗಳು" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." msgstr "" +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua #, fuzzy msgid "Dungeons" @@ -834,10 +851,6 @@ msgstr "" msgid "Back" msgstr "ಹಿಂದೆ" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -847,7 +860,8 @@ msgstr "" msgid "Clear" msgstr "" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "" @@ -1051,6 +1065,16 @@ msgstr "ಇನ್ಸ್ಟಾಲ್" msgid "Install games from ContentDB" msgstr "" +#: builtin/mainmenu/tab_local.lua +msgid "Minetest 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 " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "" @@ -1084,7 +1108,7 @@ msgid "Start Game" msgstr "" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." +msgid "You need to install a game before you can create a world." msgstr "" #: builtin/mainmenu/tab_online.lua @@ -1165,18 +1189,10 @@ msgstr "" msgid "Rebuilding shaders..." msgstr "" -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "" - #: src/client/clientlauncher.cpp msgid "Could not find or load game: " msgstr "" -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "" - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "" @@ -1201,24 +1217,20 @@ msgstr "" msgid "Provided world path doesn't exist: " msgstr "" -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +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 "- Address: " -msgstr "" - #: src/client/game.cpp msgid "- Mode: " msgstr "" -#: src/client/game.cpp -msgid "- Port: " -msgstr "" - #: src/client/game.cpp msgid "- Public: " msgstr "" @@ -1254,10 +1266,6 @@ msgstr "" msgid "Block bounds hidden" msgstr "" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "" @@ -1302,6 +1310,10 @@ msgstr "" msgid "Connecting to server..." msgstr "" +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "" @@ -1310,32 +1322,13 @@ msgstr "" msgid "Continue" msgstr "" -#: src/client/game.cpp -#, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" - #: src/client/game.cpp msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1415,6 +1408,10 @@ msgstr "" msgid "Fog enabled" msgstr "" +#: src/client/game.cpp +msgid "Fog enabled by game or mod" +msgstr "" + #: src/client/game.cpp msgid "Game info:" msgstr "" @@ -1435,10 +1432,6 @@ msgstr "" msgid "KiB/s" msgstr "" -#: src/client/game.cpp -msgid "Media..." -msgstr "" - #: src/client/game.cpp msgid "MiB/s" msgstr "" @@ -1594,10 +1587,6 @@ msgstr "" msgid "Zoom currently disabled by game or mod" msgstr "" -#: src/client/game.cpp -msgid "ok" -msgstr "" - #: src/client/gameui.cpp msgid "Chat currently disabled by game or mod" msgstr "" @@ -1918,6 +1907,15 @@ msgstr "" msgid "Minimap in texture mode" msgstr "" +#: src/client/shader.cpp +#, fuzzy, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "$1 ಡೌನ್ಲೋಡ್ ಮಾಡಲು ಆಗಿಲ್ಲ" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2109,6 +2107,19 @@ msgstr "" msgid "press key" msgstr "" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +#, fuzzy +msgid "Unable to open URL" +msgstr "$1 ಡೌನ್ಲೋಡ್ ಮಾಡಲು ಆಗಿಲ್ಲ" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "" @@ -2142,6 +2153,7 @@ msgstr "" #. 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 "kn" @@ -2327,12 +2339,6 @@ msgstr "" msgid "Adds particles when digging a node." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2355,6 +2361,10 @@ msgstr "" msgid "Advanced" msgstr "" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2408,6 +2418,17 @@ msgstr "" msgid "Apple trees noise" 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 "Arm inertia" msgstr "" @@ -2429,12 +2450,21 @@ msgid "" "clients.\n" "Small values potentially improve performance a lot, at the expense of " "visible\n" -"rendering glitches (some blocks will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +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 @@ -2498,6 +2528,10 @@ msgstr "ಪ್ರದೇಶಗಳು" msgid "Biome noise" msgstr "" +#: src/settings_translation_file.cpp +msgid "Block cull optimize distance" +msgstr "" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "" @@ -2710,6 +2744,12 @@ msgstr "" msgid "Colored shadows" 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -2841,10 +2881,6 @@ msgid "" "Also controls the object crosshair color" msgstr "" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "" @@ -2894,6 +2930,19 @@ msgid "" "but also uses more resources." 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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "" @@ -3080,6 +3129,11 @@ msgstr "ಎಲ್ಲವನ್ನೂ ಸಕ್ರಿಯಗೊಳಿಸಿ" msgid "Enable Bloom Debug" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Debanding" +msgstr "ಎಲ್ಲವನ್ನೂ ಸಕ್ರಿಯಗೊಳಿಸಿ" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3099,6 +3153,10 @@ msgid "" "filtering." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable Post Processing" +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "" @@ -3141,6 +3199,10 @@ msgstr "" msgid "Enable mouse wheel (scroll) for item selection in hotbar." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable random mod loading (mainly used for testing)." +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3164,6 +3226,10 @@ msgid "" "expecting." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable touchscreen" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3172,12 +3238,6 @@ msgid "" "when connecting to the server." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3207,6 +3267,19 @@ msgstr "" msgid "Enables caching of facedir rotated meshes." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -4002,9 +4075,10 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" #: src/settings_translation_file.cpp @@ -4150,10 +4224,6 @@ msgid "" "Make fog and sky colors depend on daytime (dawn/sunset) and view direction." msgstr "" -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "" @@ -4202,7 +4272,9 @@ 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." +"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 @@ -4237,10 +4309,6 @@ msgstr "" msgid "Mapblock mesh generation threads" msgstr "" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "" @@ -4482,6 +4550,10 @@ msgstr "" msgid "Minimap scan height" msgstr "" +#: src/settings_translation_file.cpp +msgid "Minimum dig repetition interval" +msgstr "" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "" @@ -4550,6 +4622,10 @@ msgstr "" msgid "Mouse sensitivity multiplier." msgstr "" +#: src/settings_translation_file.cpp +msgid "Movement threshold" +msgstr "" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "" @@ -4658,10 +4734,6 @@ msgstr "" msgid "Occlusion Culling" msgstr "" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -4674,6 +4746,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "OpenGL debug" +msgstr "" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "" @@ -4783,6 +4859,15 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Protocol version minimum" +msgstr "ಪ್ರೋಟೋಕಾಲ್ ಆವೃತ್ತಿ ಹೊಂದಿಕೆಯಾಗಿಲ್ಲ. " + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -4798,6 +4883,10 @@ msgstr "" msgid "Random input" msgstr "" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "" @@ -4985,8 +5074,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5105,7 +5194,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" @@ -5138,6 +5227,10 @@ msgid "" "Bright colors will bleed over the neighboring objects." 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 "Set to true to enable waving leaves." msgstr "" @@ -5177,8 +5270,7 @@ msgstr "" msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" #: src/settings_translation_file.cpp @@ -5248,13 +5340,6 @@ msgid "" "recommended." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "" @@ -5290,7 +5375,7 @@ 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 Change Keys." +"cinematic mode by using the key set in Controls." msgstr "" #: src/settings_translation_file.cpp @@ -5311,6 +5396,14 @@ msgstr "" msgid "Soft shadow radius" 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 "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -5467,17 +5560,37 @@ msgid "" "when calling `/profiler save [format]` without format." 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 "" "The file path relative to your world path in which profiles will be saved to." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "" #: src/settings_translation_file.cpp -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" #: src/settings_translation_file.cpp @@ -5488,6 +5601,12 @@ msgid "" "Default is 1.0 (1/2 node)." 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 "The network interface that the server listens on." msgstr "" @@ -5514,7 +5633,7 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" #: src/settings_translation_file.cpp @@ -5571,6 +5690,10 @@ msgstr "" msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "" +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -5618,11 +5741,11 @@ msgid "Touchscreen sensitivity multiplier." msgstr "" #: src/settings_translation_file.cpp -msgid "Touchscreen threshold" +msgid "Tradeoffs for performance" msgstr "" #: src/settings_translation_file.cpp -msgid "Tradeoffs for performance" +msgid "Translucent liquids" msgstr "" #: src/settings_translation_file.cpp @@ -5660,7 +5783,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 "" #: src/settings_translation_file.cpp @@ -5758,10 +5883,6 @@ msgstr "" msgid "User Interfaces" msgstr "" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "" @@ -5848,12 +5969,24 @@ msgstr "" msgid "Volume" msgstr "" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +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 "Volumetric lighting" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" diff --git a/po/ko/minetest.po b/po/ko/minetest.po index 7ea40bc62..09b215697 100644 --- a/po/ko/minetest.po +++ b/po/ko/minetest.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: Korean (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" -"PO-Revision-Date: 2022-05-08 00:22+0000\n" -"Last-Translator: Han So Ri <2_0_2_0_@naver.com>\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" "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 4.12.1\n" +"X-Generator: Weblate 5.4-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -71,25 +71,24 @@ msgstr "지역 명령어" #: builtin/common/chatcommands.lua msgid "Command not available: " -msgstr "" +msgstr "사용할수 없는 명령어: " #: builtin/common/chatcommands.lua -msgid "Get help for commands" -msgstr "" +#, fuzzy +msgid "Get help for commands (-t: output in chat)" +msgstr "명령어 도움말 보기" #: builtin/common/chatcommands.lua msgid "" "Use '.help ' to get more information, or '.help all' to list everything." msgstr "" +"자세한 정보를 얻으려면 '.help '를 사용하고, 모든 것을 나열하려면 '.help " +"all'을 사용하십시오." #: builtin/common/chatcommands.lua -msgid "[all | ]" +msgid "[all | ] [-t]" msgstr "" -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" -msgstr "확인" - #: builtin/fstk/ui.lua msgid "" msgstr "" @@ -106,6 +105,10 @@ msgstr "오류가 발생했습니다:" msgid "Main menu" msgstr "메인 메뉴" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "확인" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "재연결" @@ -134,181 +137,190 @@ msgstr "프로토콜 버전 $1만 제공합니다." msgid "We support protocol versions between version $1 and $2." msgstr "프로토콜 버전 $1와(과) $2 사이의 버전을 제공합니다." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." -msgstr "" +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "Failed to download \"$1\"" +msgstr "$1을 다운로드하는 데에 실패했습니다" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" -msgstr "" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr "$1을 다운로드하는 데에 실패했습니다" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "" +"모드 설치: \"$1\"는(은) 지원 되지 않는 파일 형식 이거나 손상된 압축 파일입니" +"다" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" msgstr "" +"$1 다운로드중,\n" +"$2 대기중" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua #, fuzzy msgid "$1 downloading..." msgstr "다운 받는 중..." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "모든 패키지" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "이미 설치됨" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "주 메뉴로 돌아가기" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "cURL 없이 Minetest를 컴파일한 경우 ContentDB를 사용할 수 없습니다" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "다운 받는 중..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "게임" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +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 "Mods" +msgstr "모드" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "검색할 수 있는 패키지가 없습니다" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "결과 없음" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "업데이트 없음" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "텍스처 팩" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "제거" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "업데이트" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "" + +#: 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 과 $2 종속품이 설치됩니다." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "이미 설치됨" + +#: builtin/mainmenu/content/dlg_install.lua #, fuzzy msgid "Base Game:" msgstr "호스트 게임" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "취소" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "cURL 없이 Minetest를 컴파일한 경우 ContentDB를 사용할 수 없습니다" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "의존:" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "다운 받는 중..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to download \"$1\"" -msgstr "$1을 다운로드하는 데에 실패했습니다" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "$1을 다운로드하는 데에 실패했습니다" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "" -"모드 설치: \"$1\"는(은) 지원 되지 않는 파일 형식 이거나 손상된 압축 파일입니" -"다" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "게임" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "설치" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #, fuzzy msgid "Install $1" msgstr "설치" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #, fuzzy msgid "Install missing dependencies" msgstr "종속성 선택:" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "불러오는 중..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "모드" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "검색할 수 있는 패키지가 없습니다" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "결과 없음" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "업데이트 없음" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "찾을 수 없음" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" -msgstr "" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" +msgstr "\"$1\"은 이미 존재합니다. 덮어쓰기 하시겠습니까?" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "텍스처 팩" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "제거" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "업데이트" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" msgstr "" #: builtin/mainmenu/content/pkgmgr.lua @@ -460,11 +472,21 @@ msgstr "만들기" msgid "Decorations" msgstr "장식" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua #, fuzzy msgid "Development Test is meant for developers." msgstr "경고: Development Test는 개발자를 위한 모드입니다." +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "던전" @@ -837,10 +859,6 @@ msgstr "" msgid "Back" msgstr "뒤로" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "키 변경" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -850,7 +868,8 @@ msgstr "채팅" msgid "Clear" msgstr "지우기" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "컨트롤" @@ -1066,6 +1085,16 @@ msgstr "설치" msgid "Install games from ContentDB" msgstr "ContentDB에서 게임 설치" +#: builtin/mainmenu/tab_local.lua +msgid "Minetest 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 " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "새로 만들기" @@ -1100,8 +1129,8 @@ msgid "Start Game" msgstr "게임 시작" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." -msgstr "게임이 설치되어 있지 않습니다." +msgid "You need to install a game before you can create a world." +msgstr "" #: builtin/mainmenu/tab_online.lua #, fuzzy @@ -1187,19 +1216,11 @@ msgstr "텍스쳐 로딩중..." msgid "Rebuilding shaders..." msgstr "쉐이더 개축중..." -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "연결 오류 (시간초과)" - #: src/client/clientlauncher.cpp #, fuzzy msgid "Could not find or load game: " msgstr "게임을 찾지 못했거나 로딩할 수 없습니다\"" -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "인식할 수 없는 게임 사양입니다." - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "주 메뉴" @@ -1224,7 +1245,11 @@ msgstr "패스워드 파일을 여는데 실패했습니다: " msgid "Provided world path doesn't exist: " msgstr "월드 경로가 존재하지 않습니다: " -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "미디어..." + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp msgid "" "\n" "Check debug.txt for details." @@ -1232,18 +1257,10 @@ msgstr "" "\n" "자세한 내용은 debug.txt을 확인 합니다." -#: src/client/game.cpp -msgid "- Address: " -msgstr "- 주소: " - #: src/client/game.cpp msgid "- Mode: " msgstr "- 모드: " -#: src/client/game.cpp -msgid "- Port: " -msgstr "- 포트: " - #: src/client/game.cpp msgid "- Public: " msgstr "- 공개: " @@ -1279,10 +1296,6 @@ msgstr "자동 전진 활성화" msgid "Block bounds hidden" msgstr "" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "" @@ -1329,6 +1342,10 @@ msgstr "클라이언트 스크립트가 비활성화됨" msgid "Connecting to server..." msgstr "서버 연결중..." +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "연결 오류 (시간초과)" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "" @@ -1337,47 +1354,14 @@ msgstr "" msgid "Continue" msgstr "계속" -#: src/client/game.cpp -#, fuzzy, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" -"조작:\n" -"-%s: 앞으로 이동\n" -"-%s:뒤로 이동\n" -"-%s:왼쪽으로 이동\n" -"-%s:오른쪽으로 이동\n" -"-%s: 점프/오르기\n" -"-%s:조용히 걷기/내려가기\n" -"-%s:아이템 버리기\n" -"-%s:인벤토리\n" -"-마우스: 돌기/보기\n" -"-마우스 왼쪽 클릭: 땅파기/펀치\n" -"-마우스 오른쪽 클릭: 두기/사용하기\n" -"-마우스 휠:아이템 선택\n" -"-%s: 채팅\n" - #: src/client/game.cpp #, fuzzy msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1469,6 +1453,11 @@ msgstr "안개 비활성화" msgid "Fog enabled" msgstr "안개 활성화" +#: src/client/game.cpp +#, fuzzy +msgid "Fog enabled by game or mod" +msgstr "게임 또는 모드에 의해 현재 확대 비활성화" + #: src/client/game.cpp msgid "Game info:" msgstr "게임 정보:" @@ -1489,10 +1478,6 @@ msgstr "아이템 정의중..." msgid "KiB/s" msgstr "KiB/s" -#: src/client/game.cpp -msgid "Media..." -msgstr "미디어..." - #: src/client/game.cpp msgid "MiB/s" msgstr "MiB/s" @@ -1651,10 +1636,6 @@ msgstr "선 표면 보이기" msgid "Zoom currently disabled by game or mod" msgstr "게임 또는 모드에 의해 현재 확대 비활성화" -#: src/client/game.cpp -msgid "ok" -msgstr "확인" - #: src/client/gameui.cpp #, fuzzy msgid "Chat currently disabled by game or mod" @@ -1990,6 +1971,15 @@ msgstr "표면 모드의 미니맵, 1배 확대" msgid "Minimap in texture mode" msgstr "최소 텍스처 크기" +#: src/client/shader.cpp +#, fuzzy, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "$1을 다운로드하는 데에 실패했습니다" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2182,6 +2172,19 @@ msgstr "확대/축소" msgid "press key" msgstr "키를 누르세요" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +#, fuzzy +msgid "Unable to open URL" +msgstr "$1을 다운로드하는 데에 실패했습니다" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "변경" @@ -2215,6 +2218,7 @@ msgstr "볼륨 조절: " #. 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 "ko" @@ -2436,13 +2440,6 @@ msgstr "객체 전달 범위 활성화" msgid "Adds particles when digging a node." msgstr "node를 부술 때의 파티클 효과를 추가합니다." -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" -"화면에 맞게 dpi 구성을 조정합니다 (X11 미지원 / Android 만 해당). 4k 화면 용." - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2471,6 +2468,10 @@ msgstr "아이템 이름 추가" msgid "Advanced" msgstr "고급" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2532,6 +2533,17 @@ msgstr "툴팁에 아이템 이름 추가." msgid "Apple trees noise" 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 "Arm inertia" msgstr "팔 관성" @@ -2549,18 +2561,37 @@ msgid "Ask to reconnect after crash" msgstr "충돌 후 재연결 요청" #: src/settings_translation_file.cpp +#, fuzzy 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 will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +msgstr "" +"이 거리에서 서버는 클라이언트로 전송되는 블록의 최적화를\n" +"활성화합니다.\n" +"작은 값은 눈에 띄는 렌더링 결함을 통해 \n" +"잠재적으로 성능을 크게 향상시킵니다 \n" +"(일부 블록은 수중과 동굴, 때로는 육지에서도 렌더링되지 않습니다).\n" +"이 값을 max_block_send_distance보다 큰 값으로 설정하면 \n" +"최적화가 비활성화됩니다.\n" +"맵 블록 (16 개 노드)에 명시되어 있습니다." + +#: src/settings_translation_file.cpp +#, fuzzy +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 "" "이 거리에서 서버는 클라이언트로 전송되는 블록의 최적화를\n" "활성화합니다.\n" @@ -2634,6 +2665,11 @@ msgstr "생물 군계" msgid "Biome noise" msgstr "Biome 노이즈" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Block cull optimize distance" +msgstr "블록 전송 최적화 거리" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "블록 전송 최적화 거리" @@ -2857,6 +2893,12 @@ msgstr "색깔있는 안개" msgid "Colored shadows" 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -3007,10 +3049,6 @@ msgid "" "Also controls the object crosshair color" msgstr "" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "감도(DPI)" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "디버그 로그 파일 크기 임계치" @@ -3060,6 +3098,24 @@ msgid "" "but also uses more resources." 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 " +"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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" +"오래된 클라이언트 연결을 허락하지 않는것을 사용.\n" +"이전 클라이언트는 서버에서 당신이 기대하는 새로운 특징들을 지원하지 않는다" +"면 \n" +"새로운 서버로 연결할 때 충돌하지 않을 것입니다." + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "나무에 사과가 있는 영역 정의." @@ -3246,6 +3302,11 @@ msgstr "모두 활성화" msgid "Enable Bloom Debug" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Debanding" +msgstr "데미지 활성화" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3265,6 +3326,11 @@ msgid "" "filtering." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Post Processing" +msgstr "조이스틱 활성화" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "" @@ -3307,6 +3373,11 @@ msgstr "모드 보안 적용" 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 "랜덤 사용자 입력 (테스트에 사용)를 사용 합니다." + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "랜덤 사용자 입력 (테스트에 사용)를 사용 합니다." @@ -3334,6 +3405,11 @@ msgstr "" "면 \n" "새로운 서버로 연결할 때 충돌하지 않을 것입니다." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable touchscreen" +msgstr "터치임계값 (픽셀)" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3345,12 +3421,6 @@ msgstr "" "원격 서버들은 서버에 연결할 때 매우 빠르게 미디어를\n" "다운로드 할 수 있도록 제공합니다.(예: 텍스처)" -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3385,6 +3455,19 @@ msgstr "인벤토리 아이템의 애니메이션 적용." msgid "Enables caching of facedir rotated meshes." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -4206,9 +4289,10 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" #: src/settings_translation_file.cpp @@ -4359,10 +4443,6 @@ msgid "" "Make fog and sky colors depend on daytime (dawn/sunset) and view direction." msgstr "" -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "모든 액체를 불투명하게 만들기" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "" @@ -4411,7 +4491,9 @@ 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." +"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 @@ -4447,10 +4529,6 @@ msgstr "맵 블록 생성 지연" msgid "Mapblock mesh generation threads" msgstr "맵 블록 생성 지연" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "Mapblock 메시 생성기의 MapBlock 캐시 크기 (MB)" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "" @@ -4698,6 +4776,11 @@ msgstr "" msgid "Minimap scan height" msgstr "미니맵 스캔 높이" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Minimum dig repetition interval" +msgstr "오른쪽 클릭 반복 간격" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "" @@ -4769,6 +4852,11 @@ msgstr "마우스 감도" msgid "Mouse sensitivity multiplier." msgstr "마우스 감도 멀티플라이어." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Movement threshold" +msgstr "동굴 임계치" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "" @@ -4885,10 +4973,6 @@ msgstr "" msgid "Occlusion Culling" msgstr "" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "불투명한 액체" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -4901,6 +4985,11 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "OpenGL debug" +msgstr "맵젠 디버그" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "" @@ -5015,6 +5104,15 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Protocol version minimum" +msgstr "프로토콜 버전이 알맞지 않습니다. " + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -5032,6 +5130,10 @@ msgstr "강 주변에 계곡을 만들기 위해 지형을 올립니다." msgid "Random input" msgstr "임의 입력" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "" @@ -5225,8 +5327,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5367,8 +5469,9 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" "언어 설정. 시스템 언어를 사용하려면 비워두세요.\n" @@ -5406,6 +5509,10 @@ msgid "" "Bright colors will bleed over the neighboring objects." 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 #, fuzzy msgid "Set to true to enable waving leaves." @@ -5451,11 +5558,11 @@ msgid "Shaders" msgstr "쉐이더" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" "쉐이더는 확장된 시각 효과를 제공하고 몇몇 비디오 카드의 성능이 증가할 수도 있" "습니다.\n" @@ -5534,13 +5641,6 @@ msgid "" "recommended." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "" @@ -5577,7 +5677,7 @@ msgstr "부드러운 조명효과" #, fuzzy msgid "" "Smooths rotation of camera when in cinematic mode, 0 to disable. Enter " -"cinematic mode by using the key set in Change Keys." +"cinematic mode by using the key set in Controls." msgstr "" "시네마틱 모드에서 카메라의 회전을 매끄럽게 만듭니다. 사용 하지 않으려면 0을 " "입력하세요." @@ -5604,6 +5704,15 @@ msgstr "" msgid "Soft shadow radius" msgstr "글꼴 그림자 투명도" +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "사운드" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sound Extensions Blacklist" +msgstr "콘텐츠DB 블랙리스트 플래그" + #: src/settings_translation_file.cpp msgid "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -5761,17 +5870,37 @@ msgid "" "when calling `/profiler save [format]` without format." 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 "" "The file path relative to your world path in which profiles will be saved to." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "" #: src/settings_translation_file.cpp -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" #: src/settings_translation_file.cpp @@ -5782,6 +5911,12 @@ msgid "" "Default is 1.0 (1/2 node)." 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 "The network interface that the server listens on." msgstr "" @@ -5811,7 +5946,7 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" #: src/settings_translation_file.cpp @@ -5868,6 +6003,10 @@ msgstr "" msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "" +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -5924,15 +6063,15 @@ msgstr "마우스 감도" msgid "Touchscreen sensitivity multiplier." msgstr "마우스 감도 멀티플라이어." -#: src/settings_translation_file.cpp -#, fuzzy -msgid "Touchscreen threshold" -msgstr "터치임계값 (픽셀)" - #: src/settings_translation_file.cpp msgid "Tradeoffs for performance" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Translucent liquids" +msgstr "불투명한 액체" + #: src/settings_translation_file.cpp msgid "Transparency Sorting Distance" msgstr "" @@ -5971,7 +6110,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 "" #: src/settings_translation_file.cpp @@ -6075,10 +6216,6 @@ msgstr "" msgid "User Interfaces" msgstr "" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "수직동기화 V-Sync" @@ -6165,6 +6302,10 @@ msgstr "" msgid "Volume" msgstr "볼륨" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Volume of all sounds.\n" @@ -6173,6 +6314,16 @@ msgstr "" "시차 교합 맵핑 적용.\n" "쉐이더를 활성화 해야 합니다." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volume when unfocused" +msgstr "게임이 일시정지될때의 최대 FPS." + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volumetric lighting" +msgstr "부드러운 조명효과" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6430,12 +6581,18 @@ msgstr "" msgid "cURL parallel limit" msgstr "" +#~ msgid "- Address: " +#~ msgstr "- 주소: " + #~ msgid "- Creative Mode: " #~ msgstr "- 크리에이티브 모드: " #~ msgid "- Damage: " #~ msgstr "- 데미지: " +#~ msgid "- Port: " +#~ msgstr "- 포트: " + #~ msgid "" #~ "0 = parallax occlusion with slope information (faster).\n" #~ "1 = relief mapping (slower, more accurate)." @@ -6470,6 +6627,13 @@ msgstr "" #~ "로컬 서버를 시작하려면 공백으로 두십시오.\n" #~ "주 메뉴의 주소 공간은 이 설정에 중복됩니다." +#~ msgid "" +#~ "Adjust dpi configuration to your screen (non X11/Android only) e.g. for " +#~ "4k screens." +#~ msgstr "" +#~ "화면에 맞게 dpi 구성을 조정합니다 (X11 미지원 / Android 만 해당). 4k 화면 " +#~ "용." + #~ msgid "All Settings" #~ msgstr "모든 설정" @@ -6523,6 +6687,9 @@ msgstr "" #~ msgid "Camera update toggle key" #~ msgstr "카메라 업데이트 토글 키" +#~ msgid "Change Keys" +#~ msgstr "키 변경" + #, fuzzy #~ msgid "Change keys" #~ msgstr "키 변경" @@ -6586,6 +6753,38 @@ msgstr "" #~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." #~ msgstr "터널 너비를 조절, 작은 수치는 넓은 터널을 만듭니다." +#, fuzzy, c-format +#~ msgid "" +#~ "Controls:\n" +#~ "- %s: move forwards\n" +#~ "- %s: move backwards\n" +#~ "- %s: move left\n" +#~ "- %s: move right\n" +#~ "- %s: jump/climb up\n" +#~ "- %s: dig/punch/use\n" +#~ "- %s: place/use\n" +#~ "- %s: sneak/climb down\n" +#~ "- %s: drop item\n" +#~ "- %s: inventory\n" +#~ "- Mouse: turn/look\n" +#~ "- Mouse wheel: select item\n" +#~ "- %s: chat\n" +#~ msgstr "" +#~ "조작:\n" +#~ "-%s: 앞으로 이동\n" +#~ "-%s:뒤로 이동\n" +#~ "-%s:왼쪽으로 이동\n" +#~ "-%s:오른쪽으로 이동\n" +#~ "-%s: 점프/오르기\n" +#~ "-%s:조용히 걷기/내려가기\n" +#~ "-%s:아이템 버리기\n" +#~ "-%s:인벤토리\n" +#~ "-마우스: 돌기/보기\n" +#~ "-마우스 왼쪽 클릭: 땅파기/펀치\n" +#~ "-마우스 오른쪽 클릭: 두기/사용하기\n" +#~ "-마우스 휠:아이템 선택\n" +#~ "-%s: 채팅\n" + #~ msgid "Creative" #~ msgstr "창의적인" @@ -6595,6 +6794,9 @@ msgstr "" #~ msgid "Crosshair color (R,G,B)." #~ msgstr "십자선 색 (빨, 초, 파)." +#~ msgid "DPI" +#~ msgstr "감도(DPI)" + #~ msgid "Damage" #~ msgstr "데미지" @@ -6797,6 +6999,9 @@ msgstr "" #~ msgid "Install: file: \"$1\"" #~ msgstr "모드 설치: 파일: \"$1\"" +#~ msgid "Invalid gamespec." +#~ msgstr "인식할 수 없는 게임 사양입니다." + #~ msgid "Inventory key" #~ msgstr "인벤토리 키" @@ -7467,6 +7672,12 @@ msgstr "" #~ msgid "Main menu style" #~ msgstr "주 메뉴 스크립트" +#~ msgid "Makes all liquids opaque" +#~ msgstr "모든 액체를 불투명하게 만들기" + +#~ msgid "Mapblock mesh generator's MapBlock cache size in MB" +#~ msgstr "Mapblock 메시 생성기의 MapBlock 캐시 크기 (MB)" + #~ msgid "Menus" #~ msgstr "메뉴" @@ -7679,9 +7890,6 @@ msgstr "" #~ msgstr "" #~ "카메라의 회전을 매끄럽게 만듭니다. 사용 하지 않으려면 0을 입력하세요." -#~ msgid "Sound" -#~ msgstr "사운드" - #~ msgid "Special" #~ msgstr "특별함" @@ -7738,6 +7946,10 @@ msgstr "" #~ msgid "Touch threshold (px):" #~ msgstr "터치 임계값: (픽셀)" +#, fuzzy +#~ msgid "Touchscreen threshold" +#~ msgstr "터치임계값 (픽셀)" + #~ msgid "Trilinear Filter" #~ msgstr "선형 필터" @@ -7821,8 +8033,14 @@ msgstr "" #~ msgid "You died." #~ msgstr "사망했습니다" +#~ msgid "You have no games installed." +#~ msgstr "게임이 설치되어 있지 않습니다." + #~ msgid "Z" #~ msgstr "Z" #~ msgid "needs_fallback_font" #~ msgstr "yes" + +#~ msgid "ok" +#~ msgstr "확인" diff --git a/po/kv/minetest.po b/po/kv/minetest.po new file mode 100644 index 000000000..d815cb5fe --- /dev/null +++ b/po/kv/minetest.po @@ -0,0 +1,6229 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the minetest package. +# FIRST AUTHOR , YEAR. +# +msgid "" +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-08-06 19:09+0000\n" +"Last-Translator: Mićadźoridź \n" +"Language-Team: Komi \n" +"Language: kv\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.7-dev\n" + +#: builtin/client/chatcommands.lua +msgid "Clear the out chat queue" +msgstr "Чат лёдз чышкыны" + +#: builtin/client/chatcommands.lua +msgid "Empty command." +msgstr "Куш команда." + +#: builtin/client/chatcommands.lua +msgid "Exit to main menu" +msgstr "Медшӧр менюӧ петны" + +#: builtin/client/chatcommands.lua +msgid "Invalid command: " +msgstr "Торксьӧм команда: " + +#: builtin/client/chatcommands.lua +msgid "Issued command: " +msgstr "Гижӧм команда: " + +#: builtin/client/chatcommands.lua +msgid "List online players" +msgstr "Везйын ворсысьяслӧн лыддьӧг" + +#: builtin/client/chatcommands.lua +msgid "Online players: " +msgstr "Ворсысьяс везйын: " + +#: builtin/client/chatcommands.lua +msgid "The out chat queue is now empty." +msgstr "Чат лёдз ӧні тыртӧм." + +#: builtin/client/chatcommands.lua +msgid "This command is disabled by server." +msgstr "Сервер тайӧ командасӧ кусӧдіс." + +#: builtin/client/death_formspec.lua src/client/game.cpp +msgid "Respawn" +msgstr "Ловзьыны" + +#: builtin/client/death_formspec.lua src/client/game.cpp +msgid "You died" +msgstr "Кулінныд" + +#: builtin/common/chatcommands.lua +msgid "Available commands:" +msgstr "Восьса командаяс:" + +#: builtin/common/chatcommands.lua +msgid "Available commands: " +msgstr "Восьса командаяс: " + +#: builtin/common/chatcommands.lua +msgid "Command not available: " +msgstr "Командаыс сиптӧма: " + +#: builtin/common/chatcommands.lua +msgid "Get help for commands (-t: output in chat)" +msgstr "Командаяс йылысь юӧр босьтны (-t: чатӧ гижӧм)" + +#: builtin/common/chatcommands.lua +msgid "" +"Use '.help ' to get more information, or '.help all' to list everything." +msgstr "Гиж «.help » содтӧд юӧрла али «.help all» — тыр лыддьӧгла." + +#: builtin/common/chatcommands.lua +msgid "[all | ] [-t]" +msgstr "[all | <команда>] [-t]" + +#: builtin/fstk/ui.lua +msgid "" +msgstr "<сиптӧма>" + +#: builtin/fstk/ui.lua +msgid "An error occurred in a Lua script:" +msgstr "Lua скриптын торксьӧм лоис:" + +#: builtin/fstk/ui.lua +msgid "An error occurred:" +msgstr "Торксьӧм лоис:" + +#: builtin/fstk/ui.lua +msgid "Main menu" +msgstr "Медшӧр меню" + +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "ОК" + +#: builtin/fstk/ui.lua +msgid "Reconnect" +msgstr "Выльысь йитчыны" + +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "Сервер корис выльысь йитчыны:" + +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch. " +msgstr "Протоколлӧн версияыс оз лӧсяв. " + +#: builtin/mainmenu/common.lua +msgid "Server enforces protocol version $1. " +msgstr "Серверыс корӧ $1 версия. " + +#: builtin/mainmenu/common.lua +msgid "Server supports protocol versions between $1 and $2. " +msgstr "Серверыс протоколлӧн $1-сянь $2-ӧдз версияын уджалӧ. " + +#: builtin/mainmenu/common.lua +msgid "We only support protocol version $1." +msgstr "Ми сӧмын протоколлӧн $1 версияын уджалам." + +#: builtin/mainmenu/common.lua +msgid "We support protocol versions between version $1 and $2." +msgstr "Ми сӧмын протоколлӧн $1-сянь $2-ӧдз версияын уджалам." + +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" +msgstr "«$1» пуктӧмигӧн тӧрксьӧм лоис: $2" + +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download \"$1\"" +msgstr "«$1» бӧсьтӧм эз артмы" + +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr "$1 бӧсьтӧм эз артмы" + +#: builtin/mainmenu/content/contentdb.lua +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "" +"«$1» перйыны эз артмы (дискын пуктанін этша, уджавтӧм файл сикас али жугалӧм " +"топӧдӧм файл)" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "" +"$1 downloading,\n" +"$2 queued" +msgstr "" +"$1 бӧсьтчӧ,\n" +"$2 виччысьӧ" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "$1 downloading..." +msgstr "$1 бӧсьтчӧ…" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "All packages" +msgstr "Став содтӧдъяс" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Back to Main Menu" +msgstr "Медшӧр менюӧ бӧр" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "ContentDB оз уджав, Minetest cURL-тӧг кӧ компиляторӧн тэчӧма" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "Босьтсьӧм..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "Ворсӧмъяс" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +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 "Mods" +msgstr "Модъяс" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "Содтӧдъяс босьтны эз артмы" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "Нинӧм абу аддзӧма" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "Выльмӧдӧмъяс абуӧсь" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "Лёдзын" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "Текстура чукӧр" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "$1 содтӧдыс абу аддзӧма." + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "Бырӧдны" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "Выльмӧдны" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "Выльмӧдны ставсӧ [$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 "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "$2-ысь $1" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "Нин пуктӧма" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Base Game:" +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 +#: 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 "Дугӧдны" + +#: builtin/mainmenu/content/dlg_install.lua +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua +msgid "Dependencies:" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install $1" +msgstr "Пуктыны $1" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install missing dependencies" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Not found" +msgstr "Абу аддзӧма" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Please check that the base game is correct." +msgstr "" + +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" +msgstr "«$1» нин эм. Выльысь гижны?" + +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" +msgstr "Выльысь гижны" + +#: builtin/mainmenu/content/pkgmgr.lua +msgid "$1 (Enabled)" +msgstr "$1 (Ӧзтӧма)" + +#: builtin/mainmenu/content/pkgmgr.lua +msgid "$1 mods" +msgstr "$1 мод" + +#: builtin/mainmenu/content/pkgmgr.lua +msgid "Failed to install $1 to $2" +msgstr "$2-ӧ $1 пуктыны эз артмы" + +#: builtin/mainmenu/content/pkgmgr.lua +msgid "Install: Unable to find suitable folder name for $1" +msgstr "Пуктӧм: $1-лы шогмана ним аддзыны эз артмы" + +#: builtin/mainmenu/content/pkgmgr.lua +msgid "Unable to find a valid mod, modpack, or game" +msgstr "Колана мод видзан куд, мод чукӧр али вӧрсӧм аддзыны эз артмы" + +#: builtin/mainmenu/content/pkgmgr.lua +msgid "Unable to install a $1 as a $2" +msgstr "$2 моз $1 пуктыны эз артмы" + +#: builtin/mainmenu/content/pkgmgr.lua +msgid "Unable to install a $1 as a texture pack" +msgstr "Текстура чукӧр моз $1 пуктыны эз артмы" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "(Enabled, has error)" +msgstr "(Ӧзтӧма, торксьӧмъяс эмӧсь)" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "(Unsatisfied)" +msgstr "(Лёка)" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Disable all" +msgstr "Ставсӧ кусӧдны" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Disable modpack" +msgstr "Мод чукӧр кусӧдны" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable all" +msgstr "Ставсӧ ӧзтыны" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable modpack" +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 "" +"«$1» модасӧ ӧзтыны эз артмы, сыын позьтӧм пасъяс эмӧсь. Позьӧ гижны сӧмын " +"татшӧм пасъясыс: [a-z0-9_]." + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Find More Mods" +msgstr "Унджык мод аддзыны" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" +msgstr "Мод:" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "No (optional) dependencies" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "No game description provided." +msgstr "Ворсӧм йывсьыс юӧр видзӧдлыны оз позь." + +#: builtin/mainmenu/dlg_config_world.lua +msgid "No hard dependencies" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "No modpack description provided." +msgstr "Мод чукӧр йывсыс юӧр видзӧдлыны оз позь." + +#: builtin/mainmenu/dlg_config_world.lua +msgid "No optional dependencies" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua +msgid "Optional dependencies:" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +#: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua +#: src/gui/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "Видзны" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" +msgstr "Енкӧла:" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "ӧзтӧма" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "A world named \"$1\" already exists" +msgstr "«$1» нима енкӧла нин эм" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Additional terrain" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Altitude chill" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Altitude dry" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Biome blending" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Biomes" +msgstr "Биомъяс" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Caverns" +msgstr "Рудӧгувъяс" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Caves" +msgstr "Рудӧгъяс" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "Вӧчны" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Decorations" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Development Test is meant for developers." +msgstr "Development Test артмӧдысьяслы вӧчӧма." + +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Dungeons" +msgstr "Муувъяс" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Flat terrain" +msgstr "Тшӧтшкӧсін" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Floating landmasses in the sky" +msgstr "Енэжвывса діяс" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Floatlands (experimental)" +msgstr "Енэжвывса діяс (экспериментӧн)" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Generate non-fractal terrain: Oceans and underground" +msgstr "Вӧчны фракталтӧм ин: саридзьяс да муувъяс" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Hills" +msgstr "Мылькъяс" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Humid rivers" +msgstr "Юяслӧн васӧдлун" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Increases humidity around rivers" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Install another game" +msgstr "Мӧд вӧрсӧмсӧ пуктыны" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Lakes" +msgstr "Тыяс" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Low humidity and high heat causes shallow or dry rivers" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen" +msgstr "Мапген" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen flags" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mapgen-specific flags" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mountains" +msgstr "Керӧсъяс" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mud flow" +msgstr "Ызгысь шор" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Network of tunnels and caves" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "No game selected" +msgstr "Ворсӧмыс абу бӧрйӧма" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Reduces heat with altitude" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Reduces humidity with altitude" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Rivers" +msgstr "Юяс" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Sea level rivers" +msgstr "Саридз веркӧс судта юяс" + +#: builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua +msgid "Seed" +msgstr "Сид" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Smooth transition between biomes" +msgstr "Биомъяс костын лайкыд вуджӧм" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Structures appearing on the terrain (no effect on trees and jungle grass " +"created by v6)" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Structures appearing on the terrain, typically trees and plants" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert" +msgstr "Шӧр климата ин, Лыааин" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert, Jungle" +msgstr "Шӧр климата ин, Лыааин, Джунгли" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert, Jungle, Tundra, Taiga" +msgstr "Шӧр климата ин, Лыааин, Джунгли, Тундра, Парма" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Terrain surface erosion" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Trees and jungle grass" +msgstr "Пуяс да тропик турунъяс" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Vary river depth" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Very large caverns deep in the underground" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "Енкӧлалӧн нимыс" + +#: builtin/mainmenu/dlg_delete_content.lua +msgid "Are you sure you want to delete \"$1\"?" +msgstr "Инаысь-ӧ кӧсъянныд «$1» бырӧдны?" + +#: builtin/mainmenu/dlg_delete_content.lua +#: builtin/mainmenu/dlg_delete_world.lua builtin/mainmenu/tab_local.lua +msgid "Delete" +msgstr "Бырӧдны" + +#: builtin/mainmenu/dlg_delete_content.lua +msgid "pkgmgr: failed to delete \"$1\"" +msgstr "pkgmgr: «$1» бырӧдны эз артмы" + +#: builtin/mainmenu/dlg_delete_content.lua +msgid "pkgmgr: invalid path \"$1\"" +msgstr "pkgmgr: торксьӧм «$1» туйыс" + +#: builtin/mainmenu/dlg_delete_world.lua +msgid "Delete World \"$1\"?" +msgstr "«$1» енкӧла бырӧдны?" + +#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "Гусякывтӧ вынсьӧд" + +#: builtin/mainmenu/dlg_register.lua +msgid "Joining $1" +msgstr "" + +#: builtin/mainmenu/dlg_register.lua +msgid "Missing name" +msgstr "Нимыс абу" + +#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua +#: builtin/mainmenu/tab_online.lua +msgid "Name" +msgstr "Ним" + +#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua +#: builtin/mainmenu/tab_online.lua +msgid "Password" +msgstr "Гусякыв" + +#: builtin/mainmenu/dlg_register.lua +msgid "Passwords do not match" +msgstr "Гусякывъясыс эз ӧтлаасьны" + +#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua +msgid "Register" +msgstr "Регистрация" + +#: builtin/mainmenu/dlg_reinstall_mtg.lua +msgid "Dismiss" +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." +msgstr "" + +#: 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 "" + +#: builtin/mainmenu/dlg_reinstall_mtg.lua +msgid "Minetest Game is no longer installed by default" +msgstr "" + +#: builtin/mainmenu/dlg_reinstall_mtg.lua +msgid "Reinstall Minetest Game" +msgstr "Minetest Game выльысь пуктыны" + +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Accept" +msgstr "Босьтны" + +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" +msgstr "Мод чукӧрлы выль ним сетны:" + +#: 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 "" + +#: builtin/mainmenu/dlg_version_info.lua +msgid "A new $1 version is available" +msgstr "Выль $1 версия восьтӧма" + +#: 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 "" +"Пуктӧм версия: $1\n" +"Выль версия: $2\n" +"Медвыль версия босьтӧм да выль функцияяс али лӧсьӧдӧмъяс йылысь тӧдмалӧм " +"могысь пырӧй $3-ӧ." + +#: builtin/mainmenu/dlg_version_info.lua +msgid "Later" +msgstr "Бӧрынджык" + +#: builtin/mainmenu/dlg_version_info.lua +msgid "Never" +msgstr "Некор" + +#: builtin/mainmenu/dlg_version_info.lua +msgid "Visit website" +msgstr "Сайтӧ пырны" + +#: builtin/mainmenu/init.lua +msgid "Settings" +msgstr "Лӧсьӧданін" + +#: builtin/mainmenu/serverlistmgr.lua +msgid "Public server list is disabled" +msgstr "Восьса серверъяслӧн лыддьӧгныс кусӧдӧма" + +#: builtin/mainmenu/serverlistmgr.lua +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" +"Видлӧй восьса серверъяслысь лыддьӧгнысӧ выльмӧдны да видлӧй ӧтуввезкӧд " +"йитчӧмсӧ." + +#: builtin/mainmenu/settings/components.lua +msgid "Browse" +msgstr "" + +#: builtin/mainmenu/settings/components.lua +msgid "Edit" +msgstr "Вежны" + +#: builtin/mainmenu/settings/components.lua +msgid "Select directory" +msgstr "Куд бӧрйыны" + +#: builtin/mainmenu/settings/components.lua +msgid "Select file" +msgstr "Файл бӧрйыны" + +#: builtin/mainmenu/settings/components.lua +msgid "Set" +msgstr "Индыны" + +#: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua +msgid "(No description of setting given)" +msgstr "(Лӧсьӧдӧм йывсьыс юӧр абу)" + +#: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua +msgid "2D Noise" +msgstr "2D шувгӧм" + +#: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua +msgid "Lacunarity" +msgstr "" + +#: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua +msgid "Octaves" +msgstr "Октавъяс" + +#: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua +#: src/settings_translation_file.cpp +msgid "Offset" +msgstr "Вештӧм" + +#: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua +msgid "Persistence" +msgstr "" + +#: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua +#: src/settings_translation_file.cpp +msgid "Scale" +msgstr "Бердӧг" + +#: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua +msgid "X spread" +msgstr "X кузя разалӧм" + +#: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua +msgid "Y spread" +msgstr "Y кузя разалӧм" + +#: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua +msgid "Z spread" +msgstr "Z паськалӧм" + +#. ~ "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 "" + +#. ~ "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 "подув ногӧн" + +#. ~ "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 "" + +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "(Use system language)" +msgstr "(Системалӧн кывйыс)" + +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "Accessibility" +msgstr "Восьсалун" + +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "Back" +msgstr "" + +#: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp +#: src/settings_translation_file.cpp +msgid "Chat" +msgstr "Чат" + +#: builtin/mainmenu/settings/dlg_settings.lua builtin/mainmenu/tab_online.lua +msgid "Clear" +msgstr "Чышкыны" + +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp +msgid "Controls" +msgstr "Веськӧдлӧм" + +#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +msgid "General" +msgstr "Медшӧр" + +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "Movement" +msgstr "Вуджӧм" + +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "Reset setting to default" +msgstr "" + +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "Reset setting to default ($1)" +msgstr "" + +#: builtin/mainmenu/settings/dlg_settings.lua builtin/mainmenu/tab_online.lua +msgid "Search" +msgstr "Корсьны" + +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "Show advanced settings" +msgstr "Унджык лӧсьӧдӧм петкӧдлыны" + +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "Show technical names" +msgstr "Техника нимъяс петкӧдлыны" + +#: builtin/mainmenu/settings/settingtypes.lua +msgid "Client Mods" +msgstr "Клиентъяслӧн модъяс" + +#: builtin/mainmenu/settings/settingtypes.lua +msgid "Content: Games" +msgstr "Содтӧдъяс: ворсӧмъяс" + +#: builtin/mainmenu/settings/settingtypes.lua +msgid "Content: Mods" +msgstr "Содтӧдъяс: модъяс" + +#: builtin/mainmenu/settings/shadows_component.lua +msgid "(The game will need to enable shadows as well)" +msgstr "" + +#: builtin/mainmenu/settings/shadows_component.lua +msgid "Custom" +msgstr "" + +#: builtin/mainmenu/settings/shadows_component.lua +msgid "Disabled" +msgstr "Кусӧдӧма" + +#: builtin/mainmenu/settings/shadows_component.lua +#: src/settings_translation_file.cpp +msgid "Dynamic shadows" +msgstr "Динамикаа вуджӧръяс" + +#: builtin/mainmenu/settings/shadows_component.lua +msgid "High" +msgstr "" + +#: builtin/mainmenu/settings/shadows_component.lua +msgid "Low" +msgstr "" + +#: builtin/mainmenu/settings/shadows_component.lua +msgid "Medium" +msgstr "" + +#: builtin/mainmenu/settings/shadows_component.lua +msgid "Very High" +msgstr "" + +#: builtin/mainmenu/settings/shadows_component.lua +msgid "Very Low" +msgstr "" + +#: builtin/mainmenu/tab_about.lua +msgid "About" +msgstr "Унджык" + +#: builtin/mainmenu/tab_about.lua +msgid "Active Contributors" +msgstr "" + +#: builtin/mainmenu/tab_about.lua +msgid "Active renderer:" +msgstr "" + +#: builtin/mainmenu/tab_about.lua +msgid "Core Developers" +msgstr "Медшӧр артмӧдысьяс" + +#: builtin/mainmenu/tab_about.lua +msgid "Core Team" +msgstr "Медшӧр котыр" + +#: builtin/mainmenu/tab_about.lua +msgid "Irrlicht device:" +msgstr "" + +#: builtin/mainmenu/tab_about.lua +msgid "Open User Data Directory" +msgstr "Вӧдитчысьлысь мыччӧдсӧ видзан куд восьтыны" + +#: 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 "" +"Восьтӧ файл веськӧдланінын вӧдитчысьлӧн енкӧлаяс, ворсӧмъяс, модъяс\n" +"да текстура чукӧр видзан кудсӧ." + +#: builtin/mainmenu/tab_about.lua +msgid "Previous Contributors" +msgstr "" + +#: builtin/mainmenu/tab_about.lua +msgid "Previous Core Developers" +msgstr "" + +#: builtin/mainmenu/tab_about.lua +msgid "Share debug log" +msgstr "" + +#: builtin/mainmenu/tab_content.lua +msgid "Browse online content" +msgstr "" + +#: builtin/mainmenu/tab_content.lua +msgid "Browse online content [$1]" +msgstr "" + +#: builtin/mainmenu/tab_content.lua +msgid "Content" +msgstr "Содтӧдъяс" + +#: builtin/mainmenu/tab_content.lua +msgid "Content [$1]" +msgstr "Содтӧдъяс [$1]" + +#: builtin/mainmenu/tab_content.lua +msgid "Disable Texture Pack" +msgstr "" + +#: builtin/mainmenu/tab_content.lua +msgid "Installed Packages:" +msgstr "Пуктӧм содтӧдъяс:" + +#: builtin/mainmenu/tab_content.lua +msgid "No dependencies." +msgstr "" + +#: builtin/mainmenu/tab_content.lua +msgid "No package description available" +msgstr "" + +#: builtin/mainmenu/tab_content.lua +msgid "Rename" +msgstr "Выль ним сетны" + +#: builtin/mainmenu/tab_content.lua +msgid "Update available?" +msgstr "" + +#: builtin/mainmenu/tab_content.lua +msgid "Use Texture Pack" +msgstr "Текстура чукӧрсӧ ӧзтыны" + +#: builtin/mainmenu/tab_local.lua +msgid "Announce Server" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Bind Address" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Creative Mode" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Enable Damage" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Host Game" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Host Server" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Install a game" +msgstr "Ворсӧм пуктыны" + +#: builtin/mainmenu/tab_local.lua +msgid "Install games from ContentDB" +msgstr "ContentDB-ысь вӧрсӧмъяс пуктыны" + +#: builtin/mainmenu/tab_local.lua +msgid "Minetest 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 " +"games." +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "New" +msgstr "Выль" + +#: builtin/mainmenu/tab_local.lua +msgid "No world created or selected!" +msgstr "Енкӧла абу бӧрйӧма/абу вӧчӧма!" + +#: builtin/mainmenu/tab_local.lua +msgid "Play Game" +msgstr "Ворсны" + +#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua +msgid "Port" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Select Mods" +msgstr "Модъяс бӧрйӧм" + +#: builtin/mainmenu/tab_local.lua +msgid "Select World:" +msgstr "Енкӧла бӧрйыны:" + +#: builtin/mainmenu/tab_local.lua +msgid "Server Port" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Start Game" +msgstr "Ворсны кутны" + +#: builtin/mainmenu/tab_local.lua +msgid "You need to install a game before you can create a world." +msgstr "Енкӧла вӧчтӧдз тіянлы колӧ пуктыны ворсӧм." + +#: builtin/mainmenu/tab_online.lua +msgid "Address" +msgstr "Инпас" + +#: builtin/mainmenu/tab_online.lua +msgid "Creative mode" +msgstr "" + +#. ~ PvP = Player versus Player +#: builtin/mainmenu/tab_online.lua +msgid "Damage / PvP" +msgstr "Доймӧм / PvP" + +#: builtin/mainmenu/tab_online.lua +msgid "Favorites" +msgstr "Бӧрйӧмъяс" + +#: builtin/mainmenu/tab_online.lua +msgid "Incompatible Servers" +msgstr "Ӧта-мӧдкӧд лӧсявтӧм серверъясыс" + +#: builtin/mainmenu/tab_online.lua +msgid "Join Game" +msgstr "" + +#: builtin/mainmenu/tab_online.lua +msgid "Login" +msgstr "Пырны" + +#: builtin/mainmenu/tab_online.lua +msgid "Ping" +msgstr "" + +#: builtin/mainmenu/tab_online.lua +msgid "Public Servers" +msgstr "Восьса серверъяс" + +#: builtin/mainmenu/tab_online.lua +msgid "Refresh" +msgstr "Выльмӧдны" + +#: builtin/mainmenu/tab_online.lua +msgid "Remove favorite" +msgstr "" + +#: builtin/mainmenu/tab_online.lua +msgid "Server Description" +msgstr "Сервер йывсьыс юӧр" + +#: src/client/client.cpp +msgid "Connection aborted (protocol error?)." +msgstr "" + +#: src/client/client.cpp src/client/game.cpp +msgid "Connection timed out." +msgstr "" + +#: src/client/client.cpp +msgid "Done!" +msgstr "Дась!" + +#: src/client/client.cpp +msgid "Initializing nodes" +msgstr "" + +#: src/client/client.cpp +msgid "Initializing nodes..." +msgstr "" + +#: src/client/client.cpp +msgid "Loading textures..." +msgstr "Текстураяс тэчӧм..." + +#: src/client/client.cpp +msgid "Rebuilding shaders..." +msgstr "Шейдӧръяс тэчӧм..." + +#: src/client/clientlauncher.cpp +msgid "Could not find or load game: " +msgstr "Ворсӧмсӧ аддзыны/пуктыны эз артмы: " + +#: src/client/clientlauncher.cpp +msgid "Main Menu" +msgstr "Медшӧр Меню" + +#: src/client/clientlauncher.cpp +msgid "No world selected and no address provided. Nothing to do." +msgstr "Енкӧла абу бӧрйӧма да инпас абу индӧма. Нинӧм вӧчны." + +#: src/client/clientlauncher.cpp +msgid "Player name too long." +msgstr "Ворсысьлӧн нимыс вывті кузь." + +#: src/client/clientlauncher.cpp +msgid "Please choose a name!" +msgstr "Ен могысь, ним бӧрйӧй!" + +#: src/client/clientlauncher.cpp +msgid "Provided password file failed to open: " +msgstr "Сетӧм гусякыла файлсӧ восьтны эз артмы: " + +#: src/client/clientlauncher.cpp +msgid "Provided world path doesn't exist: " +msgstr "" + +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +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 "- Mode: " +msgstr "" + +#: src/client/game.cpp +msgid "- Public: " +msgstr "- Восьса: " + +#. ~ PvP = Player versus Player +#: src/client/game.cpp +msgid "- PvP: " +msgstr "- РvP: " + +#: src/client/game.cpp +msgid "- Server Name: " +msgstr "- Серверлӧн ним: " + +#: src/client/game.cpp +msgid "A serialization error occurred:" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + +#: src/client/game.cpp +msgid "Automatic forward disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Automatic forward enabled" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Camera update disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Camera update enabled" +msgstr "" + +#: src/client/game.cpp +msgid "Can't show block bounds (disabled by game or mod)" +msgstr "" + +#: src/client/game.cpp +msgid "Change Password" +msgstr "Гусякывсӧ вежны" + +#: src/client/game.cpp +msgid "Cinematic mode disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Cinematic mode enabled" +msgstr "" + +#: src/client/game.cpp +msgid "Client disconnected" +msgstr "" + +#: src/client/game.cpp +msgid "Client side scripting is disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Connecting to server..." +msgstr "" + +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "" + +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + +#: src/client/game.cpp +msgid "Continue" +msgstr "" + +#: 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 "" + +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + +#: src/client/game.cpp +msgid "Creating client..." +msgstr "Клиентӧс вӧчӧм..." + +#: src/client/game.cpp +msgid "Creating server..." +msgstr "Сервер вӧчӧм..." + +#: src/client/game.cpp +msgid "Debug info and profiler graph hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Debug info shown" +msgstr "" + +#: src/client/game.cpp +msgid "Debug info, profiler graph, and wireframe hidden" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Error creating client: %s" +msgstr "" + +#: src/client/game.cpp +msgid "Exit to Menu" +msgstr "Менюӧ петны" + +#: src/client/game.cpp +msgid "Exit to OS" +msgstr "Вӧрсӧмсьыс петны" + +#: src/client/game.cpp +msgid "Fast mode disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Fast mode enabled" +msgstr "" + +#: src/client/game.cpp +msgid "Fast mode enabled (note: no 'fast' privilege)" +msgstr "" + +#: src/client/game.cpp +msgid "Fly mode disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Fly mode enabled" +msgstr "" + +#: src/client/game.cpp +msgid "Fly mode enabled (note: no 'fly' privilege)" +msgstr "" + +#: src/client/game.cpp +msgid "Fog disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Fog enabled" +msgstr "" + +#: src/client/game.cpp +msgid "Fog enabled by game or mod" +msgstr "" + +#: src/client/game.cpp +msgid "Game info:" +msgstr "Ворсӧм йывсьыс юӧр:" + +#: src/client/game.cpp +msgid "Game paused" +msgstr "" + +#: src/client/game.cpp +msgid "Hosting server" +msgstr "" + +#: src/client/game.cpp +msgid "Item definitions..." +msgstr "" + +#: src/client/game.cpp +msgid "KiB/s" +msgstr "КиБ/с" + +#: src/client/game.cpp +msgid "MiB/s" +msgstr "МиБ/с" + +#: src/client/game.cpp +msgid "Minimap currently disabled by game or mod" +msgstr "" + +#: src/client/game.cpp +msgid "Multiplayer" +msgstr "" + +#: src/client/game.cpp +msgid "Noclip mode disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Noclip mode enabled" +msgstr "" + +#: src/client/game.cpp +msgid "Noclip mode enabled (note: no 'noclip' privilege)" +msgstr "" + +#: src/client/game.cpp +msgid "Node definitions..." +msgstr "" + +#: src/client/game.cpp +msgid "Off" +msgstr "Кусӧдӧма" + +#: src/client/game.cpp +msgid "On" +msgstr "Ӧзтӧма" + +#: src/client/game.cpp +msgid "Pitch move mode disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Pitch move mode enabled" +msgstr "" + +#: src/client/game.cpp +msgid "Profiler graph shown" +msgstr "" + +#: src/client/game.cpp +msgid "Remote server" +msgstr "" + +#: src/client/game.cpp +msgid "Resolving address..." +msgstr "" + +#: src/client/game.cpp +msgid "Shutting down..." +msgstr "Помасьӧм..." + +#: src/client/game.cpp +msgid "Singleplayer" +msgstr "" + +#: src/client/game.cpp +msgid "Sound Volume" +msgstr "Шы горалун" + +#: src/client/game.cpp +msgid "Sound muted" +msgstr "" + +#: src/client/game.cpp +msgid "Sound system is disabled" +msgstr "Шы система кусӧдӧма" + +#: src/client/game.cpp +msgid "Sound system is not supported on this build" +msgstr "" + +#: src/client/game.cpp +msgid "Sound unmuted" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "IPv6 кусӧдӧма, сы вӧсна %s кывзыны эз артмы" + +#: src/client/game.cpp +msgid "Unlimited viewing range disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Unlimited viewing range enabled" +msgstr "" + +#: src/client/game.cpp +msgid "Unlimited viewing range enabled, but forbidden by game or mod" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Viewing changed to %d (the minimum)" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Viewing changed to %d (the minimum), but limited to %d by game or mod" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Viewing range changed to %d" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Viewing range changed to %d (the maximum)" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "" +"Viewing range changed to %d (the maximum), but limited to %d by game or mod" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Viewing range changed to %d, but limited to %d by game or mod" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Volume changed to %d%%" +msgstr "" + +#: src/client/game.cpp +msgid "Wireframe shown" +msgstr "" + +#: src/client/game.cpp +msgid "Zoom currently disabled by game or mod" +msgstr "" + +#: src/client/gameui.cpp +msgid "Chat currently disabled by game or mod" +msgstr "" + +#: src/client/gameui.cpp +msgid "Chat hidden" +msgstr "" + +#: src/client/gameui.cpp +msgid "Chat shown" +msgstr "" + +#: src/client/gameui.cpp +msgid "HUD hidden" +msgstr "" + +#: src/client/gameui.cpp +msgid "HUD shown" +msgstr "" + +#: src/client/gameui.cpp +msgid "Profiler hidden" +msgstr "" + +#: src/client/gameui.cpp +#, c-format +msgid "Profiler shown (page %d of %d)" +msgstr "" + +#: src/client/keycode.cpp +msgid "Apps" +msgstr "Уджтасъяс" + +#: src/client/keycode.cpp +msgid "Backspace" +msgstr "Shift" + +#. ~ Usually paired with the Pause key +#: src/client/keycode.cpp +msgid "Break Key" +msgstr "Break" + +#: src/client/keycode.cpp +msgid "Caps Lock" +msgstr "Caps Lock" + +#: src/client/keycode.cpp +msgid "Clear Key" +msgstr "Clear" + +#: src/client/keycode.cpp +msgid "Control Key" +msgstr "Ctrl" + +#: src/client/keycode.cpp +msgid "Delete Key" +msgstr "Delete" + +#: src/client/keycode.cpp +msgid "Down Arrow" +msgstr "" + +#: src/client/keycode.cpp +msgid "End" +msgstr "End" + +#: src/client/keycode.cpp +msgid "Erase EOF" +msgstr "" + +#: src/client/keycode.cpp +msgid "Execute" +msgstr "Вӧчны" + +#: src/client/keycode.cpp +msgid "Help" +msgstr "Help" + +#: src/client/keycode.cpp +msgid "Home" +msgstr "Home" + +#: src/client/keycode.cpp +msgid "IME Accept" +msgstr "" + +#: src/client/keycode.cpp +msgid "IME Convert" +msgstr "" + +#: src/client/keycode.cpp +msgid "IME Escape" +msgstr "" + +#: src/client/keycode.cpp +msgid "IME Mode Change" +msgstr "" + +#: src/client/keycode.cpp +msgid "IME Nonconvert" +msgstr "" + +#: src/client/keycode.cpp +msgid "Insert" +msgstr "Insert" + +#: src/client/keycode.cpp +msgid "Left Arrow" +msgstr "Шуйгалань" + +#: src/client/keycode.cpp +msgid "Left Button" +msgstr "Шуйга личкантор" + +#: src/client/keycode.cpp +msgid "Left Control" +msgstr "Шуйга Ctrl" + +#: src/client/keycode.cpp +msgid "Left Menu" +msgstr "Шуйга Alt" + +#: src/client/keycode.cpp +msgid "Left Shift" +msgstr "Шуйга Shift" + +#: src/client/keycode.cpp +msgid "Left Windows" +msgstr "Шуйга Win" + +#. ~ Key name, common on Windows keyboards +#: src/client/keycode.cpp +msgid "Menu Key" +msgstr "Menu" + +#: src/client/keycode.cpp +msgid "Middle Button" +msgstr "Шӧр личкантор" + +#: src/client/keycode.cpp +msgid "Num Lock" +msgstr "Num Lock" + +#: src/client/keycode.cpp +msgid "Numpad *" +msgstr "Numpad вывса *" + +#: src/client/keycode.cpp +msgid "Numpad +" +msgstr "Numpad вывса +" + +#: src/client/keycode.cpp +msgid "Numpad -" +msgstr "Numpad вывса -" + +#: src/client/keycode.cpp +msgid "Numpad ." +msgstr "Numpad вывса ." + +#: src/client/keycode.cpp +msgid "Numpad /" +msgstr "Numpad вывса /" + +#: src/client/keycode.cpp +msgid "Numpad 0" +msgstr "Numpad вывса 0" + +#: src/client/keycode.cpp +msgid "Numpad 1" +msgstr "Numpad вывса 1" + +#: src/client/keycode.cpp +msgid "Numpad 2" +msgstr "Numpad вывса 2" + +#: src/client/keycode.cpp +msgid "Numpad 3" +msgstr "Numpad вывса 3" + +#: src/client/keycode.cpp +msgid "Numpad 4" +msgstr "Numpad вывса 4" + +#: src/client/keycode.cpp +msgid "Numpad 5" +msgstr "Numpad вывса 5" + +#: src/client/keycode.cpp +msgid "Numpad 6" +msgstr "Numpad вывса 6" + +#: src/client/keycode.cpp +msgid "Numpad 7" +msgstr "Numpad вывса 7" + +#: src/client/keycode.cpp +msgid "Numpad 8" +msgstr "Numpad вывса 8" + +#: src/client/keycode.cpp +msgid "Numpad 9" +msgstr "Numpad вывса 9" + +#: src/client/keycode.cpp +msgid "OEM Clear" +msgstr "" + +#: src/client/keycode.cpp +msgid "Page Down" +msgstr "Page Down" + +#: src/client/keycode.cpp +msgid "Page Up" +msgstr "Page Up" + +#. ~ Usually paired with the Break key +#: src/client/keycode.cpp +msgid "Pause Key" +msgstr "Pause" + +#: src/client/keycode.cpp +msgid "Play" +msgstr "Ворсны" + +#. ~ "Print screen" key +#: src/client/keycode.cpp +msgid "Print" +msgstr "Print Screen" + +#: src/client/keycode.cpp +msgid "Return Key" +msgstr "Enter" + +#: src/client/keycode.cpp +msgid "Right Arrow" +msgstr "Веськыдлань" + +#: src/client/keycode.cpp +msgid "Right Button" +msgstr "Веськыд личкантор" + +#: src/client/keycode.cpp +msgid "Right Control" +msgstr "Веськыд Ctrl" + +#: src/client/keycode.cpp +msgid "Right Menu" +msgstr "Веськыд Alt" + +#: src/client/keycode.cpp +msgid "Right Shift" +msgstr "Веськыд Shift" + +#: src/client/keycode.cpp +msgid "Right Windows" +msgstr "Веськыд Win" + +#: src/client/keycode.cpp +msgid "Scroll Lock" +msgstr "Scroll Lock" + +#. ~ Key name +#: src/client/keycode.cpp +msgid "Select" +msgstr "" + +#: src/client/keycode.cpp +msgid "Shift Key" +msgstr "Shift" + +#: src/client/keycode.cpp +msgid "Sleep" +msgstr "Узьны" + +#: src/client/keycode.cpp +msgid "Snapshot" +msgstr "Snapshot" + +#: src/client/keycode.cpp +msgid "Space" +msgstr "Space" + +#: src/client/keycode.cpp +msgid "Tab" +msgstr "Tab" + +#: src/client/keycode.cpp +msgid "Up Arrow" +msgstr "" + +#: src/client/keycode.cpp +msgid "X Button 1" +msgstr "Медводдза X личкантор" + +#: src/client/keycode.cpp +msgid "X Button 2" +msgstr "Мӧд X личкантор" + +#: src/client/keycode.cpp +msgid "Zoom Key" +msgstr "Zoom" + +#: src/client/minimap.cpp +msgid "Minimap hidden" +msgstr "" + +#: src/client/minimap.cpp +#, c-format +msgid "Minimap in radar mode, Zoom x%d" +msgstr "" + +#: src/client/minimap.cpp +#, c-format +msgid "Minimap in surface mode, Zoom x%d" +msgstr "" + +#: src/client/minimap.cpp +msgid "Minimap in texture mode" +msgstr "" + +#: src/client/shader.cpp +#, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +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 "%s абу:" + +#: 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/content/mod_configuration.cpp +msgid "Some mods have unsatisfied dependencies:" +msgstr "" + +#: src/gui/guiChatConsole.cpp +msgid "Failed to open webpage" +msgstr "" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + +#: src/gui/guiFormSpecMenu.cpp +msgid "Proceed" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "\"Aux1\" = climb down" +msgstr "«Aux1» = лэччӧм" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Autoforward" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp +msgid "Automatic jumping" +msgstr "Автоматӧн чеччыштӧм" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Aux1" +msgstr "Aux1" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Backward" +msgstr "Бӧрӧ" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Block bounds" +msgstr "Мапблоклӧн доръяс" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Change camera" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Command" +msgstr "Команда" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Console" +msgstr "Консоль" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Dec. range" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Dec. volume" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "Чӧвтны" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "Водзӧ" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Inc. range" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Inc. volume" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Inventory" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "Чеччыштны" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Keybindings." +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Left" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Local command" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Mute" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Next item" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Prev. item" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "Тыдалан диапазон" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Right" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Screenshot" +msgstr "Скриншот" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Sneak" +msgstr "Кыйксьӧдны" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle HUD" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle chat log" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle fog" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle minimap" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle noclip" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle pitchmove" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Zoom" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "личканторсӧ личкӧй" + +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Unable to open URL" +msgstr "" + +#: src/gui/guiPasswordChange.cpp +msgid "Change" +msgstr "Вежны" + +#: src/gui/guiPasswordChange.cpp +msgid "New Password" +msgstr "Выль гусякыв" + +#: src/gui/guiPasswordChange.cpp +msgid "Old Password" +msgstr "Важ гусякыв" + +#: src/gui/guiPasswordChange.cpp +msgid "Passwords do not match!" +msgstr "Гусякывъясыс эз ӧтлаасьны!" + +#: src/gui/guiVolumeChange.cpp +msgid "Exit" +msgstr "Пӧдлавны" + +#: src/gui/guiVolumeChange.cpp +msgid "Muted" +msgstr "" + +#: src/gui/guiVolumeChange.cpp +#, c-format +msgid "Sound Volume: %d%%" +msgstr "Шы горалун: %d%%" + +#. ~ 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 "kv" + +#: 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 "" + +#: src/server.cpp +#, c-format +msgid "%s while shutting down: " +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 "" +"(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 "2D noise that controls the shape/size of ridged mountains." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "2D noise that controls the shape/size of rolling hills." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "2D noise that controls the shape/size of step mountains." +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 "2D noise that controls the size/occurrence of rolling hills." +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 "2D noise that locates the river valleys and channels." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D" +msgstr "3D" + +#: src/settings_translation_file.cpp +msgid "3D clouds" +msgstr "3D кымӧръяс" + +#: src/settings_translation_file.cpp +msgid "3D mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D mode parallax strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D noise defining giant caverns." +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 "" +"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 "3D noise defining structure of river canyon walls." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D noise defining terrain." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D noise for mountain overhangs, cliffs, etc. Usually small variations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D noise that determines number of dungeons per mapchunk." +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 "" +"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 "A message to be displayed to all clients when the server crashes." +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 "ABM interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "ABM time budget" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Absolute limit of queued blocks to emerge" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Acceleration in air" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Acceleration of gravity, in nodes per second per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active Block Modifiers" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active block management interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active block range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active object send range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Adds particles when digging a node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +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 "Admin name" +msgstr "Веськӧдлысьлӧн ним" + +#: src/settings_translation_file.cpp +msgid "Advanced" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +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 "Always fly fast" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ambient occlusion gamma" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Amplifies the valleys." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Anisotropic filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Announce server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Announce to this serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Anti-aliasing scale" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Antialiasing method" +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 "Apple trees noise" +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 "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 "Ask to reconnect after crash" +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 "" +"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 "Audio" +msgstr "Шы" + +#: src/settings_translation_file.cpp +msgid "Automatically jump up single-node obstacles." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Automatically report to the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Autoscaling mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Aux1 key for climbing/descending" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Base ground level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Base terrain height." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Base texture size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Basic privileges" +msgstr "Панас инӧдъяс" + +#: src/settings_translation_file.cpp +msgid "Beach noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Beach noise threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bilinear filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bind address" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Biome API" +msgstr "Биомлӧн API" + +#: src/settings_translation_file.cpp +msgid "Biome noise" +msgstr "Биомлӧн шувгӧм" + +#: src/settings_translation_file.cpp +msgid "Block cull optimize distance" +msgstr "" + +#: src/settings_translation_file.cpp +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 "Лайкъялӧм" + +#: src/settings_translation_file.cpp +msgid "Bold and italic font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bold and italic monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bold font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bold monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Build inside player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Builtin" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera" +msgstr "Камера" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing in cinematic mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cave noise" +msgstr "Рудӧглӧн шувгӧм" + +#: src/settings_translation_file.cpp +msgid "Cave noise #1" +msgstr "Рудӧглӧн шувгӧм #1" + +#: src/settings_translation_file.cpp +msgid "Cave noise #2" +msgstr "Рудӧглӧн шувгӧм #2" + +#: src/settings_translation_file.cpp +msgid "Cave width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cave1 noise" +msgstr "Рудӧглӧн медводдза шувгӧм" + +#: src/settings_translation_file.cpp +msgid "Cave2 noise" +msgstr "Рудӧглӧн мӧд шувгӧм" + +#: src/settings_translation_file.cpp +msgid "Cavern limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cavern noise" +msgstr "Рудӧгувлӧн шувгӧм" + +#: src/settings_translation_file.cpp +msgid "Cavern taper" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cavern threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cavern upper limit" +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 "Chat command time message threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat commands" +msgstr "Чатлӧн командаяс" + +#: src/settings_translation_file.cpp +msgid "Chat font size" +msgstr "Чатса шрифтлӧн ыджда" + +#: src/settings_translation_file.cpp +msgid "Chat log level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat message count limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat message format" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat message kick threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat message max length" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat weblinks" +msgstr "Чатын ыстӧгъяс" + +#: src/settings_translation_file.cpp +msgid "Chunk size" +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 "Client" +msgstr "Клиент" + +#: src/settings_translation_file.cpp +msgid "Client Mesh Chunksize" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client and Server" +msgstr "Клиент да сервер" + +#: src/settings_translation_file.cpp +msgid "Client modding" +msgstr "Артмӧдысьяслы" + +#: src/settings_translation_file.cpp +msgid "Client side modding restrictions" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client-side Modding" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client-side node lookup range restriction" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Climbing speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud radius" +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 "Clouds in menu" +msgstr "Менюын кымӧръяс" + +#: src/settings_translation_file.cpp +msgid "Colored fog" +msgstr "Рӧма руалӧм" + +#: src/settings_translation_file.cpp +msgid "Colored shadows" +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 "" +"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" +"so see a full list at https://content.minetest.net/help/content_flags/" +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 "" +"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 "" +"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 "" +"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 "Connect glass" +msgstr "Ӧтлаалӧм стеклӧяс" + +#: src/settings_translation_file.cpp +msgid "Connect to external media server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Connects glass if supported by node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Console alpha" +msgstr "Консольлӧн сӧдзлун" + +#: src/settings_translation_file.cpp +msgid "Console color" +msgstr "Консольлӧн рӧм" + +#: src/settings_translation_file.cpp +msgid "Console height" +msgstr "Консольлӧн судта" + +#: src/settings_translation_file.cpp +msgid "Content Repository" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "ContentDB Flag Blacklist" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "ContentDB Max Concurrent Downloads" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "ContentDB URL" +msgstr "ContentDB-лӧн инпас" + +#: 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 "" +"Controls sinking speed in liquid when idling. Negative values will cause\n" +"you to rise instead." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Controls steepness/depth of lake depressions." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Controls steepness/height of hills." +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 "Crash message" +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 "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 "Debug log file size threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debug log level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debugging" +msgstr "Лӧсьӧдӧм" + +#: src/settings_translation_file.cpp +msgid "Dedicated server step" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default acceleration" +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 "Default password" +msgstr "Подув гусякыв" + +#: src/settings_translation_file.cpp +msgid "Default privileges" +msgstr "Подув инӧдъяс" + +#: src/settings_translation_file.cpp +msgid "Default report format" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default stack size" +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 "" +"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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines areas where trees have apples." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines areas with sandy beaches." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines distribution of higher terrain and steepness of cliffs." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines distribution of higher terrain." +msgstr "" + +#: src/settings_translation_file.cpp +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 "" + +#: src/settings_translation_file.cpp +msgid "Defines location and terrain of optional hills and lakes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the base ground level." +msgstr "" + +#: src/settings_translation_file.cpp +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 "" + +#: 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 "Defines the width of the river channel." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the width of the river valley." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines tree areas and tree density." +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 "Delay in sending blocks after building" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Delay showing tooltips, stated in milliseconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Deprecated Lua API handling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Depth below which you'll find giant caverns." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Depth below which you'll find large caves." +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 "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 "Desynchronize block animation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Developer Options" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Digging particles" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Disable anticheat" +msgstr "Анти-чит кусӧдны" + +#: src/settings_translation_file.cpp +msgid "Disallow empty passwords" +msgstr "Кушӧн гусякывсӧ кольны оз позь" + +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +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" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Domain name of server, to be displayed in the serverlist." +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 "Dump the mapgen debug information." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dungeon maximum Y" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dungeon minimum Y" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dungeon noise" +msgstr "Муувлӧн шувгӧм" + +#: src/settings_translation_file.cpp +msgid "Enable Automatic Exposure" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable Bloom" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable Bloom Debug" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable Debanding" +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 "" +"Enable Lua modding support on client.\n" +"This support is experimental and API can change." +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 "Enable Post Processing" +msgstr "Содтӧд эффектъяслысь вӧччӧм ӧзтыны" + +#: src/settings_translation_file.cpp +msgid "Enable Raytraced Culling" +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 "" +"Enable colored shadows.\n" +"On true translucent nodes cast colored shadows. This is expensive." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable console window" +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 "Enable mod channels support." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable mod security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable mouse wheel (scroll) for item selection in hotbar." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable random mod loading (mainly used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +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." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable split login/register" +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 "Enable touchscreen" +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 "" +"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 "" +"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 "" +"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 "Enables animation of inventory items." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables caching of facedir rotated meshes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +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 "Engine Profiler" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Engine profiling data print interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Entity methods" +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 "Exposure compensation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FPS when unfocused or paused" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Factor noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fall bobbing factor" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode speed" +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 "" +"File in client/serverlist/ that contains your favorite servers displayed in " +"the\n" +"Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Filler depth" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Filler depth noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Filmic tone mapping" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Filtering and Antialiasing" +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 "First of two 3D noises that together define tunnels." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fixed map seed" +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 "Floatland density" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland maximum Y" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland minimum Y" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland noise" +msgstr "Енэжвывса ділӧн шувгӧм" + +#: src/settings_translation_file.cpp +msgid "Floatland taper exponent" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland tapering distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland water level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog" +msgstr "Ру" + +#: src/settings_translation_file.cpp +msgid "Fog start" +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 "Font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size" +msgstr "Шрифтлӧн ыджда" + +#: src/settings_translation_file.cpp +msgid "Font size divisible by" +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 of the monospace font where 1 unit = 1 pixel at 96 DPI" +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 "" +"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 "" +"Format of player chat messages. The following strings are valid " +"placeholders:\n" +"@name, @message, @timestamp (optional)" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Format of screenshots." +msgstr "Скриншотлӧн ыджда." + +#: src/settings_translation_file.cpp +msgid "Formspec Full-Screen Background Color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec Full-Screen Background Opacity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec full-screen background color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec full-screen background opacity (between 0 and 255)." +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 "Fractal type" +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 "" +"From how far blocks are generated for clients, stated in mapblocks (16 " +"nodes)." +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 "" +"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 "Full screen" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI" +msgstr "Графикаа интерфейс" + +#: src/settings_translation_file.cpp +msgid "GUI scaling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter txr2img" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gamepads" +msgstr "Ворсан контроллеръяс" + +#: src/settings_translation_file.cpp +msgid "Global callbacks" +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 "" +"Gradient of light curve at maximum light level.\n" +"Controls the contrast of the highest light levels." +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 "Graphics" +msgstr "Графика" + +#: src/settings_translation_file.cpp +msgid "Graphics Effects" +msgstr "Графика эффектъяс" + +#: src/settings_translation_file.cpp +msgid "Graphics and Audio" +msgstr "Графика да шы" + +#: src/settings_translation_file.cpp +msgid "Gravity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ground level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ground noise" +msgstr "Мулӧн шувгӧм" + +#: src/settings_translation_file.cpp +msgid "HTTP mods" +msgstr "HTTP модъяс" + +#: src/settings_translation_file.cpp +msgid "HUD" +msgstr "Ворсан интерфейс" + +#: src/settings_translation_file.cpp +msgid "HUD scaling" +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 "" +"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 "Heat blend noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Heat noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height component of the initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height select noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hill steepness" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hill threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hilliness1 noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hilliness2 noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hilliness3 noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hilliness4 noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Homepage of server, to be displayed in the serverlist." +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 "" +"Horizontal and vertical acceleration in fast mode,\n" +"in nodes per second per second." +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 "Hotbar: Enable mouse wheel for selection" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar: Invert mouse wheel direction" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "How deep to make rivers." +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 "" +"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 "" +"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 "How wide to make rivers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Humidity blend noise" +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 "IPv6" +msgstr "IPv6" + +#: src/settings_translation_file.cpp +msgid "IPv6 server" +msgstr "IPv6 сервер" + +#: 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 "" +"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 "" +"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down " +"and\n" +"descending." +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 "" +"If enabled, actions are recorded for rollback.\n" +"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" +"Only enable this if you know what you are doing." +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 "" +"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 "" +"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 "" +"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 "" +"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 "" +"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 "If this is set, players will always (re)spawn at the given position." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ignore world errors" +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 "In-game chat console background color (R,G,B)." +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 "Initial vertical speed when jumping, in nodes per second." +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 "Instrument chat commands on registration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Instrument global callback functions on registration.\n" +"(anything you pass to a minetest.register_*() function)" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Instrument the action function of Active Block Modifiers on registration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Instrument the action function of Loading Block Modifiers on registration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Instrument the methods of entities on registration." +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 "Interval of sending time of day to clients, stated in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Inventory items animations" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert mouse" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert mouse wheel (scroll) direction for item selection in hotbar." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert vertical mouse movement." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Italic font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Italic monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Item entity TTL" +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 "Joystick ID" +msgstr "Контроллерлӧн ID-ыс" + +#: src/settings_translation_file.cpp +msgid "Joystick button repetition interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Joystick dead zone" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Joystick frustum sensitivity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Joystick type" +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 "" +"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 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 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 "Жулия w" + +#: src/settings_translation_file.cpp +msgid "Julia x" +msgstr "Жулия x" + +#: src/settings_translation_file.cpp +msgid "Julia y" +msgstr "Жулия y" + +#: src/settings_translation_file.cpp +msgid "Julia z" +msgstr "Жулия z" + +#: src/settings_translation_file.cpp +msgid "Jumping speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Keyboard and Mouse" +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 "Lake steepness" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Lake threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Language" +msgstr "Кыв" + +#: src/settings_translation_file.cpp +msgid "Large cave depth" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Large cave maximum number" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Large cave minimum number" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Large cave proportion flooded" +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 "" +"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 "" + +#: src/settings_translation_file.cpp +msgid "Length of liquid waves." +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 "Length of time between NodeTimer execution cycles, stated in seconds." +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 "" +"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 "Light curve boost" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Light curve boost center" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Light curve boost spread" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Light curve gamma" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Light curve high gradient" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Light curve low gradient" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Lighting" +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 "" +"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 "Liquid fluidity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid loop max" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid queue purge time" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid sinking" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update interval in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update tick" +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 "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 "" + +#: src/settings_translation_file.cpp +msgid "Lower Y limit of floatlands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Main menu script" +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 "Map Compression Level for Disk Storage" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map Compression Level for Network Transfer" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map directory" +msgstr "Мусерпасъяс видзан куд" + +#: src/settings_translation_file.cpp +msgid "Map generation attributes specific to Mapgen Carpathian." +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 "" +"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 "" +"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 "Map generation attributes specific to Mapgen v5." +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 "" +"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 "" + +#: src/settings_translation_file.cpp +msgid "Map generation limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map save interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map shadows update frames" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock mesh generation delay" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock mesh generation threads" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock unload timeout" +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 "Mapgen Flat" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Flat specific flags" +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 "Mapgen V5" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen V5 specific flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen V6" +msgstr "V6 мапген" + +#: src/settings_translation_file.cpp +msgid "Mapgen V6 specific flags" +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 "Mapgen Valleys" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Valleys specific flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen debug" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block generate distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block send distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max liquids processed per step." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. clearobjects extra blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. packets per iteration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS" +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 "Maximum distance to render shadows." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum forceloaded blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum hotbar width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum limit of random number of large caves per mapchunk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum limit of random number of small caves per mapchunk." +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 "" +"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 "Maximum number of blocks that can be queued for loading." +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 "" +"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 "" +"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 "" +"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 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 "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of players that can be connected simultaneously." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of recent chat messages to show" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of statically stored objects in a block." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum objects per block" +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 "Maximum simultaneous block sends per client" +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 "" +"Maximum time a file download (e.g. a mod download) may take, stated in " +"milliseconds." +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 "Maximum users" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mesh cache" +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 "Method used to highlight selected object." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap scan height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum dig repetition interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum limit of random number of large caves per mapchunk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum limit of random number of small caves per mapchunk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mipmapping" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Miscellaneous" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mod Profiler" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mod Security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mod channels" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modifies the size of the HUD elements." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font size divisible by" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mountain height noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mountain noise" +msgstr "Керӧслӧн шувгӧм" + +#: src/settings_translation_file.cpp +msgid "Mountain variation noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mountain zero level" +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 "Movement threshold" +msgstr "Вуджан тагӧс" + +#: src/settings_translation_file.cpp +msgid "Mud noise" +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 "Mute sound" +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 "" +"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 "" +"Name of the server, to be displayed when players join and in the serverlist." +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 "Networking" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New users need to input this password." +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 "NodeTimer interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noises" +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 "" +"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 "Number of messages a player may send per 10 seconds." +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 " +"threads." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Occlusion Culler" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Occlusion Culling" +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 "" +"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 "OpenGL debug" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +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 "" +"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 "" +"Path to shader directory. If no path is defined, default location will be " +"used." +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 "" +"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 "Pause on lost window focus" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Per-player limit of queued blocks load from disk" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Per-player limit of queued blocks to generate" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Physics" +msgstr "Физика" + +#: src/settings_translation_file.cpp +msgid "Place repetition interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Poisson filtering" +msgstr "Пуассон серти разӧдӧм" + +#: src/settings_translation_file.cpp +msgid "Post Processing" +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 "Prevent mods from doing insecure things like running shell commands." +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 "Privileges that players with basic_privs can grant" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler" +msgstr "Профайлер" + +#: src/settings_translation_file.cpp +msgid "Prometheus listener address" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Prometheus listener address.\n" +"If Minetest 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 "Proportion of large caves that contain liquid." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Protocol version minimum" +msgstr "Протоколлӧн медічӧт версия" + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +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 "Raises terrain to make valleys around the rivers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Random input" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Recent Chat Messages" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Regular font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Remember screen size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Remote media" +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 "Replaces the default main menu with a custom one." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Report path" +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 "Ridge mountain spread noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ridge noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ridge underwater noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ridged mountain size noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "River channel depth" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "River channel width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "River depth" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "River noise" +msgstr "Юлӧн шувгӧм" + +#: src/settings_translation_file.cpp +msgid "River size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "River valley width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rollback recording" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rolling hill size noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rolling hills spread noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Safe digging and placing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Sandy beaches occur when np_beach exceeds this value." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Save the map received by the client on disk." +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 "Saving map received from server" +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 "Screen" +msgstr "Экран" + +#: src/settings_translation_file.cpp +msgid "Screen height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screenshot folder" +msgstr "Скриншота куд" + +#: src/settings_translation_file.cpp +msgid "Screenshot format" +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 "Screenshots" +msgstr "Скриншотъяс" + +#: src/settings_translation_file.cpp +msgid "Seabed 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 "Second of two 3D noises that together define tunnels." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous" +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 "Selection box border color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box width" +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 "Server" +msgstr "Сервер" + +#: src/settings_translation_file.cpp +msgid "Server Gameplay" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server Security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server URL" +msgstr "Серверлӧн инпас" + +#: src/settings_translation_file.cpp +msgid "Server address" +msgstr "Серверлӧн домен" + +#: src/settings_translation_file.cpp +msgid "Server description" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server name" +msgstr "Серверлӧн ним" + +#: src/settings_translation_file.cpp +msgid "Server port" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server-side occlusion culling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server/Env Performance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Serverlist URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Serverlist and MOTD" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Serverlist file" +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 "" +"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 "" +"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 "" +"Set the maximum length of a chat message (in characters) sent by clients." +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 "" +"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 "Set to true to enable Shadow Mapping." +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 "Set to true to enable volumetric lighting effect (a.k.a. \"Godrays\")." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Set to true to enable waving leaves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Set to true to enable waving liquids (like water)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Set to true to enable waving plants." +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 "" +"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 "Shader path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shaders" +msgstr "Шейдӧръяс" + +#: src/settings_translation_file.cpp +msgid "" +"Shaders allow advanced visual effects and may increase performance on some " +"video\n" +"cards." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shadow filter quality" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shadow map max distance in nodes to render shadows" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shadow map texture in 32 bits" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shadow map texture size" +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 "Shadow strength gamma" +msgstr "Вуджӧрлӧн гамма" + +#: src/settings_translation_file.cpp +msgid "Show debug info" +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 "Show name tag backgrounds by default" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shutdown message" +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 "" +"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 "Sky Body Orbit Tilt" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Slice w" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Slope and fill work together to modify the heights." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Small cave maximum number" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Small cave minimum number" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Small-scale humidity variation for blending biomes on borders." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Small-scale temperature variation for blending biomes on borders." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooth lighting" +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 "" +"Smooths rotation of camera, also called look or mouse smoothing. 0 to " +"disable." +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 "Soft shadow radius" +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 "" +"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 "" +"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 "" +"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 "" +"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 "Static spawn point" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Steepness noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Step mountain size noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Step mountain spread noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strength of 3D mode parallax." +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 "Strict protocol checking" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strip color codes" +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 "Synchronous SQLite" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Temperature variation for biomes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Terrain alternative noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Terrain base noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Terrain height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Terrain higher noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Terrain noise" +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 "" +"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 "Terrain persistence noise" +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 "" +"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 "The URL for the content repository" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The dead zone of the joystick" +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 "" +"The delay in milliseconds after which a touch interaction is considered a " +"long tap." +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 "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The identifier of the joystick to use" +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 "" +"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 "" +"The minimum time in seconds it takes between digging nodes when holding\n" +"the dig button." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The network interface that the server listens on." +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 "" +"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 "" +"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." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The sensitivity of the joystick axes for moving the\n" +"in-game view frustum around." +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 "" +"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 "" +"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 "" +"The time in seconds it takes between repeated events\n" +"when holding down a joystick button combination." +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 "The type of joystick" +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 "Third of 4 2D noises that together define hill/mountain range height." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +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 "Time of day when a new world is started, in millihours (0-23999)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time send interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time speed" +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 "" +"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 "Tooltip delay" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Touchscreen" +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 "Tradeoffs for performance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Translucent liquids" +msgstr "Сӧдзов кизьӧрторъяс" + +#: src/settings_translation_file.cpp +msgid "Transparency Sorting Distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trees noise" +msgstr "Пулӧн шувгӧм" + +#: src/settings_translation_file.cpp +msgid "Trilinear filtering" +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 "Trusted mods" +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 "" +"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 "" + +#: src/settings_translation_file.cpp +msgid "URL to the server list displayed in the Multiplayer Tab." +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 "Unlimited player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unload unused server data" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Update information URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Upper Y limit of dungeons." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Upper Y limit of floatlands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use 3D cloud look instead of flat." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use a cloud animation for the main menu background." +msgstr "Менюын шуньгысь кымӧръяс." + +#: src/settings_translation_file.cpp +msgid "Use anisotropic filtering when looking at textures from an angle." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use bilinear filtering when scaling textures." +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 "" +"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 "" +"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 "" +"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 "" +"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 "User Interfaces" +msgstr "Интерфейсъяс" + +#: src/settings_translation_file.cpp +msgid "VSync" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Valley depth" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Valley fill" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Valley profile" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Valley slope" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Variation of biome filler depth." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Variation of maximum mountain height (in nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Variation of number of caves." +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 "Varies depth of biome surface nodes." +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 "Varies steepness of cliffs." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical climbing speed, in nodes per second." +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 "Video driver" +msgstr "Видеодрайвер" + +#: src/settings_translation_file.cpp +msgid "View bobbing factor" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View distance in nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Virtual joystick triggers Aux1 button" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Volume" +msgstr "Горалун" + +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Volume of all sounds.\n" +"Requires the sound system to be enabled." +msgstr "" +"Шыяслӧн горалунныс.\n" +"Шы система ӧзтыны колӧ." + +#: src/settings_translation_file.cpp +msgid "Volume when unfocused" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Volumetric lighting" +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 "Walking and flying speed, in nodes per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Walking 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 "Water level" +msgstr "Ва веркӧс" + +#: src/settings_translation_file.cpp +msgid "Water surface level of the world." +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 "Waving liquids" +msgstr "Гыалысь кизьӧрторъяс" + +#: src/settings_translation_file.cpp +msgid "Waving liquids wave height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving liquids wave speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving liquids wavelength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving plants" +msgstr "Лайкъялысь быдмӧгъяс" + +#: src/settings_translation_file.cpp +msgid "Weblink color" +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 "" +"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 "" +"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 "" +"Whether name tag backgrounds should be shown by default.\n" +"Mods may still set a background." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether node texture animations should be desynchronized per mapblock." +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 "Whether the window is maximized." +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 "Whether to fog out the end of the visible area." +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 "" +"Whether to show the client debug info (has the same effect as hitting F5)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Width component of the initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Width of the selection box lines around nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Window maximized" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Windows systems only: Start Minetest 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 "" +"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 "World start time" +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 "World-aligned textures mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y of flat ground." +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 "Y of upper limit of large caves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y-distance over which caverns expand to full size." +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 "Y-level of average terrain surface." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y-level of cavern upper limit." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y-level of higher terrain that creates cliffs." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y-level of lower terrain and seabed." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y-level of seabed." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL" +msgstr "URL" + +#: src/settings_translation_file.cpp +msgid "cURL file download timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL interactive timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL parallel limit" +msgstr "" + +#~ msgid "- Address: " +#~ msgstr "- Инпас: " + +#~ msgid "- Port: " +#~ msgstr "- Йитанін: " + +#~ msgid "Change Keys" +#~ msgstr "Личканъяс вежны" + +#~ msgid "DPI" +#~ msgstr "DPI (дюйм вылӧ чут лыд)" + +#~ msgid "Invalid gamespec." +#~ msgstr "Торксьӧм ворсан конфигурацияыс." + +#~ msgid "You have no games installed." +#~ msgstr "Тіянлӧн пуктӧм ворсӧмъяс абуӧсь." + +#~ msgid "ok" +#~ msgstr "ок" diff --git a/po/ky/minetest.po b/po/ky/minetest.po index e623a8ead..f3a3e0692 100644 --- a/po/ky/minetest.po +++ b/po/ky/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Kyrgyz (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" "PO-Revision-Date: 2019-11-10 15:04+0000\n" "Last-Translator: Krock \n" "Language-Team: Kyrgyz ]" -msgstr "" - -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" +msgid "[all | ] [-t]" msgstr "" #: builtin/fstk/ui.lua @@ -112,6 +108,10 @@ msgstr "" msgid "Main menu" msgstr "Башкы меню" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "" + #: builtin/fstk/ui.lua #, fuzzy msgid "Reconnect" @@ -141,181 +141,188 @@ msgstr "" msgid "We support protocol versions between version $1 and $2." msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "Failed to download \"$1\"" +msgstr "Дүйнөнү инициалдаштыруу катасы" + +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "Failed to download $1" +msgstr "Дүйнөнү инициалдаштыруу катасы" + +#: builtin/mainmenu/content/contentdb.lua +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua #, fuzzy msgid "$1 downloading..." msgstr "Жүктөлүүдө..." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua #, fuzzy msgid "Back to Main Menu" msgstr "Башкы меню" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#, fuzzy +msgid "Downloading..." +msgstr "Жүктөлүүдө..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#, fuzzy +msgid "Games" +msgstr "Оюн" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +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 "Mods" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "" + +#: 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 "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua #, fuzzy msgid "Base Game:" msgstr "Оюн" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "Жокко чыгаруу" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua #, fuzzy msgid "Dependencies:" msgstr "көз карандылыктары:" -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Downloading..." -msgstr "Жүктөлүүдө..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to download \"$1\"" -msgstr "Дүйнөнү инициалдаштыруу катасы" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to download $1" -msgstr "Дүйнөнү инициалдаштыруу катасы" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Games" -msgstr "Оюн" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "Жүктөлүүдө..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" msgstr "" #: builtin/mainmenu/content/pkgmgr.lua @@ -475,10 +482,20 @@ msgstr "Жаратуу" msgid "Decorations" msgstr "" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." msgstr "" +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "" @@ -848,11 +865,6 @@ msgstr "" msgid "Back" msgstr "Артка" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -#, fuzzy -msgid "Change Keys" -msgstr "Баскычтарды өзгөртүү" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -862,7 +874,8 @@ msgstr "Маек" msgid "Clear" msgstr "Тазалоо" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp #, fuzzy msgid "Controls" msgstr "Ctrl" @@ -1075,6 +1088,16 @@ msgstr "" msgid "Install games from ContentDB" msgstr "" +#: builtin/mainmenu/tab_local.lua +msgid "Minetest 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 " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "Жаңы" @@ -1111,7 +1134,7 @@ msgid "Start Game" msgstr "Оюн" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." +msgid "You need to install a game before you can create a world." msgstr "" #: builtin/mainmenu/tab_online.lua @@ -1201,19 +1224,11 @@ msgstr "Жүктөлүүдө..." msgid "Rebuilding shaders..." msgstr "Дареги чечилүүдө..." -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "Туташтыруу катасы (убактыңыз өтүп кеттиби?)" - #: src/client/clientlauncher.cpp #, fuzzy msgid "Could not find or load game: " msgstr "Оюнду табуу же жүктөө мүмкүн эмес \"" -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "" - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "Башкы меню" @@ -1238,7 +1253,11 @@ msgstr "" msgid "Provided world path doesn't exist: " msgstr "" -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "" + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp msgid "" "\n" "Check debug.txt for details." @@ -1246,19 +1265,10 @@ msgstr "" "\n" "Толугураак маалымат үчүн, debug.txt'ти текшериңиз." -#: src/client/game.cpp -#, fuzzy -msgid "- Address: " -msgstr "Дареги/порту" - #: src/client/game.cpp msgid "- Mode: " msgstr "" -#: src/client/game.cpp -msgid "- Port: " -msgstr "" - #: src/client/game.cpp #, fuzzy msgid "- Public: " @@ -1296,10 +1306,6 @@ msgstr "Алга" msgid "Block bounds hidden" msgstr "" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "" @@ -1347,6 +1353,10 @@ msgstr "" msgid "Connecting to server..." msgstr "Серверге туташтырылууда..." +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "Туташтыруу катасы (убактыңыз өтүп кеттиби?)" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "" @@ -1355,43 +1365,13 @@ msgstr "" msgid "Continue" msgstr "Улантуу" -#: src/client/game.cpp -#, fuzzy, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" -"Жарыяланбас башкаруу:\n" -"- WASD: басуу\n" -"- Боштугу: секирүү/өйдө чыгуу\n" -"- Shift: уурданып басуу/ылдый түшүү\n" -"- Q: буюмду таштоо\n" -"- I: мүлк-шайман\n" -"- Чычканы: бурулуу/кароо\n" -"- Сол чычкан баскычы: казуу/согуу\n" -"- Оң чычкан баскычы: коюу/колдонуу\n" -"- Чычкан дөңгөлөгү: буюмду тандоо\n" -"- T: маек\n" - #: src/client/game.cpp msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1478,6 +1458,10 @@ msgstr "Баарын өчүрүү" msgid "Fog enabled" msgstr "күйгүзүлгөн" +#: src/client/game.cpp +msgid "Fog enabled by game or mod" +msgstr "" + #: src/client/game.cpp msgid "Game info:" msgstr "" @@ -1501,10 +1485,6 @@ msgstr "Буюм текстуралары..." msgid "KiB/s" msgstr "" -#: src/client/game.cpp -msgid "Media..." -msgstr "" - #: src/client/game.cpp msgid "MiB/s" msgstr "" @@ -1665,10 +1645,6 @@ msgstr "" msgid "Zoom currently disabled by game or mod" msgstr "" -#: src/client/game.cpp -msgid "ok" -msgstr "" - #: src/client/gameui.cpp msgid "Chat currently disabled by game or mod" msgstr "" @@ -2006,6 +1982,15 @@ msgstr "" msgid "Minimap in texture mode" msgstr "" +#: src/client/shader.cpp +#, fuzzy, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "Дүйнөнү инициалдаштыруу катасы" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2208,6 +2193,19 @@ msgstr "Масштаб" msgid "press key" msgstr "баскычты басыңыз" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +#, fuzzy +msgid "Unable to open URL" +msgstr "Дүйнөнү инициалдаштыруу катасы" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "Өзгөртүү" @@ -2242,6 +2240,7 @@ msgstr "Үн көлөмү: " #. 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 "ky" @@ -2428,12 +2427,6 @@ msgstr "" msgid "Adds particles when digging a node." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2457,6 +2450,10 @@ msgstr "Дүйнө аты" msgid "Advanced" msgstr "Кошумча" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2511,6 +2508,17 @@ msgstr "" msgid "Apple trees noise" 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 "Arm inertia" msgstr "" @@ -2532,12 +2540,21 @@ msgid "" "clients.\n" "Small values potentially improve performance a lot, at the expense of " "visible\n" -"rendering glitches (some blocks will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +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 @@ -2602,6 +2619,10 @@ msgstr "" msgid "Biome noise" msgstr "" +#: src/settings_translation_file.cpp +msgid "Block cull optimize distance" +msgstr "" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "" @@ -2820,6 +2841,12 @@ msgstr "" msgid "Colored shadows" 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -2957,10 +2984,6 @@ msgid "" "Also controls the object crosshair color" msgstr "" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "" @@ -3011,6 +3034,19 @@ msgid "" "but also uses more resources." 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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "" @@ -3198,6 +3234,11 @@ msgstr "Баарын күйгүзүү" msgid "Enable Bloom Debug" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Debanding" +msgstr "Убалды күйгүзүү" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3217,6 +3258,10 @@ msgid "" "filtering." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable Post Processing" +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "" @@ -3259,6 +3304,10 @@ msgstr "" msgid "Enable mouse wheel (scroll) for item selection in hotbar." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable random mod loading (mainly used for testing)." +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3282,6 +3331,10 @@ msgid "" "expecting." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable touchscreen" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3290,12 +3343,6 @@ msgid "" "when connecting to the server." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3325,6 +3372,19 @@ msgstr "" msgid "Enables caching of facedir rotated meshes." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -4121,9 +4181,10 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" #: src/settings_translation_file.cpp @@ -4272,10 +4333,6 @@ msgid "" "Make fog and sky colors depend on daytime (dawn/sunset) and view direction." msgstr "" -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "" @@ -4324,7 +4381,9 @@ 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." +"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 @@ -4359,10 +4418,6 @@ msgstr "" msgid "Mapblock mesh generation threads" msgstr "" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "" @@ -4604,6 +4659,10 @@ msgstr "" msgid "Minimap scan height" msgstr "" +#: src/settings_translation_file.cpp +msgid "Minimum dig repetition interval" +msgstr "" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "" @@ -4673,6 +4732,10 @@ msgstr "" msgid "Mouse sensitivity multiplier." msgstr "" +#: src/settings_translation_file.cpp +msgid "Movement threshold" +msgstr "" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "" @@ -4782,10 +4845,6 @@ msgstr "" msgid "Occlusion Culling" msgstr "" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -4798,6 +4857,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "OpenGL debug" +msgstr "" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "" @@ -4908,6 +4971,14 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "" +#: src/settings_translation_file.cpp +msgid "Protocol version minimum" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -4923,6 +4994,10 @@ msgstr "" msgid "Random input" msgstr "" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "" @@ -5117,8 +5192,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5241,7 +5316,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" @@ -5274,6 +5349,10 @@ msgid "" "Bright colors will bleed over the neighboring objects." 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 "Set to true to enable waving leaves." msgstr "" @@ -5314,8 +5393,7 @@ msgstr "Көлөкөлөгүчтөр" msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" #: src/settings_translation_file.cpp @@ -5386,13 +5464,6 @@ msgid "" "recommended." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "" @@ -5429,7 +5500,7 @@ 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 Change Keys." +"cinematic mode by using the key set in Controls." msgstr "" #: src/settings_translation_file.cpp @@ -5451,6 +5522,15 @@ msgstr "" msgid "Soft shadow radius" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sound" +msgstr "Үн көлөмү" + +#: src/settings_translation_file.cpp +msgid "Sound Extensions Blacklist" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -5607,17 +5687,37 @@ msgid "" "when calling `/profiler save [format]` without format." 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 "" "The file path relative to your world path in which profiles will be saved to." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "" #: src/settings_translation_file.cpp -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" #: src/settings_translation_file.cpp @@ -5628,6 +5728,12 @@ msgid "" "Default is 1.0 (1/2 node)." 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 "The network interface that the server listens on." msgstr "" @@ -5654,7 +5760,7 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" #: src/settings_translation_file.cpp @@ -5711,6 +5817,10 @@ msgstr "" msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "" +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -5758,12 +5868,13 @@ msgid "Touchscreen sensitivity multiplier." msgstr "" #: src/settings_translation_file.cpp -msgid "Touchscreen threshold" +msgid "Tradeoffs for performance" msgstr "" #: src/settings_translation_file.cpp -msgid "Tradeoffs for performance" -msgstr "" +#, fuzzy +msgid "Translucent liquids" +msgstr "Кооз бактар" #: src/settings_translation_file.cpp msgid "Transparency Sorting Distance" @@ -5801,7 +5912,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 "" #: src/settings_translation_file.cpp @@ -5899,10 +6012,6 @@ msgstr "" msgid "User Interfaces" msgstr "" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "" @@ -5990,12 +6099,25 @@ msgstr "" msgid "Volume" msgstr "Үн көлөмү" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +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 +#, fuzzy +msgid "Volumetric lighting" +msgstr "Тегиз жарык" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6238,6 +6360,10 @@ msgstr "" msgid "cURL parallel limit" msgstr "" +#, fuzzy +#~ msgid "- Address: " +#~ msgstr "Дареги/порту" + #, fuzzy #~ msgid "- Creative Mode: " #~ msgstr "Жаратуу режими" @@ -6286,6 +6412,10 @@ msgstr "" #~ msgid "Bumpmapping" #~ msgstr "Mip-текстуралоо" +#, fuzzy +#~ msgid "Change Keys" +#~ msgstr "Баскычтарды өзгөртүү" + #, fuzzy #~ msgid "Change keys" #~ msgstr "Баскычтарды өзгөртүү" @@ -6324,6 +6454,35 @@ msgstr "" #~ msgid "Connected Glass" #~ msgstr "Туташуу" +#, fuzzy, c-format +#~ msgid "" +#~ "Controls:\n" +#~ "- %s: move forwards\n" +#~ "- %s: move backwards\n" +#~ "- %s: move left\n" +#~ "- %s: move right\n" +#~ "- %s: jump/climb up\n" +#~ "- %s: dig/punch/use\n" +#~ "- %s: place/use\n" +#~ "- %s: sneak/climb down\n" +#~ "- %s: drop item\n" +#~ "- %s: inventory\n" +#~ "- Mouse: turn/look\n" +#~ "- Mouse wheel: select item\n" +#~ "- %s: chat\n" +#~ msgstr "" +#~ "Жарыяланбас башкаруу:\n" +#~ "- WASD: басуу\n" +#~ "- Боштугу: секирүү/өйдө чыгуу\n" +#~ "- Shift: уурданып басуу/ылдый түшүү\n" +#~ "- Q: буюмду таштоо\n" +#~ "- I: мүлк-шайман\n" +#~ "- Чычканы: бурулуу/кароо\n" +#~ "- Сол чычкан баскычы: казуу/согуу\n" +#~ "- Оң чычкан баскычы: коюу/колдонуу\n" +#~ "- Чычкан дөңгөлөгү: буюмду тандоо\n" +#~ "- T: маек\n" + #, fuzzy #~ msgid "Creative" #~ msgstr "Жаратуу" diff --git a/po/lt/minetest.po b/po/lt/minetest.po index 9aec66bdc..d214648f9 100644 --- a/po/lt/minetest.po +++ b/po/lt/minetest.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: Lithuanian (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" -"PO-Revision-Date: 2022-09-21 14:22+0000\n" -"Last-Translator: Bright Geyser \n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" +"PO-Revision-Date: 2024-05-01 12:07+0000\n" +"Last-Translator: EditaNEmilis \n" "Language-Team: Lithuanian \n" "Language: lt\n" @@ -14,7 +14,7 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n % 10 == 1 && (n % 100 < 11 || n % 100 > " "19)) ? 0 : ((n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) ? " "1 : 2);\n" -"X-Generator: Weblate 4.14.1\n" +"X-Generator: Weblate 5.5.3-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -77,7 +77,7 @@ msgstr "Komanda negalima: " #: builtin/common/chatcommands.lua #, fuzzy -msgid "Get help for commands" +msgid "Get help for commands (-t: output in chat)" msgstr "Gauti komandų pagalbą" #: builtin/common/chatcommands.lua @@ -88,13 +88,9 @@ msgstr "" "parodyti visas komandas." #: builtin/common/chatcommands.lua -msgid "[all | ]" +msgid "[all | ] [-t]" msgstr "" -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" -msgstr "OK" - #: builtin/fstk/ui.lua msgid "" msgstr "" @@ -111,6 +107,10 @@ msgstr "Įvyko klaida:" msgid "Main menu" msgstr "Pagrindinis meniu" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "OK" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Prisijungti iš naujo" @@ -139,180 +139,187 @@ msgstr "Mes palaikome tik $1 protokolo versiją." msgid "We support protocol versions between version $1 and $2." msgstr "Mes palaikome protokolo versijas tarp $1 ir $2." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." -msgstr "" +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "Failed to download \"$1\"" +msgstr "Nepavyko parsiųsti $1" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" -msgstr "" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr "Nepavyko parsiųsti $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "" +"Papildinio diegimas: nepalaikomas failo tipas „$1“ arba sugadintas archyvas" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." msgstr "$1 atsiunčiama..." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" -msgstr "" +msgstr "Visi paketai" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "Jau įdiegta" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "Atgal į Pagrindinį Meniu" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "ContentDB nėra prieinama, kai Minetest sukompiliuojamas be cURL" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "Siunčiama..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "Žaidimai" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +msgstr "Įdiegti" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp +msgid "Loading..." +msgstr "Įkeliama..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Mods" +msgstr "Papildiniai" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#, fuzzy +msgid "No updates" +msgstr "Atnaujinti" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#, fuzzy +msgid "Texture packs" +msgstr "Tekstūrų paketai" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "Išdiegti" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "Atnaujinti" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "" + +#: 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 "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "$1 po $2" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "Jau įdiegta" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "Pagrindinis Žaidimas:" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "Atšaukti" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "ContentDB nėra prieinama, kai Minetest sukompiliuojamas be cURL" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "Priklauso nuo:" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "Siunčiama..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to download \"$1\"" -msgstr "Nepavyko parsiųsti $1" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "Nepavyko parsiųsti $1" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "" -"Papildinio diegimas: nepalaikomas failo tipas „$1“ arba sugadintas archyvas" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "Žaidimai" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "Įdiegti" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #, fuzzy msgid "Install $1" msgstr "Įdiegti" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #, fuzzy msgid "Install missing dependencies" msgstr "Inicijuojami mazgai" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "Įkeliama..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "Papildiniai" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "No updates" -msgstr "Atnaujinti" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Texture packs" -msgstr "Tekstūrų paketai" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "Išdiegti" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "Atnaujinti" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" msgstr "" #: builtin/mainmenu/content/pkgmgr.lua @@ -471,11 +478,21 @@ msgstr "Sukurti" msgid "Decorations" msgstr "Dekoracijos" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua #, fuzzy msgid "Development Test is meant for developers." msgstr "Dėmesio: Minimalus kūrimo bandymas yra skirtas vystytojams." +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "" @@ -852,10 +869,6 @@ msgstr "" msgid "Back" msgstr "Atgal" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "Nustatyti klavišus" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -865,7 +878,8 @@ msgstr "Susirašinėti" msgid "Clear" msgstr "Išvalyti" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp #, fuzzy msgid "Controls" msgstr "Kairysis Control" @@ -1082,6 +1096,16 @@ msgstr "Įdiegti žaidimą" msgid "Install games from ContentDB" msgstr "" +#: builtin/mainmenu/tab_local.lua +msgid "Minetest 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 " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "Naujas" @@ -1118,9 +1142,8 @@ msgid "Start Game" msgstr "Slėpti vidinius" #: builtin/mainmenu/tab_local.lua -#, fuzzy -msgid "You have no games installed." -msgstr "Neturite įdiegę sub žaidimų." +msgid "You need to install a game before you can create a world." +msgstr "" #: builtin/mainmenu/tab_online.lua #, fuzzy @@ -1207,19 +1230,11 @@ msgstr "Įkeliamos tekstūros..." msgid "Rebuilding shaders..." msgstr "Perstatomi šešėliavimai..." -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "Ryšio klaida (baigėsi prijungimo laikas?)" - #: src/client/clientlauncher.cpp #, fuzzy msgid "Could not find or load game: " msgstr "Nepavyko rasti ar įkelti žaidimo „" -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "Klaidingi žaidimo nustatymai." - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "Pagrindinis meniu" @@ -1245,7 +1260,11 @@ msgstr "" msgid "Provided world path doesn't exist: " msgstr "Pateiktas pasaulio kelias neegzistuoja: " -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "Medija..." + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp msgid "" "\n" "Check debug.txt for details." @@ -1253,18 +1272,10 @@ msgstr "" "\n" "Patikrinkite debug.txt dėl papildomos informacijos." -#: src/client/game.cpp -msgid "- Address: " -msgstr "- Adresas: " - #: src/client/game.cpp msgid "- Mode: " msgstr "" -#: src/client/game.cpp -msgid "- Port: " -msgstr "- Prievadas: " - #: src/client/game.cpp msgid "- Public: " msgstr "- Viešas: " @@ -1302,10 +1313,6 @@ msgstr "Pirmyn" msgid "Block bounds hidden" msgstr "" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "" @@ -1354,6 +1361,10 @@ msgstr "" msgid "Connecting to server..." msgstr "Jungiamasi prie serverio..." +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "Ryšio klaida (baigėsi prijungimo laikas?)" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "" @@ -1362,47 +1373,14 @@ msgstr "" msgid "Continue" msgstr "Tęsti" -#: src/client/game.cpp -#, fuzzy, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" -"Numatytas valdymas:\n" -"- %s: judėti į priekį\n" -"- %s: judėti atgal\n" -"- %s: judėti į kairę\n" -"- %s: judėti į dešinę\n" -"- %s: šokti/lipti\n" -"- %s: leistis/eiti žemyn\n" -"- %s: išmesti daiktą\n" -"- %s: inventorius\n" -"- Pelė: sukti/žiūrėti\n" -"- Pelės kairys: kasti/smugiuoti\n" -"- Pelės dešinys: padėti/naudoti\n" -"- Pelės ratukas: pasirinkti elementą\n" -"- %s: kalbėtis\n" - #: src/client/game.cpp #, fuzzy msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1500,6 +1478,10 @@ msgstr "Išjungti papildinį" msgid "Fog enabled" msgstr "įjungtas" +#: src/client/game.cpp +msgid "Fog enabled by game or mod" +msgstr "" + #: src/client/game.cpp msgid "Game info:" msgstr "" @@ -1521,10 +1503,6 @@ msgstr "Elemento apibrėžimai..." msgid "KiB/s" msgstr "KiB/s" -#: src/client/game.cpp -msgid "Media..." -msgstr "Medija..." - #: src/client/game.cpp msgid "MiB/s" msgstr "MiB/s" @@ -1684,10 +1662,6 @@ msgstr "" msgid "Zoom currently disabled by game or mod" msgstr "" -#: src/client/game.cpp -msgid "ok" -msgstr "gerai" - #: src/client/gameui.cpp msgid "Chat currently disabled by game or mod" msgstr "" @@ -2028,6 +2002,15 @@ msgstr "" msgid "Minimap in texture mode" msgstr "" +#: src/client/shader.cpp +#, fuzzy, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "Nepavyko parsiųsti $1" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2230,6 +2213,19 @@ msgstr "Pritraukti" msgid "press key" msgstr "paspauskite klavišą" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +#, fuzzy +msgid "Unable to open URL" +msgstr "Nepavyko parsiųsti $1" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "Pakeisti" @@ -2264,6 +2260,7 @@ msgstr "Garso lygis: " #. 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 "lt" @@ -2450,12 +2447,6 @@ msgstr "" msgid "Adds particles when digging a node." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2479,6 +2470,10 @@ msgstr "Pasaulio pavadinimas" msgid "Advanced" msgstr "" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2533,6 +2528,17 @@ msgstr "" msgid "Apple trees noise" 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 "Arm inertia" msgstr "" @@ -2554,12 +2560,21 @@ msgid "" "clients.\n" "Small values potentially improve performance a lot, at the expense of " "visible\n" -"rendering glitches (some blocks will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +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 @@ -2624,6 +2639,10 @@ msgstr "" msgid "Biome noise" msgstr "" +#: src/settings_translation_file.cpp +msgid "Block cull optimize distance" +msgstr "" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "" @@ -2845,6 +2864,12 @@ msgstr "" msgid "Colored shadows" 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -2979,10 +3004,6 @@ msgid "" "Also controls the object crosshair color" msgstr "" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "" @@ -3034,6 +3055,19 @@ msgid "" "but also uses more resources." 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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "" @@ -3221,6 +3255,11 @@ msgstr "Įjungti visus" msgid "Enable Bloom Debug" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Debanding" +msgstr "Leisti sužeidimus" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3240,6 +3279,10 @@ msgid "" "filtering." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable Post Processing" +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "" @@ -3283,6 +3326,10 @@ msgstr "Papildiniai internete" msgid "Enable mouse wheel (scroll) for item selection in hotbar." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable random mod loading (mainly used for testing)." +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3306,6 +3353,10 @@ msgid "" "expecting." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable touchscreen" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3314,12 +3365,6 @@ msgid "" "when connecting to the server." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3349,6 +3394,19 @@ msgstr "" msgid "Enables caching of facedir rotated meshes." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -4146,9 +4204,10 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" #: src/settings_translation_file.cpp @@ -4297,10 +4356,6 @@ msgid "" "Make fog and sky colors depend on daytime (dawn/sunset) and view direction." msgstr "" -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "" @@ -4349,7 +4404,9 @@ 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." +"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 @@ -4384,10 +4441,6 @@ msgstr "" msgid "Mapblock mesh generation threads" msgstr "" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "" @@ -4638,6 +4691,10 @@ msgstr "" msgid "Minimap scan height" msgstr "" +#: src/settings_translation_file.cpp +msgid "Minimum dig repetition interval" +msgstr "" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "" @@ -4707,6 +4764,10 @@ msgstr "" msgid "Mouse sensitivity multiplier." msgstr "" +#: src/settings_translation_file.cpp +msgid "Movement threshold" +msgstr "" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "" @@ -4816,10 +4877,6 @@ msgstr "" msgid "Occlusion Culling" msgstr "" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -4832,6 +4889,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "OpenGL debug" +msgstr "" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "" @@ -4941,6 +5002,15 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Protocol version minimum" +msgstr "Neatitinka protokolo versija. " + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -4956,6 +5026,10 @@ msgstr "" msgid "Random input" msgstr "" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "" @@ -5145,8 +5219,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5276,7 +5350,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" @@ -5309,6 +5383,10 @@ msgid "" "Bright colors will bleed over the neighboring objects." 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 "Set to true to enable waving leaves." msgstr "" @@ -5349,8 +5427,7 @@ msgstr "Šešėliavimai" msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" #: src/settings_translation_file.cpp @@ -5420,13 +5497,6 @@ msgid "" "recommended." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "" @@ -5463,7 +5533,7 @@ msgstr "Apšvietimo efektai" #: 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 Change Keys." +"cinematic mode by using the key set in Controls." msgstr "" #: src/settings_translation_file.cpp @@ -5485,6 +5555,15 @@ msgstr "" msgid "Soft shadow radius" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sound" +msgstr "Garso lygis" + +#: src/settings_translation_file.cpp +msgid "Sound Extensions Blacklist" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -5641,17 +5720,37 @@ msgid "" "when calling `/profiler save [format]` without format." 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 "" "The file path relative to your world path in which profiles will be saved to." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "" #: src/settings_translation_file.cpp -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" #: src/settings_translation_file.cpp @@ -5662,6 +5761,12 @@ msgid "" "Default is 1.0 (1/2 node)." 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 "The network interface that the server listens on." msgstr "" @@ -5688,7 +5793,7 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" #: src/settings_translation_file.cpp @@ -5745,6 +5850,10 @@ msgstr "" msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "" +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -5792,12 +5901,13 @@ msgid "Touchscreen sensitivity multiplier." msgstr "" #: src/settings_translation_file.cpp -msgid "Touchscreen threshold" +msgid "Tradeoffs for performance" msgstr "" #: src/settings_translation_file.cpp -msgid "Tradeoffs for performance" -msgstr "" +#, fuzzy +msgid "Translucent liquids" +msgstr "Nepermatomi lapai" #: src/settings_translation_file.cpp msgid "Transparency Sorting Distance" @@ -5834,7 +5944,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 "" #: src/settings_translation_file.cpp @@ -5932,10 +6044,6 @@ msgstr "" msgid "User Interfaces" msgstr "" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "" @@ -6022,12 +6130,25 @@ msgstr "" msgid "Volume" msgstr "" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +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 +#, fuzzy +msgid "Volumetric lighting" +msgstr "Apšvietimo efektai" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6269,12 +6390,18 @@ msgstr "" msgid "cURL parallel limit" msgstr "" +#~ msgid "- Address: " +#~ msgstr "- Adresas: " + #~ msgid "- Creative Mode: " #~ msgstr "- Kūrybinis režimas " #~ msgid "- Damage: " #~ msgstr "- Sužeidimai: " +#~ msgid "- Port: " +#~ msgstr "- Prievadas: " + #~ msgid "2x" #~ msgstr "2x" @@ -6315,6 +6442,9 @@ msgstr "" #~ msgid "Bilinear Filter" #~ msgstr "„Bilinear“ filtras" +#~ msgid "Change Keys" +#~ msgstr "Nustatyti klavišus" + #, fuzzy #~ msgid "Change keys" #~ msgstr "Nustatyti klavišus" @@ -6352,6 +6482,38 @@ msgstr "" #~ msgid "Connected Glass" #~ msgstr "Jungtis" +#, fuzzy, c-format +#~ msgid "" +#~ "Controls:\n" +#~ "- %s: move forwards\n" +#~ "- %s: move backwards\n" +#~ "- %s: move left\n" +#~ "- %s: move right\n" +#~ "- %s: jump/climb up\n" +#~ "- %s: dig/punch/use\n" +#~ "- %s: place/use\n" +#~ "- %s: sneak/climb down\n" +#~ "- %s: drop item\n" +#~ "- %s: inventory\n" +#~ "- Mouse: turn/look\n" +#~ "- Mouse wheel: select item\n" +#~ "- %s: chat\n" +#~ msgstr "" +#~ "Numatytas valdymas:\n" +#~ "- %s: judėti į priekį\n" +#~ "- %s: judėti atgal\n" +#~ "- %s: judėti į kairę\n" +#~ "- %s: judėti į dešinę\n" +#~ "- %s: šokti/lipti\n" +#~ "- %s: leistis/eiti žemyn\n" +#~ "- %s: išmesti daiktą\n" +#~ "- %s: inventorius\n" +#~ "- Pelė: sukti/žiūrėti\n" +#~ "- Pelės kairys: kasti/smugiuoti\n" +#~ "- Pelės dešinys: padėti/naudoti\n" +#~ "- Pelės ratukas: pasirinkti elementą\n" +#~ "- %s: kalbėtis\n" + #, fuzzy #~ msgid "Creative" #~ msgstr "Sukurti" @@ -6438,6 +6600,9 @@ msgstr "" #~ msgid "Install: file: \"$1\"" #~ msgstr "Įdiegti papildinį: failas: „$1“" +#~ msgid "Invalid gamespec." +#~ msgstr "Klaidingi žaidimo nustatymai." + #, fuzzy #~ msgid "Inventory key" #~ msgstr "Inventorius" @@ -6595,5 +6760,12 @@ msgstr "" #~ msgid "You died." #~ msgstr "Jūs numirėte" +#, fuzzy +#~ msgid "You have no games installed." +#~ msgstr "Neturite įdiegę sub žaidimų." + #~ msgid "needs_fallback_font" #~ msgstr "no" + +#~ msgid "ok" +#~ msgstr "gerai" diff --git a/po/lv/minetest.po b/po/lv/minetest.po index eb03c1e41..f5896af89 100644 --- a/po/lv/minetest.po +++ b/po/lv/minetest.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" -"PO-Revision-Date: 2022-07-14 11:16+0000\n" -"Last-Translator: Cow Boy \n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" +"PO-Revision-Date: 2024-01-22 21:01+0000\n" +"Last-Translator: Uko Koknevics \n" "Language-Team: Latvian \n" "Language: lv\n" @@ -13,7 +13,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n % 10 == 0 || n % 100 >= 11 && n % 100 <= " "19) ? 0 : ((n % 10 == 1 && n % 100 != 11) ? 1 : 2);\n" -"X-Generator: Weblate 4.14-dev\n" +"X-Generator: Weblate 5.4-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -78,7 +78,7 @@ msgid "Command not available: " msgstr "" #: builtin/common/chatcommands.lua -msgid "Get help for commands" +msgid "Get help for commands (-t: output in chat)" msgstr "" #: builtin/common/chatcommands.lua @@ -87,11 +87,7 @@ msgid "" msgstr "" #: builtin/common/chatcommands.lua -msgid "[all | ]" -msgstr "" - -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" +msgid "[all | ] [-t]" msgstr "" #: builtin/fstk/ui.lua @@ -110,6 +106,10 @@ msgstr "Radās kļūme:" msgid "Main menu" msgstr "Galvenā izvēlne" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "OK" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Atjaunot savienojumu" @@ -138,183 +138,190 @@ msgstr "Mēs atbalstam tikai protokola versiju $1." msgid "We support protocol versions between version $1 and $2." msgstr "Mēs atbalstam protokola versijas starp $1 un $2." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." -msgstr "" +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "Failed to download \"$1\"" +msgstr "Neizdevās lejuplādēt $1" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" -msgstr "" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr "Neizdevās lejuplādēt $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "Instalācija: Neatbalstīts faila tips “$1” vai arī sabojāts arhīvs" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua #, fuzzy msgid "$1 downloading..." msgstr "Ielāde..." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "Visi papildinājumi" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Back to Main Menu" +msgstr "Atpakaļ uz Galveno Izvēlni" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#, fuzzy +msgid "Downloading..." +msgstr "Ielāde..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "Spēles" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +msgstr "Instalēt" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp +msgid "Loading..." +msgstr "Ielāde..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Mods" +msgstr "Modi" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "Nevarēja iegūt papildinājumus" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "Nav rezultātu" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#, fuzzy +msgid "No updates" +msgstr "Atjaunot" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "Tekstūru komplekti" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "Atinstalēt" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +#, fuzzy +msgid "Update" +msgstr "Atjaunināt" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "" + +#: 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 "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua #, fuzzy msgid "Already installed" msgstr "Šis taustiņš jau tiek izmantots" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Back to Main Menu" -msgstr "Atpakaļ uz Galveno Izvēlni" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #, fuzzy msgid "Base Game:" msgstr "Spēlēt (kā serveris)" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "Atcelt" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "Atkarības:" -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Downloading..." -msgstr "Ielāde..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to download \"$1\"" -msgstr "Neizdevās lejuplādēt $1" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "Neizdevās lejuplādēt $1" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "Instalācija: Neatbalstīts faila tips “$1” vai arī sabojāts arhīvs" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "Spēles" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "Instalēt" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #, fuzzy msgid "Install $1" msgstr "Instalēt" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #, fuzzy msgid "Install missing dependencies" msgstr "Neobligātās atkarības:" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "Ielāde..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "Modi" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "Nevarēja iegūt papildinājumus" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "Nav rezultātu" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "No updates" -msgstr "Atjaunot" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "Tekstūru komplekti" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "Atinstalēt" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -#, fuzzy -msgid "Update" -msgstr "Atjaunināt" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" msgstr "" #: builtin/mainmenu/content/pkgmgr.lua @@ -469,12 +476,22 @@ msgstr "Izveidot" msgid "Decorations" msgstr "Dekorācijas" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua #, fuzzy msgid "Development Test is meant for developers." msgstr "" "Uzmanību: “Minimal development test” ir domāts priekš spēles izstrādātājiem." +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "" @@ -846,10 +863,6 @@ msgstr "" msgid "Back" msgstr "Atpakaļ" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "Nomainīt kontroles" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -859,7 +872,8 @@ msgstr "Čats" msgid "Clear" msgstr "Notīrīt" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "Vadība" @@ -1072,6 +1086,16 @@ msgstr "Instalēt" msgid "Install games from ContentDB" msgstr "" +#: builtin/mainmenu/tab_local.lua +msgid "Minetest 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 " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "Jauns" @@ -1106,8 +1130,8 @@ msgid "Start Game" msgstr "Sākt spēli" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." -msgstr "Jums nav instalēta neviena spēle." +msgid "You need to install a game before you can create a world." +msgstr "" #: builtin/mainmenu/tab_online.lua #, fuzzy @@ -1193,19 +1217,11 @@ msgstr "Ielādē tekstūras..." msgid "Rebuilding shaders..." msgstr "Pārbūvē šeiderus..." -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "Savienojuma kļūme (noildze?)" - #: src/client/clientlauncher.cpp #, fuzzy msgid "Could not find or load game: " msgstr "Nevarēja atrast vai ielādēt spēli \"" -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "Nederīga spēles specifikācija." - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "Galvenā izvēlne" @@ -1230,7 +1246,11 @@ msgstr "Neizdevās atvērt iestatīto paroļu failu: " msgid "Provided world path doesn't exist: " msgstr "Sniegtā pasaules atrašanās vieta neeksistē: " -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "Mēdiji..." + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp msgid "" "\n" "Check debug.txt for details." @@ -1238,18 +1258,10 @@ msgstr "" "\n" "Vairāk informācijas failā debug.txt." -#: src/client/game.cpp -msgid "- Address: " -msgstr "- Adrese: " - #: src/client/game.cpp msgid "- Mode: " msgstr "- Režīms: " -#: src/client/game.cpp -msgid "- Port: " -msgstr "- Ports: " - #: src/client/game.cpp msgid "- Public: " msgstr "- Publisks: " @@ -1285,10 +1297,6 @@ msgstr "Automātiskā pārvietošanās ieslēgta" msgid "Block bounds hidden" msgstr "" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "" @@ -1334,6 +1342,10 @@ msgstr "Klienta puses skriptēšana ir atspējota" msgid "Connecting to server..." msgstr "Savienojas ar serveri..." +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "Savienojuma kļūme (noildze?)" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "" @@ -1342,47 +1354,14 @@ msgstr "" msgid "Continue" msgstr "Turpināt" -#: src/client/game.cpp -#, fuzzy, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" -"Kontroles:\n" -"- %s: uz priekšu\n" -"- %s: uz atpakaļu\n" -"- %s: pa kreisi\n" -"- %s: pa labi\n" -"- %s: lekt/kāpt\n" -"- %s: lavīties/nolaisties\n" -"- %s: nomest priekšmetu\n" -"- %s: inventārs\n" -"- Pele: griezties/skatīties\n" -"- Peles kreisā poga: rakt/sist\n" -"- Peles labā poga: likt/izmantot\n" -"- Peles rullītis: izvēlēties priekšmetu\n" -"- %s: čats\n" - #: src/client/game.cpp #, fuzzy msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1475,6 +1454,11 @@ msgstr "Migla atspējota" msgid "Fog enabled" msgstr "Migla iespējota" +#: src/client/game.cpp +#, fuzzy +msgid "Fog enabled by game or mod" +msgstr "Tuvināšana šobrīd atspējota vai nu spēlei, vai modam" + #: src/client/game.cpp msgid "Game info:" msgstr "Spēles informācija:" @@ -1495,10 +1479,6 @@ msgstr "Priekšmetu apraksti..." msgid "KiB/s" msgstr "KiB/s" -#: src/client/game.cpp -msgid "Media..." -msgstr "Mēdiji..." - #: src/client/game.cpp msgid "MiB/s" msgstr "MiB/s" @@ -1657,10 +1637,6 @@ msgstr "Karkasattēlojums iespējots" msgid "Zoom currently disabled by game or mod" msgstr "Tuvināšana šobrīd atspējota vai nu spēlei, vai modam" -#: src/client/game.cpp -msgid "ok" -msgstr "ok" - #: src/client/gameui.cpp #, fuzzy msgid "Chat currently disabled by game or mod" @@ -1995,6 +1971,15 @@ msgstr "Minikarte virsmas režīmā, palielinājums x1" msgid "Minimap in texture mode" msgstr "Minikarte virsmas režīmā, palielinājums x1" +#: src/client/shader.cpp +#, fuzzy, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "Neizdevās lejuplādēt $1" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2187,6 +2172,19 @@ msgstr "Zoom" msgid "press key" msgstr "nospiediet pogu" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +#, fuzzy +msgid "Unable to open URL" +msgstr "Neizdevās lejuplādēt $1" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "Nomainīt" @@ -2220,6 +2218,7 @@ msgstr "Skaņas skaļums: " #. 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 "lv" @@ -2406,12 +2405,6 @@ msgstr "" msgid "Adds particles when digging a node." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2435,6 +2428,10 @@ msgstr "Pasaules nosaukums" msgid "Advanced" msgstr "" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2490,6 +2487,17 @@ msgstr "" msgid "Apple trees noise" 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 "Arm inertia" msgstr "" @@ -2511,12 +2519,21 @@ msgid "" "clients.\n" "Small values potentially improve performance a lot, at the expense of " "visible\n" -"rendering glitches (some blocks will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +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 @@ -2580,6 +2597,10 @@ msgstr "" msgid "Biome noise" msgstr "" +#: src/settings_translation_file.cpp +msgid "Block cull optimize distance" +msgstr "" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "" @@ -2795,6 +2816,12 @@ msgstr "" msgid "Colored shadows" 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -2926,10 +2953,6 @@ msgid "" "Also controls the object crosshair color" msgstr "" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "" @@ -2979,6 +3002,19 @@ msgid "" "but also uses more resources." 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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "" @@ -3165,6 +3201,11 @@ msgstr "Iespējot visus" msgid "Enable Bloom Debug" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Debanding" +msgstr "Iespējot bojājumus" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3184,6 +3225,10 @@ msgid "" "filtering." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable Post Processing" +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "" @@ -3226,6 +3271,10 @@ msgstr "" msgid "Enable mouse wheel (scroll) for item selection in hotbar." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable random mod loading (mainly used for testing)." +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3249,6 +3298,10 @@ msgid "" "expecting." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable touchscreen" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3257,12 +3310,6 @@ msgid "" "when connecting to the server." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3292,6 +3339,19 @@ msgstr "" msgid "Enables caching of facedir rotated meshes." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -4092,9 +4152,10 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" #: src/settings_translation_file.cpp @@ -4241,10 +4302,6 @@ msgid "" "Make fog and sky colors depend on daytime (dawn/sunset) and view direction." msgstr "" -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "" @@ -4293,7 +4350,9 @@ 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." +"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 @@ -4328,10 +4387,6 @@ msgstr "" msgid "Mapblock mesh generation threads" msgstr "" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "" @@ -4573,6 +4628,10 @@ msgstr "" msgid "Minimap scan height" msgstr "" +#: src/settings_translation_file.cpp +msgid "Minimum dig repetition interval" +msgstr "" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "" @@ -4641,6 +4700,11 @@ msgstr "" msgid "Mouse sensitivity multiplier." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Movement threshold" +msgstr "Pieskārienslieksnis: (px)" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "" @@ -4750,10 +4814,6 @@ msgstr "" msgid "Occlusion Culling" msgstr "" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -4766,6 +4826,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "OpenGL debug" +msgstr "" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "" @@ -4875,6 +4939,15 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Protocol version minimum" +msgstr "Protokola versiju neatbilstība. " + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -4890,6 +4963,10 @@ msgstr "" msgid "Random input" msgstr "" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "" @@ -5079,8 +5156,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5202,7 +5279,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" @@ -5235,6 +5312,10 @@ msgid "" "Bright colors will bleed over the neighboring objects." 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 "Set to true to enable waving leaves." msgstr "" @@ -5274,8 +5355,7 @@ msgstr "Šeideri" msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" #: src/settings_translation_file.cpp @@ -5345,13 +5425,6 @@ msgid "" "recommended." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "" @@ -5387,7 +5460,7 @@ 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 Change Keys." +"cinematic mode by using the key set in Controls." msgstr "" #: src/settings_translation_file.cpp @@ -5408,6 +5481,15 @@ msgstr "" msgid "Soft shadow radius" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sound" +msgstr "Skaņa izslēgta" + +#: src/settings_translation_file.cpp +msgid "Sound Extensions Blacklist" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -5564,17 +5646,37 @@ msgid "" "when calling `/profiler save [format]` without format." 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 "" "The file path relative to your world path in which profiles will be saved to." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "" #: src/settings_translation_file.cpp -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" #: src/settings_translation_file.cpp @@ -5585,6 +5687,12 @@ msgid "" "Default is 1.0 (1/2 node)." 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 "The network interface that the server listens on." msgstr "" @@ -5611,7 +5719,7 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" #: src/settings_translation_file.cpp @@ -5668,6 +5776,10 @@ msgstr "" msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "" +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -5715,12 +5827,11 @@ msgid "Touchscreen sensitivity multiplier." msgstr "" #: src/settings_translation_file.cpp -#, fuzzy -msgid "Touchscreen threshold" -msgstr "Pieskārienslieksnis: (px)" +msgid "Tradeoffs for performance" +msgstr "" #: src/settings_translation_file.cpp -msgid "Tradeoffs for performance" +msgid "Translucent liquids" msgstr "" #: src/settings_translation_file.cpp @@ -5758,7 +5869,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 "" #: src/settings_translation_file.cpp @@ -5856,10 +5969,6 @@ msgstr "" msgid "User Interfaces" msgstr "" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "" @@ -5946,12 +6055,25 @@ msgstr "" msgid "Volume" msgstr "" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +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 +#, fuzzy +msgid "Volumetric lighting" +msgstr "Bloku izcelšana" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6188,12 +6310,18 @@ msgstr "" msgid "cURL parallel limit" msgstr "" +#~ msgid "- Address: " +#~ msgstr "- Adrese: " + #~ msgid "- Creative Mode: " #~ msgstr "- Radošais režīms: " #~ msgid "- Damage: " #~ msgstr "- Bojājumi: " +#~ msgid "- Port: " +#~ msgstr "- Ports: " + #~ msgid "2x" #~ msgstr "2x" @@ -6229,6 +6357,9 @@ msgstr "" #~ msgid "Bump Mapping" #~ msgstr "“Bump Mapping”" +#~ msgid "Change Keys" +#~ msgstr "Nomainīt kontroles" + #, fuzzy #~ msgid "Change keys" #~ msgstr "Nomainīt kontroles" @@ -6245,6 +6376,38 @@ msgstr "" #~ msgid "Connected Glass" #~ msgstr "Savienots stikls" +#, fuzzy, c-format +#~ msgid "" +#~ "Controls:\n" +#~ "- %s: move forwards\n" +#~ "- %s: move backwards\n" +#~ "- %s: move left\n" +#~ "- %s: move right\n" +#~ "- %s: jump/climb up\n" +#~ "- %s: dig/punch/use\n" +#~ "- %s: place/use\n" +#~ "- %s: sneak/climb down\n" +#~ "- %s: drop item\n" +#~ "- %s: inventory\n" +#~ "- Mouse: turn/look\n" +#~ "- Mouse wheel: select item\n" +#~ "- %s: chat\n" +#~ msgstr "" +#~ "Kontroles:\n" +#~ "- %s: uz priekšu\n" +#~ "- %s: uz atpakaļu\n" +#~ "- %s: pa kreisi\n" +#~ "- %s: pa labi\n" +#~ "- %s: lekt/kāpt\n" +#~ "- %s: lavīties/nolaisties\n" +#~ "- %s: nomest priekšmetu\n" +#~ "- %s: inventārs\n" +#~ "- Pele: griezties/skatīties\n" +#~ "- Peles kreisā poga: rakt/sist\n" +#~ "- Peles labā poga: likt/izmantot\n" +#~ "- Peles rullītis: izvēlēties priekšmetu\n" +#~ "- %s: čats\n" + #~ msgid "Credits" #~ msgstr "Pateicības" @@ -6312,6 +6475,9 @@ msgstr "" #~ msgid "Install: file: \"$1\"" #~ msgstr "Instalācija: fails: “$1”" +#~ msgid "Invalid gamespec." +#~ msgstr "Nederīga spēles specifikācija." + #~ msgid "" #~ "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" #~ msgstr "" @@ -6354,9 +6520,6 @@ msgstr "" #~ msgid "No Mipmap" #~ msgstr "Bez “mipmap”" -#~ msgid "Node Highlighting" -#~ msgstr "Bloku izcelšana" - #~ msgid "Node Outlining" #~ msgstr "Bloku konturēšana" @@ -6491,8 +6654,14 @@ msgstr "" #~ msgid "You died." #~ msgstr "Jūs nomirāt" +#~ msgid "You have no games installed." +#~ msgstr "Jums nav instalēta neviena spēle." + #~ msgid "Z" #~ msgstr "Z" #~ msgid "needs_fallback_font" #~ msgstr "no" + +#~ msgid "ok" +#~ msgstr "ok" diff --git a/po/lzh/minetest.po b/po/lzh/minetest.po index 38ea9e541..0a6fabcb4 100644 --- a/po/lzh/minetest.po +++ b/po/lzh/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" "PO-Revision-Date: 2023-12-03 17:17+0000\n" "Last-Translator: Krock \n" "Language-Team: Chinese (Literary) ]" -msgstr "" - -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" +msgid "[all | ] [-t]" msgstr "" #: builtin/fstk/ui.lua @@ -103,6 +99,10 @@ msgstr "" msgid "Main menu" msgstr "" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "" @@ -131,173 +131,180 @@ msgstr "" msgid "We support protocol versions between version $1 and $2." msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download \"$1\"" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +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 "Mods" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "" + +#: 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 "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download \"$1\"" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" msgstr "" #: builtin/mainmenu/content/pkgmgr.lua @@ -444,10 +451,20 @@ msgstr "" msgid "Decorations" msgstr "" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." msgstr "" +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "" @@ -810,10 +827,6 @@ msgstr "" msgid "Back" msgstr "" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -823,7 +836,8 @@ msgstr "" msgid "Clear" msgstr "" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "" @@ -1026,6 +1040,16 @@ msgstr "" msgid "Install games from ContentDB" msgstr "" +#: builtin/mainmenu/tab_local.lua +msgid "Minetest 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 " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "" @@ -1059,7 +1083,7 @@ msgid "Start Game" msgstr "" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." +msgid "You need to install a game before you can create a world." msgstr "" #: builtin/mainmenu/tab_online.lua @@ -1139,18 +1163,10 @@ msgstr "" msgid "Rebuilding shaders..." msgstr "" -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "" - #: src/client/clientlauncher.cpp msgid "Could not find or load game: " msgstr "" -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "" - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "" @@ -1175,24 +1191,20 @@ msgstr "" msgid "Provided world path doesn't exist: " msgstr "" -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +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 "- Address: " -msgstr "" - #: src/client/game.cpp msgid "- Mode: " msgstr "" -#: src/client/game.cpp -msgid "- Port: " -msgstr "" - #: src/client/game.cpp msgid "- Public: " msgstr "" @@ -1227,10 +1239,6 @@ msgstr "" msgid "Block bounds hidden" msgstr "" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "" @@ -1275,6 +1283,10 @@ msgstr "" msgid "Connecting to server..." msgstr "" +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "" @@ -1283,32 +1295,13 @@ msgstr "" msgid "Continue" msgstr "" -#: src/client/game.cpp -#, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" - #: src/client/game.cpp msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1388,6 +1381,10 @@ msgstr "" msgid "Fog enabled" msgstr "" +#: src/client/game.cpp +msgid "Fog enabled by game or mod" +msgstr "" + #: src/client/game.cpp msgid "Game info:" msgstr "" @@ -1408,10 +1405,6 @@ msgstr "" msgid "KiB/s" msgstr "" -#: src/client/game.cpp -msgid "Media..." -msgstr "" - #: src/client/game.cpp msgid "MiB/s" msgstr "" @@ -1567,10 +1560,6 @@ msgstr "" msgid "Zoom currently disabled by game or mod" msgstr "" -#: src/client/game.cpp -msgid "ok" -msgstr "" - #: src/client/gameui.cpp msgid "Chat currently disabled by game or mod" msgstr "" @@ -1891,6 +1880,15 @@ msgstr "" msgid "Minimap in texture mode" msgstr "" +#: src/client/shader.cpp +#, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2080,6 +2078,18 @@ msgstr "" msgid "press key" msgstr "" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Unable to open URL" +msgstr "" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "" @@ -2113,6 +2123,7 @@ msgstr "" #. 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 "lzh" @@ -2298,12 +2309,6 @@ msgstr "" msgid "Adds particles when digging a node." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2326,6 +2331,10 @@ msgstr "" msgid "Advanced" msgstr "" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2379,6 +2388,17 @@ msgstr "" msgid "Apple trees noise" 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 "Arm inertia" msgstr "" @@ -2400,12 +2420,21 @@ msgid "" "clients.\n" "Small values potentially improve performance a lot, at the expense of " "visible\n" -"rendering glitches (some blocks will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +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 @@ -2468,6 +2497,10 @@ msgstr "" msgid "Biome noise" msgstr "" +#: src/settings_translation_file.cpp +msgid "Block cull optimize distance" +msgstr "" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "" @@ -2680,6 +2713,12 @@ msgstr "" msgid "Colored shadows" 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -2811,10 +2850,6 @@ msgid "" "Also controls the object crosshair color" msgstr "" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "" @@ -2864,6 +2899,19 @@ msgid "" "but also uses more resources." 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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "" @@ -3048,6 +3096,10 @@ msgstr "" msgid "Enable Bloom Debug" msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable Debanding" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3067,6 +3119,10 @@ msgid "" "filtering." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable Post Processing" +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "" @@ -3109,6 +3165,10 @@ msgstr "" msgid "Enable mouse wheel (scroll) for item selection in hotbar." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable random mod loading (mainly used for testing)." +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3132,6 +3192,10 @@ msgid "" "expecting." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable touchscreen" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3140,12 +3204,6 @@ msgid "" "when connecting to the server." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3175,6 +3233,19 @@ msgstr "" msgid "Enables caching of facedir rotated meshes." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -3969,9 +4040,10 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" #: src/settings_translation_file.cpp @@ -4117,10 +4189,6 @@ msgid "" "Make fog and sky colors depend on daytime (dawn/sunset) and view direction." msgstr "" -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "" @@ -4169,7 +4237,9 @@ 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." +"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 @@ -4204,10 +4274,6 @@ msgstr "" msgid "Mapblock mesh generation threads" msgstr "" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "" @@ -4449,6 +4515,10 @@ msgstr "" msgid "Minimap scan height" msgstr "" +#: src/settings_translation_file.cpp +msgid "Minimum dig repetition interval" +msgstr "" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "" @@ -4517,6 +4587,10 @@ msgstr "" msgid "Mouse sensitivity multiplier." msgstr "" +#: src/settings_translation_file.cpp +msgid "Movement threshold" +msgstr "" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "" @@ -4625,10 +4699,6 @@ msgstr "" msgid "Occlusion Culling" msgstr "" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -4641,6 +4711,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "OpenGL debug" +msgstr "" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "" @@ -4750,6 +4824,14 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "" +#: src/settings_translation_file.cpp +msgid "Protocol version minimum" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -4765,6 +4847,10 @@ msgstr "" msgid "Random input" msgstr "" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "" @@ -4952,8 +5038,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5071,7 +5157,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" @@ -5104,6 +5190,10 @@ msgid "" "Bright colors will bleed over the neighboring objects." 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 "Set to true to enable waving leaves." msgstr "" @@ -5143,8 +5233,7 @@ msgstr "" msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" #: src/settings_translation_file.cpp @@ -5214,13 +5303,6 @@ msgid "" "recommended." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "" @@ -5256,7 +5338,7 @@ 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 Change Keys." +"cinematic mode by using the key set in Controls." msgstr "" #: src/settings_translation_file.cpp @@ -5277,6 +5359,15 @@ msgstr "" msgid "Soft shadow radius" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sound" +msgstr "消音" + +#: src/settings_translation_file.cpp +msgid "Sound Extensions Blacklist" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -5433,17 +5524,37 @@ msgid "" "when calling `/profiler save [format]` without format." 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 "" "The file path relative to your world path in which profiles will be saved to." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "" #: src/settings_translation_file.cpp -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" #: src/settings_translation_file.cpp @@ -5454,6 +5565,12 @@ msgid "" "Default is 1.0 (1/2 node)." 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 "The network interface that the server listens on." msgstr "" @@ -5480,7 +5597,7 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" #: src/settings_translation_file.cpp @@ -5537,6 +5654,10 @@ msgstr "" msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "" +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -5584,11 +5705,11 @@ msgid "Touchscreen sensitivity multiplier." msgstr "" #: src/settings_translation_file.cpp -msgid "Touchscreen threshold" +msgid "Tradeoffs for performance" msgstr "" #: src/settings_translation_file.cpp -msgid "Tradeoffs for performance" +msgid "Translucent liquids" msgstr "" #: src/settings_translation_file.cpp @@ -5626,7 +5747,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 "" #: src/settings_translation_file.cpp @@ -5724,10 +5847,6 @@ msgstr "" msgid "User Interfaces" msgstr "" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "" @@ -5814,12 +5933,24 @@ msgstr "" msgid "Volume" msgstr "" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +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 "Volumetric lighting" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" diff --git a/po/mi/minetest.po b/po/mi/minetest.po index 838efc8ac..8d40925d7 100644 --- a/po/mi/minetest.po +++ b/po/mi/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" "PO-Revision-Date: 2023-12-03 17:17+0000\n" "Last-Translator: Krock \n" "Language-Team: Maori ]" -msgstr "" - -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" +msgid "[all | ] [-t]" msgstr "" #: builtin/fstk/ui.lua @@ -108,6 +104,10 @@ msgstr "" msgid "Main menu" msgstr "" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "" @@ -136,173 +136,180 @@ msgstr "" msgid "We support protocol versions between version $1 and $2." msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download \"$1\"" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +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 "Mods" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "" + +#: 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 "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download \"$1\"" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" msgstr "" #: builtin/mainmenu/content/pkgmgr.lua @@ -449,10 +456,20 @@ msgstr "" msgid "Decorations" msgstr "" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." msgstr "" +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "" @@ -815,10 +832,6 @@ msgstr "" msgid "Back" msgstr "" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "Huri i nga key" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -828,7 +841,8 @@ msgstr "" msgid "Clear" msgstr "" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "" @@ -1032,6 +1046,16 @@ msgstr "" msgid "Install games from ContentDB" msgstr "" +#: builtin/mainmenu/tab_local.lua +msgid "Minetest 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 " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "Hou" @@ -1065,7 +1089,7 @@ msgid "Start Game" msgstr "Tīmata Kēmu" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." +msgid "You need to install a game before you can create a world." msgstr "" #: builtin/mainmenu/tab_online.lua @@ -1145,18 +1169,10 @@ msgstr "" msgid "Rebuilding shaders..." msgstr "" -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "" - #: src/client/clientlauncher.cpp msgid "Could not find or load game: " msgstr "" -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "" - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "" @@ -1181,24 +1197,20 @@ msgstr "" msgid "Provided world path doesn't exist: " msgstr "" -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +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 "- Address: " -msgstr "" - #: src/client/game.cpp msgid "- Mode: " msgstr "" -#: src/client/game.cpp -msgid "- Port: " -msgstr "" - #: src/client/game.cpp msgid "- Public: " msgstr "" @@ -1233,10 +1245,6 @@ msgstr "" msgid "Block bounds hidden" msgstr "" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "" @@ -1281,6 +1289,10 @@ msgstr "" msgid "Connecting to server..." msgstr "" +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "" @@ -1289,46 +1301,13 @@ msgstr "" msgid "Continue" msgstr "Haere Tonu" -#: src/client/game.cpp -#, fuzzy, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" -"Whakamaramatanga o nga neke hanga:\n" -"- %s: whakamua\n" -"- %s: whakamuri\n" -"- %s: māui\n" -"- %s: katau\n" -"- %s: peke\n" -"- %s: keri\n" -"- %s: whakamahī\n" -"- %s: konihi\n" -"- %s: whakataka\n" -"- %s: ketetaputapu\n" -"- Mouse: tirohanga\n" -"- Mouse wheel: ti pako\n" -"- %s: korero\n" - #: src/client/game.cpp msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1408,6 +1387,10 @@ msgstr "" msgid "Fog enabled" msgstr "" +#: src/client/game.cpp +msgid "Fog enabled by game or mod" +msgstr "" + #: src/client/game.cpp msgid "Game info:" msgstr "" @@ -1428,10 +1411,6 @@ msgstr "" msgid "KiB/s" msgstr "" -#: src/client/game.cpp -msgid "Media..." -msgstr "" - #: src/client/game.cpp msgid "MiB/s" msgstr "" @@ -1587,10 +1566,6 @@ msgstr "" msgid "Zoom currently disabled by game or mod" msgstr "" -#: src/client/game.cpp -msgid "ok" -msgstr "" - #: src/client/gameui.cpp msgid "Chat currently disabled by game or mod" msgstr "" @@ -1914,6 +1889,15 @@ msgstr "" msgid "Minimap in texture mode" msgstr "" +#: src/client/shader.cpp +#, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2103,6 +2087,18 @@ msgstr "" msgid "press key" msgstr "" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Unable to open URL" +msgstr "" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "" @@ -2136,6 +2132,7 @@ msgstr "" #. 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 "mi" @@ -2321,12 +2318,6 @@ msgstr "" msgid "Adds particles when digging a node." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2349,6 +2340,10 @@ msgstr "" msgid "Advanced" msgstr "" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2402,6 +2397,17 @@ msgstr "" msgid "Apple trees noise" 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 "Arm inertia" msgstr "" @@ -2423,12 +2429,21 @@ msgid "" "clients.\n" "Small values potentially improve performance a lot, at the expense of " "visible\n" -"rendering glitches (some blocks will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +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 @@ -2491,6 +2506,10 @@ msgstr "" msgid "Biome noise" msgstr "" +#: src/settings_translation_file.cpp +msgid "Block cull optimize distance" +msgstr "" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "" @@ -2703,6 +2722,12 @@ msgstr "" msgid "Colored shadows" 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -2834,10 +2859,6 @@ msgid "" "Also controls the object crosshair color" msgstr "" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "" @@ -2887,6 +2908,19 @@ msgid "" "but also uses more resources." 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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "" @@ -3071,6 +3105,11 @@ msgstr "" msgid "Enable Bloom Debug" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Debanding" +msgstr "Taea te kino" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3090,6 +3129,10 @@ msgid "" "filtering." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable Post Processing" +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "" @@ -3132,6 +3175,10 @@ msgstr "" msgid "Enable mouse wheel (scroll) for item selection in hotbar." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable random mod loading (mainly used for testing)." +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3155,6 +3202,10 @@ msgid "" "expecting." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable touchscreen" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3163,12 +3214,6 @@ msgid "" "when connecting to the server." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3198,6 +3243,19 @@ msgstr "" msgid "Enables caching of facedir rotated meshes." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -3992,9 +4050,10 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" #: src/settings_translation_file.cpp @@ -4140,10 +4199,6 @@ msgid "" "Make fog and sky colors depend on daytime (dawn/sunset) and view direction." msgstr "" -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "" @@ -4192,7 +4247,9 @@ 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." +"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 @@ -4227,10 +4284,6 @@ msgstr "" msgid "Mapblock mesh generation threads" msgstr "" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "" @@ -4472,6 +4525,10 @@ msgstr "" msgid "Minimap scan height" msgstr "" +#: src/settings_translation_file.cpp +msgid "Minimum dig repetition interval" +msgstr "" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "" @@ -4540,6 +4597,10 @@ msgstr "" msgid "Mouse sensitivity multiplier." msgstr "" +#: src/settings_translation_file.cpp +msgid "Movement threshold" +msgstr "" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "" @@ -4648,10 +4709,6 @@ msgstr "" msgid "Occlusion Culling" msgstr "" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -4664,6 +4721,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "OpenGL debug" +msgstr "" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "" @@ -4773,6 +4834,14 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "" +#: src/settings_translation_file.cpp +msgid "Protocol version minimum" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -4788,6 +4857,10 @@ msgstr "" msgid "Random input" msgstr "" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "" @@ -4975,8 +5048,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5094,7 +5167,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" @@ -5127,6 +5200,10 @@ msgid "" "Bright colors will bleed over the neighboring objects." 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 "Set to true to enable waving leaves." msgstr "" @@ -5166,8 +5243,7 @@ msgstr "" msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" #: src/settings_translation_file.cpp @@ -5237,13 +5313,6 @@ msgid "" "recommended." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "" @@ -5279,7 +5348,7 @@ 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 Change Keys." +"cinematic mode by using the key set in Controls." msgstr "" #: src/settings_translation_file.cpp @@ -5300,6 +5369,14 @@ msgstr "" msgid "Soft shadow radius" 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 "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -5456,17 +5533,37 @@ msgid "" "when calling `/profiler save [format]` without format." 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 "" "The file path relative to your world path in which profiles will be saved to." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "" #: src/settings_translation_file.cpp -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" #: src/settings_translation_file.cpp @@ -5477,6 +5574,12 @@ msgid "" "Default is 1.0 (1/2 node)." 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 "The network interface that the server listens on." msgstr "" @@ -5503,7 +5606,7 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" #: src/settings_translation_file.cpp @@ -5560,6 +5663,10 @@ msgstr "" msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "" +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -5607,11 +5714,11 @@ msgid "Touchscreen sensitivity multiplier." msgstr "" #: src/settings_translation_file.cpp -msgid "Touchscreen threshold" +msgid "Tradeoffs for performance" msgstr "" #: src/settings_translation_file.cpp -msgid "Tradeoffs for performance" +msgid "Translucent liquids" msgstr "" #: src/settings_translation_file.cpp @@ -5649,7 +5756,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 "" #: src/settings_translation_file.cpp @@ -5747,10 +5856,6 @@ msgstr "" msgid "User Interfaces" msgstr "" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "" @@ -5837,12 +5942,24 @@ msgstr "" msgid "Volume" msgstr "" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +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 "Volumetric lighting" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6079,9 +6196,44 @@ msgstr "" msgid "cURL parallel limit" msgstr "" +#~ msgid "Change Keys" +#~ msgstr "Huri i nga key" + #, fuzzy #~ msgid "Change keys" #~ msgstr "Huri i nga key" +#, fuzzy, c-format +#~ msgid "" +#~ "Controls:\n" +#~ "- %s: move forwards\n" +#~ "- %s: move backwards\n" +#~ "- %s: move left\n" +#~ "- %s: move right\n" +#~ "- %s: jump/climb up\n" +#~ "- %s: dig/punch/use\n" +#~ "- %s: place/use\n" +#~ "- %s: sneak/climb down\n" +#~ "- %s: drop item\n" +#~ "- %s: inventory\n" +#~ "- Mouse: turn/look\n" +#~ "- Mouse wheel: select item\n" +#~ "- %s: chat\n" +#~ msgstr "" +#~ "Whakamaramatanga o nga neke hanga:\n" +#~ "- %s: whakamua\n" +#~ "- %s: whakamuri\n" +#~ "- %s: māui\n" +#~ "- %s: katau\n" +#~ "- %s: peke\n" +#~ "- %s: keri\n" +#~ "- %s: whakamahī\n" +#~ "- %s: konihi\n" +#~ "- %s: whakataka\n" +#~ "- %s: ketetaputapu\n" +#~ "- Mouse: tirohanga\n" +#~ "- Mouse wheel: ti pako\n" +#~ "- %s: korero\n" + #~ msgid "Information:" #~ msgstr "Nga Korero:" diff --git a/po/minetest.pot b/po/minetest.pot index ba9477754..918545824 100644 --- a/po/minetest.pot +++ b/po/minetest.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -79,14 +79,14 @@ msgid "Command not available: " msgstr "" #: builtin/common/chatcommands.lua -msgid "[all | ]" +msgid "[all | ] [-t]" msgstr "" #: builtin/common/chatcommands.lua -msgid "Get help for commands" +msgid "Get help for commands (-t: output in chat)" msgstr "" -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp +#: builtin/fstk/ui.lua msgid "OK" msgstr "" @@ -134,175 +134,182 @@ msgstr "" msgid "Protocol version mismatch. " msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "All packages" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua msgid "Failed to download \"$1\"" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" +#: builtin/mainmenu/content/contentdb.lua +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua msgid "Error installing \"$1\": $2" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua msgid "Failed to download $1" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "All packages" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Not found" +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Mods" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Please check that the base game is correct." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install $1" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Base Game:" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua -msgid "Dependencies:" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install missing dependencies" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.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/guiPasswordChange.cpp -msgid "Cancel" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "You need to install a game before you can install a mod" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "The package $1 was not found." msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua #: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp msgid "Loading..." msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "No packages could be retrieved" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "No updates" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Update All [$1]" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua #: builtin/mainmenu/settings/dlg_settings.lua msgid "No results" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Downloading..." msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Queued" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua +#: 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_contentstore.lua -#: builtin/mainmenu/tab_content.lua +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua msgid "Uninstall" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "View more information in a web browser" msgstr "" +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Not found" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 and $2 dependencies will be installed." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Please check that the base game is correct." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install $1" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Base Game:" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua +msgid "Dependencies:" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install missing dependencies" +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 +#: 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 "" + +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" +msgstr "" + +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" +msgstr "" + #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" msgstr "" @@ -499,6 +506,16 @@ msgstr "" msgid "Terrain surface erosion" msgstr "" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Temperate, Desert, Jungle, Tundra, Taiga" msgstr "" @@ -801,27 +818,24 @@ msgstr "" msgid "(No description of setting given)" msgstr "" +#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +msgid "General" +msgstr "" + #: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" +#: src/settings_translation_file.cpp +msgid "Controls" msgstr "" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Accessibility" msgstr "" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp -msgid "General" -msgstr "" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" msgstr "" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp -msgid "Controls" -msgstr "" - #: builtin/mainmenu/settings/dlg_settings.lua msgid "Movement" msgstr "" @@ -1002,7 +1016,17 @@ msgid "Install games from ContentDB" msgstr "" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." +msgid "" +"Minetest 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." +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "You need to install a game before you can create a world." msgstr "" #: builtin/mainmenu/tab_local.lua @@ -1146,10 +1170,6 @@ msgstr "" msgid "Main Menu" msgstr "" -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "" - #: src/client/clientlauncher.cpp msgid "Provided password file failed to open: " msgstr "" @@ -1174,8 +1194,8 @@ msgstr "" msgid "Could not find or load game: " msgstr "" -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." msgstr "" #: src/client/game.cpp @@ -1247,10 +1267,6 @@ msgstr "" msgid "Node definitions..." msgstr "" -#: src/client/game.cpp -msgid "Media..." -msgstr "" - #: src/client/game.cpp msgid "KiB/s" msgstr "" @@ -1284,10 +1300,6 @@ msgstr "" msgid "Sound system is not supported on this build" msgstr "" -#: src/client/game.cpp -msgid "ok" -msgstr "" - #: src/client/game.cpp msgid "Fly mode enabled" msgstr "" @@ -1356,10 +1368,6 @@ msgstr "" msgid "Block bounds shown for nearby blocks" msgstr "" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "" - #: src/client/game.cpp msgid "Automatic forward enabled" msgstr "" @@ -1373,13 +1381,17 @@ msgid "Minimap currently disabled by game or mod" msgstr "" #: src/client/game.cpp -msgid "Fog disabled" +msgid "Fog enabled by game or mod" msgstr "" #: src/client/game.cpp msgid "Fog enabled" msgstr "" +#: src/client/game.cpp +msgid "Fog disabled" +msgstr "" + #: src/client/game.cpp msgid "Debug info shown" msgstr "" @@ -1460,8 +1472,8 @@ msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1471,25 +1483,6 @@ msgid "" " --> place single item to slot\n" msgstr "" -#: src/client/game.cpp -#, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" - #: src/client/game.cpp msgid "Continue" msgstr "" @@ -1522,20 +1515,12 @@ msgstr "" msgid "- Mode: " msgstr "" -#: src/client/game.cpp -msgid "Remote server" -msgstr "" - -#: src/client/game.cpp -msgid "- Address: " -msgstr "" - #: src/client/game.cpp msgid "Hosting server" msgstr "" #: src/client/game.cpp -msgid "- Port: " +msgid "Remote server" msgstr "" #: src/client/game.cpp @@ -1568,12 +1553,16 @@ msgstr "" msgid "A serialization error occurred:" msgstr "" -#: src/client/game.cpp src/server.cpp +#: 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 "" @@ -1894,6 +1883,15 @@ msgstr "" 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 "" @@ -2083,6 +2081,18 @@ msgstr "" 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 "" @@ -2125,6 +2135,7 @@ msgstr "" #. 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 "" @@ -2150,7 +2161,7 @@ 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 Change Keys." +"cinematic mode by using the key set in Controls." msgstr "" #: src/settings_translation_file.cpp @@ -2203,6 +2214,16 @@ msgid "" "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 "" @@ -2260,11 +2281,12 @@ msgid "Touchscreen" msgstr "" #: src/settings_translation_file.cpp -msgid "Touchscreen threshold" +msgid "Enable touchscreen" msgstr "" #: src/settings_translation_file.cpp -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"Enables touchscreen mode, allowing you to play the game with a touchscreen." msgstr "" #: src/settings_translation_file.cpp @@ -2275,6 +2297,25 @@ msgstr "" 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 "" @@ -2306,6 +2347,23 @@ msgid "" "circle." msgstr "" +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "Graphics and Audio" msgstr "" @@ -2432,11 +2490,11 @@ msgid "Graphics Effects" msgstr "" #: src/settings_translation_file.cpp -msgid "Opaque liquids" +msgid "Translucent liquids" msgstr "" #: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" +msgid "Allows liquids to be translucent." msgstr "" #: src/settings_translation_file.cpp @@ -2771,8 +2829,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -2835,8 +2893,7 @@ msgstr "" msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" #: src/settings_translation_file.cpp @@ -3012,6 +3069,14 @@ msgstr "" 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 "" @@ -3047,6 +3112,21 @@ msgid "" "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 "Bloom" msgstr "" @@ -3105,6 +3185,14 @@ msgid "" "Range: from 0.1 to 8, default: 1" 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 "Audio" msgstr "" @@ -3119,6 +3207,14 @@ msgid "" "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 "" @@ -3141,7 +3237,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" @@ -3403,7 +3499,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 "" #: src/settings_translation_file.cpp @@ -3531,6 +3629,23 @@ msgid "" "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" +"Minetest 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 "" @@ -4124,7 +4239,9 @@ 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." +"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 @@ -4960,6 +5077,14 @@ msgstr "" 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 "" @@ -5122,7 +5247,7 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" #: src/settings_translation_file.cpp @@ -5135,16 +5260,6 @@ msgid "" "Use this to limit the performance impact of transparency depth sorting" msgstr "" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" - #: src/settings_translation_file.cpp msgid "Cloud radius" msgstr "" @@ -5193,17 +5308,6 @@ msgid "" "threads." msgstr "" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" - #: src/settings_translation_file.cpp msgid "Minimap scan height" msgstr "" @@ -5272,6 +5376,28 @@ msgid "" "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 "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 "" @@ -5601,9 +5727,10 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" #: src/settings_translation_file.cpp @@ -5781,12 +5908,10 @@ msgid "" "clients.\n" "Small values potentially improve performance a lot, at the expense of " "visible\n" -"rendering glitches (some blocks will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." msgstr "" #: src/settings_translation_file.cpp @@ -5801,6 +5926,21 @@ msgid "" "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 "" @@ -5910,16 +6050,6 @@ msgstr "" msgid "Miscellaneous" msgstr "" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" - #: src/settings_translation_file.cpp msgid "Display Density Scaling Factor" msgstr "" diff --git a/po/mn/minetest.po b/po/mn/minetest.po index 2d11ab853..dc7292d72 100644 --- a/po/mn/minetest.po +++ b/po/mn/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" "PO-Revision-Date: 2023-12-03 17:17+0000\n" "Last-Translator: Krock \n" "Language-Team: Mongolian ]" +msgid "[all | ] [-t]" msgstr "" -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" -msgstr "За" - #: builtin/fstk/ui.lua #, fuzzy msgid "" @@ -107,6 +104,10 @@ msgstr "Алдаа үүссэн:" msgid "Main menu" msgstr "Үндсэн цэс" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "За" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Дахин холбогдох" @@ -135,173 +136,180 @@ msgstr "Бид зөвхөн $1 хувилбарын протокол дэмжд msgid "We support protocol versions between version $1 and $2." msgstr "Бид $1 болон $2 хоорондох хувилбарын протокол дэмждэг." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download \"$1\"" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +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 "Mods" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "" + +#: 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 "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download \"$1\"" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" msgstr "" #: builtin/mainmenu/content/pkgmgr.lua @@ -448,10 +456,20 @@ msgstr "" msgid "Decorations" msgstr "" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." msgstr "" +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "" @@ -818,10 +836,6 @@ msgstr "" msgid "Back" msgstr "" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -831,7 +845,8 @@ msgstr "" msgid "Clear" msgstr "" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "" @@ -1035,6 +1050,16 @@ msgstr "" msgid "Install games from ContentDB" msgstr "" +#: builtin/mainmenu/tab_local.lua +msgid "Minetest 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 " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "" @@ -1068,7 +1093,7 @@ msgid "Start Game" msgstr "" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." +msgid "You need to install a game before you can create a world." msgstr "" #: builtin/mainmenu/tab_online.lua @@ -1148,18 +1173,10 @@ msgstr "" msgid "Rebuilding shaders..." msgstr "" -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "" - #: src/client/clientlauncher.cpp msgid "Could not find or load game: " msgstr "" -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "" - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "" @@ -1184,24 +1201,20 @@ msgstr "" msgid "Provided world path doesn't exist: " msgstr "" -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +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 "- Address: " -msgstr "" - #: src/client/game.cpp msgid "- Mode: " msgstr "" -#: src/client/game.cpp -msgid "- Port: " -msgstr "" - #: src/client/game.cpp msgid "- Public: " msgstr "" @@ -1236,10 +1249,6 @@ msgstr "" msgid "Block bounds hidden" msgstr "" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "" @@ -1284,6 +1293,10 @@ msgstr "" msgid "Connecting to server..." msgstr "" +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "" @@ -1292,32 +1305,13 @@ msgstr "" msgid "Continue" msgstr "" -#: src/client/game.cpp -#, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" - #: src/client/game.cpp msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1397,6 +1391,10 @@ msgstr "" msgid "Fog enabled" msgstr "" +#: src/client/game.cpp +msgid "Fog enabled by game or mod" +msgstr "" + #: src/client/game.cpp msgid "Game info:" msgstr "" @@ -1417,10 +1415,6 @@ msgstr "" msgid "KiB/s" msgstr "" -#: src/client/game.cpp -msgid "Media..." -msgstr "" - #: src/client/game.cpp msgid "MiB/s" msgstr "" @@ -1576,10 +1570,6 @@ msgstr "" msgid "Zoom currently disabled by game or mod" msgstr "" -#: src/client/game.cpp -msgid "ok" -msgstr "" - #: src/client/gameui.cpp msgid "Chat currently disabled by game or mod" msgstr "" @@ -1900,6 +1890,15 @@ msgstr "" msgid "Minimap in texture mode" msgstr "" +#: src/client/shader.cpp +#, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2089,6 +2088,18 @@ msgstr "" msgid "press key" msgstr "" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Unable to open URL" +msgstr "" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "" @@ -2122,6 +2133,7 @@ msgstr "" #. 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 "mn" @@ -2307,12 +2319,6 @@ msgstr "" msgid "Adds particles when digging a node." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2335,6 +2341,10 @@ msgstr "" msgid "Advanced" msgstr "" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2388,6 +2398,17 @@ msgstr "" msgid "Apple trees noise" 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 "Arm inertia" msgstr "" @@ -2409,12 +2430,21 @@ msgid "" "clients.\n" "Small values potentially improve performance a lot, at the expense of " "visible\n" -"rendering glitches (some blocks will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +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 @@ -2477,6 +2507,10 @@ msgstr "" msgid "Biome noise" msgstr "" +#: src/settings_translation_file.cpp +msgid "Block cull optimize distance" +msgstr "" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "" @@ -2689,6 +2723,12 @@ msgstr "" msgid "Colored shadows" 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -2820,10 +2860,6 @@ msgid "" "Also controls the object crosshair color" msgstr "" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "" @@ -2873,6 +2909,19 @@ msgid "" "but also uses more resources." 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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "" @@ -3057,6 +3106,10 @@ msgstr "" msgid "Enable Bloom Debug" msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable Debanding" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3076,6 +3129,10 @@ msgid "" "filtering." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable Post Processing" +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "" @@ -3118,6 +3175,10 @@ msgstr "" msgid "Enable mouse wheel (scroll) for item selection in hotbar." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable random mod loading (mainly used for testing)." +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3141,6 +3202,10 @@ msgid "" "expecting." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable touchscreen" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3149,12 +3214,6 @@ msgid "" "when connecting to the server." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3184,6 +3243,19 @@ msgstr "" msgid "Enables caching of facedir rotated meshes." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -3978,9 +4050,10 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" #: src/settings_translation_file.cpp @@ -4126,10 +4199,6 @@ msgid "" "Make fog and sky colors depend on daytime (dawn/sunset) and view direction." msgstr "" -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "" @@ -4178,7 +4247,9 @@ 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." +"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 @@ -4213,10 +4284,6 @@ msgstr "" msgid "Mapblock mesh generation threads" msgstr "" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "" @@ -4459,6 +4526,10 @@ msgstr "" msgid "Minimap scan height" msgstr "" +#: src/settings_translation_file.cpp +msgid "Minimum dig repetition interval" +msgstr "" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "" @@ -4527,6 +4598,10 @@ msgstr "" msgid "Mouse sensitivity multiplier." msgstr "" +#: src/settings_translation_file.cpp +msgid "Movement threshold" +msgstr "" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "" @@ -4635,10 +4710,6 @@ msgstr "" msgid "Occlusion Culling" msgstr "" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -4651,6 +4722,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "OpenGL debug" +msgstr "" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "" @@ -4760,6 +4835,15 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Protocol version minimum" +msgstr "Протоколын хувилбар таарсангүй. " + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -4775,6 +4859,10 @@ msgstr "" msgid "Random input" msgstr "" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "" @@ -4962,8 +5050,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5081,7 +5169,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" @@ -5114,6 +5202,10 @@ msgid "" "Bright colors will bleed over the neighboring objects." 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 "Set to true to enable waving leaves." msgstr "" @@ -5153,8 +5245,7 @@ msgstr "" msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" #: src/settings_translation_file.cpp @@ -5224,13 +5315,6 @@ msgid "" "recommended." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "" @@ -5266,7 +5350,7 @@ 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 Change Keys." +"cinematic mode by using the key set in Controls." msgstr "" #: src/settings_translation_file.cpp @@ -5287,6 +5371,14 @@ msgstr "" msgid "Soft shadow radius" 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 "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -5443,17 +5535,37 @@ msgid "" "when calling `/profiler save [format]` without format." 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 "" "The file path relative to your world path in which profiles will be saved to." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "" #: src/settings_translation_file.cpp -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" #: src/settings_translation_file.cpp @@ -5464,6 +5576,12 @@ msgid "" "Default is 1.0 (1/2 node)." 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 "The network interface that the server listens on." msgstr "" @@ -5490,7 +5608,7 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" #: src/settings_translation_file.cpp @@ -5547,6 +5665,10 @@ msgstr "" msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "" +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -5594,11 +5716,11 @@ msgid "Touchscreen sensitivity multiplier." msgstr "" #: src/settings_translation_file.cpp -msgid "Touchscreen threshold" +msgid "Tradeoffs for performance" msgstr "" #: src/settings_translation_file.cpp -msgid "Tradeoffs for performance" +msgid "Translucent liquids" msgstr "" #: src/settings_translation_file.cpp @@ -5636,7 +5758,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 "" #: src/settings_translation_file.cpp @@ -5734,10 +5858,6 @@ msgstr "" msgid "User Interfaces" msgstr "" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "" @@ -5824,12 +5944,24 @@ msgstr "" msgid "Volume" msgstr "" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +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 "Volumetric lighting" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" diff --git a/po/mr/minetest.po b/po/mr/minetest.po index 7b91461d5..c2b352f07 100644 --- a/po/mr/minetest.po +++ b/po/mr/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" "PO-Revision-Date: 2023-12-03 17:17+0000\n" "Last-Translator: Krock \n" "Language-Team: Marathi ]" +msgid "[all | ] [-t]" msgstr "" -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" -msgstr "ठीक आहे" - #: builtin/fstk/ui.lua msgid "" msgstr "" @@ -104,6 +100,10 @@ msgstr "एक त्रुटी आली:" msgid "Main menu" msgstr "मुख्य पान" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "ठीक आहे" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "पुन्हा सामील व्हा" @@ -132,175 +132,182 @@ msgstr "आम्ही केवळ आवृत्ती $1 चे समर msgid "We support protocol versions between version $1 and $2." msgstr "आम्ही केवळ आवृत्ती $1 आणि आवृत्ती $2 चे समर्थन करतो." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "$१ आधीच डाउन्लोआडेड आहे. आपण ते अधिलिखित करू इच्छिता?" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" -msgstr "$1 $2 करून" +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "Failed to download \"$1\"" +msgstr "$१ डाउनलोड करू नाही शकत" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr "$१ डाउनलोड करू नाही शकत" + +#: builtin/mainmenu/content/contentdb.lua +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." msgstr "$1 डाउनलोड होत आहे..." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "सर्व संकुले" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "आधीच स्थापित" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "मुख्य पानावर परत जा" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "जेव्हा मिनटेस्ट सीआरएलशिवाय संकलित केले होते तेव्हा सामग्री डीबी उपलब्ध नाही" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "डाउनलोड करत आहे..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "खेळ" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +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 "Mods" +msgstr "मॉड" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "काहीच सापडत नाही" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "कोणतीही गोष्ट नाहीत" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "अपडेट नाहीत" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "रांगेत लागले आहेत" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "टेक्सचर पॅक" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "काढा" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "अपडेट" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "सर्व अपडेट करा [$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 "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "$1 $2 करून" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "आधीच स्थापित" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "मुख्य खेळ:" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "रद्द करा" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "जेव्हा मिनटेस्ट सीआरएलशिवाय संकलित केले होते तेव्हा सामग्री डीबी उपलब्ध नाही" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "अवलंबित्व:" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "डाउनलोड करत आहे..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to download \"$1\"" -msgstr "$१ डाउनलोड करू नाही शकत" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "$१ डाउनलोड करू नाही शकत" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "खेळ" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "डाउनलोड" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "डाउनलोड $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "गहाळ अवलंबित्व डाउनलोड करा" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "मॉड" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "काहीच सापडत नाही" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "कोणतीही गोष्ट नाहीत" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "अपडेट नाहीत" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "सापडले नाही" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "अधिलिखित" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "कृपया मुख्य खेळ योग्य आहे याची तपासणी करा." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" -msgstr "रांगेत लागले आहेत" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" +msgstr "$१ आधीच डाउन्लोआडेड आहे. आपण ते अधिलिखित करू इच्छिता?" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "टेक्सचर पॅक" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "काढा" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "अपडेट" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "सर्व अपडेट करा [$1]" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "अंतर्जाल शोधक वर माहिती काढा" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" -msgstr "" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" +msgstr "अधिलिखित" #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" @@ -446,11 +453,21 @@ msgstr "तयार करा" msgid "Decorations" msgstr "सजावट" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua #, fuzzy msgid "Development Test is meant for developers." msgstr "चेतावणी: Development Test विकासकांसाठी आहे." +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "अंधारकोठडी" @@ -813,10 +830,6 @@ msgstr "" msgid "Back" msgstr "" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -826,7 +839,8 @@ msgstr "" msgid "Clear" msgstr "" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "" @@ -1030,6 +1044,16 @@ msgstr "डाउनलोड $1" msgid "Install games from ContentDB" msgstr "" +#: builtin/mainmenu/tab_local.lua +msgid "Minetest 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 " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "" @@ -1063,8 +1087,8 @@ msgid "Start Game" msgstr "" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." -msgstr "आपल्याकडे कोणताही खेळ नाही." +msgid "You need to install a game before you can create a world." +msgstr "" #: builtin/mainmenu/tab_online.lua msgid "Address" @@ -1144,18 +1168,10 @@ msgstr "" msgid "Rebuilding shaders..." msgstr "" -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "" - #: src/client/clientlauncher.cpp msgid "Could not find or load game: " msgstr "" -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "" - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "" @@ -1180,24 +1196,20 @@ msgstr "" msgid "Provided world path doesn't exist: " msgstr "" -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +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 "- Address: " -msgstr "" - #: src/client/game.cpp msgid "- Mode: " msgstr "" -#: src/client/game.cpp -msgid "- Port: " -msgstr "" - #: src/client/game.cpp msgid "- Public: " msgstr "" @@ -1233,10 +1245,6 @@ msgstr "" msgid "Block bounds hidden" msgstr "" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "" @@ -1281,6 +1289,10 @@ msgstr "" msgid "Connecting to server..." msgstr "" +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "" @@ -1289,32 +1301,13 @@ msgstr "" msgid "Continue" msgstr "" -#: src/client/game.cpp -#, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" - #: src/client/game.cpp msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1394,6 +1387,10 @@ msgstr "" msgid "Fog enabled" msgstr "" +#: src/client/game.cpp +msgid "Fog enabled by game or mod" +msgstr "" + #: src/client/game.cpp msgid "Game info:" msgstr "" @@ -1414,10 +1411,6 @@ msgstr "" msgid "KiB/s" msgstr "" -#: src/client/game.cpp -msgid "Media..." -msgstr "" - #: src/client/game.cpp msgid "MiB/s" msgstr "" @@ -1573,10 +1566,6 @@ msgstr "" msgid "Zoom currently disabled by game or mod" msgstr "" -#: src/client/game.cpp -msgid "ok" -msgstr "" - #: src/client/gameui.cpp msgid "Chat currently disabled by game or mod" msgstr "" @@ -1898,6 +1887,15 @@ msgstr "" msgid "Minimap in texture mode" msgstr "" +#: src/client/shader.cpp +#, fuzzy, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "$१ डाउनलोड करू नाही शकत" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2089,6 +2087,19 @@ msgstr "" msgid "press key" msgstr "" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +#, fuzzy +msgid "Unable to open URL" +msgstr "$१ डाउनलोड करू नाही शकत" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "" @@ -2122,6 +2133,7 @@ msgstr "" #. 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 "mr" @@ -2307,12 +2319,6 @@ msgstr "" msgid "Adds particles when digging a node." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2336,6 +2342,10 @@ msgstr "जगाचे नाव" msgid "Advanced" msgstr "" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2389,6 +2399,17 @@ msgstr "" msgid "Apple trees noise" 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 "Arm inertia" msgstr "" @@ -2410,12 +2431,21 @@ msgid "" "clients.\n" "Small values potentially improve performance a lot, at the expense of " "visible\n" -"rendering glitches (some blocks will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +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 @@ -2479,6 +2509,10 @@ msgstr "भिन्न हवामान आणि आपत्ती" msgid "Biome noise" msgstr "" +#: src/settings_translation_file.cpp +msgid "Block cull optimize distance" +msgstr "" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "" @@ -2691,6 +2725,12 @@ msgstr "" msgid "Colored shadows" 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -2822,10 +2862,6 @@ msgid "" "Also controls the object crosshair color" msgstr "" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "" @@ -2875,6 +2911,19 @@ msgid "" "but also uses more resources." 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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "" @@ -3061,6 +3110,11 @@ msgstr "सर्व वापरा" msgid "Enable Bloom Debug" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Debanding" +msgstr "सर्व वापरा" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3080,6 +3134,10 @@ msgid "" "filtering." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable Post Processing" +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "" @@ -3122,6 +3180,10 @@ msgstr "" msgid "Enable mouse wheel (scroll) for item selection in hotbar." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable random mod loading (mainly used for testing)." +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3145,6 +3207,10 @@ msgid "" "expecting." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable touchscreen" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3153,12 +3219,6 @@ msgid "" "when connecting to the server." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3188,6 +3248,19 @@ msgstr "" msgid "Enables caching of facedir rotated meshes." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -3983,9 +4056,10 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" #: src/settings_translation_file.cpp @@ -4131,10 +4205,6 @@ msgid "" "Make fog and sky colors depend on daytime (dawn/sunset) and view direction." msgstr "" -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "" @@ -4183,7 +4253,9 @@ 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." +"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 @@ -4218,10 +4290,6 @@ msgstr "" msgid "Mapblock mesh generation threads" msgstr "" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "" @@ -4463,6 +4531,10 @@ msgstr "" msgid "Minimap scan height" msgstr "" +#: src/settings_translation_file.cpp +msgid "Minimum dig repetition interval" +msgstr "" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "" @@ -4531,6 +4603,10 @@ msgstr "" msgid "Mouse sensitivity multiplier." msgstr "" +#: src/settings_translation_file.cpp +msgid "Movement threshold" +msgstr "" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "" @@ -4639,10 +4715,6 @@ msgstr "" msgid "Occlusion Culling" msgstr "" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -4655,6 +4727,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "OpenGL debug" +msgstr "" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "" @@ -4764,6 +4840,15 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Protocol version minimum" +msgstr "सर्व्हरची आवृत्ती जुळत नाही " + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -4779,6 +4864,10 @@ msgstr "" msgid "Random input" msgstr "" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "" @@ -4966,8 +5055,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5086,7 +5175,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" @@ -5119,6 +5208,10 @@ msgid "" "Bright colors will bleed over the neighboring objects." 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 "Set to true to enable waving leaves." msgstr "" @@ -5158,8 +5251,7 @@ msgstr "" msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" #: src/settings_translation_file.cpp @@ -5229,13 +5321,6 @@ msgid "" "recommended." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "" @@ -5271,7 +5356,7 @@ 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 Change Keys." +"cinematic mode by using the key set in Controls." msgstr "" #: src/settings_translation_file.cpp @@ -5292,6 +5377,14 @@ msgstr "" msgid "Soft shadow radius" 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 "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -5448,17 +5541,37 @@ msgid "" "when calling `/profiler save [format]` without format." 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 "" "The file path relative to your world path in which profiles will be saved to." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "" #: src/settings_translation_file.cpp -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" #: src/settings_translation_file.cpp @@ -5469,6 +5582,12 @@ msgid "" "Default is 1.0 (1/2 node)." 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 "The network interface that the server listens on." msgstr "" @@ -5495,7 +5614,7 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" #: src/settings_translation_file.cpp @@ -5552,6 +5671,10 @@ msgstr "" msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "" +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -5599,11 +5722,11 @@ msgid "Touchscreen sensitivity multiplier." msgstr "" #: src/settings_translation_file.cpp -msgid "Touchscreen threshold" +msgid "Tradeoffs for performance" msgstr "" #: src/settings_translation_file.cpp -msgid "Tradeoffs for performance" +msgid "Translucent liquids" msgstr "" #: src/settings_translation_file.cpp @@ -5641,7 +5764,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 "" #: src/settings_translation_file.cpp @@ -5739,10 +5864,6 @@ msgstr "" msgid "User Interfaces" msgstr "" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "" @@ -5829,12 +5950,24 @@ msgstr "" msgid "Volume" msgstr "" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +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 "Volumetric lighting" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6086,3 +6219,6 @@ msgstr "" #, fuzzy #~ msgid "You died." #~ msgstr "तू मेलास" + +#~ msgid "You have no games installed." +#~ msgstr "आपल्याकडे कोणताही खेळ नाही." diff --git a/po/ms/minetest.po b/po/ms/minetest.po index a71646720..0eefd8642 100644 --- a/po/ms/minetest.po +++ b/po/ms/minetest.po @@ -2,10 +2,10 @@ msgid "" msgstr "" "Project-Id-Version: Malay (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" -"PO-Revision-Date: 2023-12-02 05:17+0000\n" -"Last-Translator: Nisa Syazwani \n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" +"PO-Revision-Date: 2023-12-04 21:13+0000\n" +"Last-Translator: \"Yaya - Nurul Azeera Hidayah @ Muhammad Nur Hidayat " +"Yasuyoshi\" \n" "Language-Team: Malay \n" "Language: ms\n" @@ -72,7 +72,8 @@ msgid "Command not available: " msgstr "Perintah tidak tersedia: " #: builtin/common/chatcommands.lua -msgid "Get help for commands" +#, fuzzy +msgid "Get help for commands (-t: output in chat)" msgstr "Dapatkan bantuan untuk perintah" #: builtin/common/chatcommands.lua @@ -83,13 +84,10 @@ msgstr "" "untuk senaraikan kesemuanya." #: builtin/common/chatcommands.lua -msgid "[all | ]" +#, fuzzy +msgid "[all | ] [-t]" msgstr "[all | ]" -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" -msgstr "OK" - #: builtin/fstk/ui.lua msgid "" msgstr "" @@ -106,6 +104,10 @@ msgstr "Telah berlakunya ralat:" msgid "Main menu" msgstr "Menu utama" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "OK" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Sambung semula" @@ -134,19 +136,27 @@ msgstr "Kami hanya menyokong protokol versi $1." msgid "We support protocol versions between version $1 and $2." msgstr "Kami menyokong protokol versi $1 hingga $2." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "\"$1\" sudah wujud. Adakah anda ingin tulis gantinya?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" +msgstr "Ralat ketika memasang \"$1\": $2" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." -msgstr "Kebergantungan $1 dan $2 akan dipasangkan." +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download \"$1\"" +msgstr "Gagal untuk memuat turun \"$1\"" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" -msgstr "$1 oleh $2" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr "Gagal memuat turun $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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)" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" @@ -154,157 +164,157 @@ msgstr "" "$1 sedang muat turun,\n" "$2 menunggu giliran" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." msgstr "$1 dimuat turun..." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "$1 memerlukan kebergantungan yang tidak dijumpai." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "$1 akan dipasangkan, dan $2 kebergantungan akan dilangkau." - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "Semua pakej" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "Sudah dipasang" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "Kembali ke Menu Utama" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "ContentDB tidak tersedia apabila Minetest dikompil tanpa cURL" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "Memuat turun..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +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 +msgid "Loading..." +msgstr "Memuatkan..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Mods" +msgstr "Mods" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "Tiada pakej yang boleh diambil" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "Tiada hasil" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "Tiada kemas kini" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "Menunggu giliran" + +#: builtin/mainmenu/content/dlg_contentdb.lua +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." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "$1 oleh $2" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "$1 memerlukan kebergantungan yang tidak dijumpai." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "$1 akan dipasangkan, dan $2 kebergantungan akan dilangkau." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "Sudah dipasang" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "Permainan Asas:" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "Batal" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "ContentDB tidak tersedia apabila Minetest dikompil tanpa cURL" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "Kebergantungan:" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "Memuat turun..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "Ralat ketika memasang \"$1\": $2" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download \"$1\"" -msgstr "Gagal untuk memuat turun \"$1\"" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "Gagal memuat turun $1" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "" -"Gagal untuk menyari \"$1\" (jenis fail tidak disokong atau arkib rosak)" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "Permainan" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "Pasang" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "Pasang $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "Pasang kebergantungan yang hilang" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "Memuatkan..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "Mods" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "Tiada pakej yang boleh diambil" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "Tiada hasil" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "Tiada kemas kini" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "Tidak dijumpai" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "Tulis ganti" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "Sila periksa dan pastikan permainan asas itu betul." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" -msgstr "Menunggu giliran" +#: 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?" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "Pek tekstur" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "Pakej $1 tidak dijumpai." - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "Nyahpasang" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "Kemas kini" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "Kemas Kini Semua [$1]" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "Lihat maklumat lanjut dalam pelayar sesawang" - -#: builtin/mainmenu/content/dlg_contentstore.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 "Overwrite" +msgstr "Tulis ganti" #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" @@ -452,10 +462,20 @@ msgstr "Cipta" msgid "Decorations" msgstr "Hiasan" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." msgstr "Development Test hanyalah untuk kegunaan pembangun." +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "Kurungan bawah tanah" @@ -833,10 +853,6 @@ msgstr "Ketercapaian" msgid "Back" msgstr "Kembali" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "Tukar Kekunci" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -846,7 +862,8 @@ msgstr "Sembang" msgid "Clear" msgstr "Padam" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "Kawalan" @@ -1051,6 +1068,17 @@ msgstr "Pasang suatu permainan" 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" + +#: builtin/mainmenu/tab_local.lua +msgid "" +"Minetest is a game-creation platform that allows you to play many different " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "Buat Baru" @@ -1084,8 +1112,9 @@ msgid "Start Game" msgstr "Mulakan Permainan" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." -msgstr "Anda tidak memasang sebarang permainan." +#, fuzzy +msgid "You need to install a game before you can create a world." +msgstr "Anda perlu pasang permainan sebelum anda boleh pasang mods" #: builtin/mainmenu/tab_online.lua msgid "Address" @@ -1164,18 +1193,10 @@ msgstr "Sedang memuatkan tekstur..." msgid "Rebuilding shaders..." msgstr "Sedang membina semula pembayang..." -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "Ralat dalam penyambungan (tamat tempoh?)" - #: src/client/clientlauncher.cpp msgid "Could not find or load game: " msgstr "Tidak jumpa atau tidak boleh muatkan permainan: " -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "Spesifikasi permainan tidak sah." - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "Menu Utama" @@ -1201,7 +1222,11 @@ msgstr "Fail kata laluan yang disediakan gagal dibuka: " msgid "Provided world path doesn't exist: " msgstr "Laluan dunia diberi tidak wujud: " -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "Sedang memuatkan media..." + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp msgid "" "\n" "Check debug.txt for details." @@ -1209,18 +1234,10 @@ msgstr "" "\n" "Periksa fail debug.txt untuk maklumat lanjut." -#: src/client/game.cpp -msgid "- Address: " -msgstr "- Alamat: " - #: src/client/game.cpp msgid "- Mode: " msgstr "- Mod: " -#: src/client/game.cpp -msgid "- Port: " -msgstr "- Port: " - #: src/client/game.cpp msgid "- Public: " msgstr "- Awam: " @@ -1255,10 +1272,6 @@ msgstr "Pergerakan automatik dibolehkan" msgid "Block bounds hidden" msgstr "Batas blok disembunyikan" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "Batas blok ditunjukkan untuk semua blok" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "Batas blok ditunjukkan untuk blok semasa" @@ -1303,6 +1316,10 @@ msgstr "Skrip pihak klien dilumpuhkan" msgid "Connecting to server..." msgstr "Sedang menyambung kepada pelayan..." +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "Ralat dalam penyambungan (tamat tempoh?)" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "Sambungan gagal untuk sebab yang tidak diketahui" @@ -1312,45 +1329,13 @@ msgid "Continue" msgstr "Teruskan" #: src/client/game.cpp -#, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" -"Kawalan:\n" -"- %s: bergerak ke depan\n" -"- %s: bergerak ke belakang\n" -"- %s: bergerak ke kiri\n" -"- %s: bergerak ke kanan\n" -"- %s: lompat/naik atas\n" -"- %s: gali/ketuk/guna\n" -"- %s: letak/guna\n" -"- %s: selinap/turun bawah\n" -"- %s: jatuhkan item\n" -"- %s: inventori\n" -"- Tetikus: pusing/lihat sekeliling\n" -"- Roda tetikus: pilih item\n" -"- %s: sembang\n" - -#: src/client/game.cpp +#, fuzzy msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1444,6 +1429,11 @@ msgstr "Kabut dilumpuhkan" 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" + #: src/client/game.cpp msgid "Game info:" msgstr "Maklumat permainan:" @@ -1464,10 +1454,6 @@ msgstr "Sedang mentakrifkan item..." msgid "KiB/s" msgstr "KiB/s" -#: src/client/game.cpp -msgid "Media..." -msgstr "Sedang memuatkan media..." - #: src/client/game.cpp msgid "MiB/s" msgstr "MiB/s" @@ -1629,10 +1615,6 @@ msgstr "Rangka dawai ditunjukkan" msgid "Zoom currently disabled by game or mod" msgstr "Zum dilumpuhkan oleh permainan atau mods ketika ini" -#: src/client/game.cpp -msgid "ok" -msgstr "ok" - #: src/client/gameui.cpp msgid "Chat currently disabled by game or mod" msgstr "Sembang dilumpuhkan oleh permainan atau mods ketika ini" @@ -1953,6 +1935,15 @@ msgstr "Peta mini dalam mod permukaan, Zum x%d" msgid "Minimap in texture mode" msgstr "Peta mini dalam mod tekstur" +#: src/client/shader.cpp +#, fuzzy, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "Gagal buka laman sesawang" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2146,6 +2137,19 @@ msgstr "Zum" msgid "press key" msgstr "tekan kekunci" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +#, fuzzy +msgid "Unable to open URL" +msgstr "Gagal buka laman sesawang" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "Tukar" @@ -2179,6 +2183,7 @@ msgstr "Kekuatan Bunyi: %d%%" #. 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 "ms" @@ -2399,14 +2404,6 @@ msgstr "Jarak penghantaran objek aktif" msgid "Adds particles when digging a node." msgstr "Menambah partikel apabila menggali nod." -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" -"Laraskan konfigurasi DPI ke skrin anda (bukan X11/Android sahaja) cth. untuk " -"skrin 4K." - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2438,6 +2435,10 @@ msgstr "Nama pentadbir" msgid "Advanced" msgstr "Lanjutan" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2496,6 +2497,17 @@ msgstr "Tambah nama item ke tip alatan." msgid "Apple trees noise" msgstr "Hingar pokok epal" +#: 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 "Arm inertia" msgstr "Inersia lengan" @@ -2513,18 +2525,39 @@ 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" "clients.\n" "Small values potentially improve performance a lot, at the expense of " "visible\n" -"rendering glitches (some blocks will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"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)." + +#: src/settings_translation_file.cpp +#, fuzzy +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 "" "Pada jarak ini, pelayan akan mengoptimumkan secara agresif blok yang mana\n" "akan dihantar kepada klien.\n" @@ -2597,6 +2630,11 @@ msgstr "API Biom" msgid "Biome noise" msgstr "Hingar biom" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Block cull optimize distance" +msgstr "Jarak optimum penghantaran blok" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "Jarak optimum penghantaran blok" @@ -2813,6 +2851,12 @@ msgstr "Kabut berwarna" msgid "Colored shadows" msgstr "Bayang berwarna" +#: 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -2980,10 +3024,6 @@ msgstr "" "Warna rerambut silang (R,G,B).\n" "Juga mengawal warna rerambut silang objek" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "DPI" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "Nilai ambang saiz fail log nyahpepijat" @@ -3038,6 +3078,25 @@ msgstr "" "Tetapan ini menyelakukan kesan bayang lembut dengan menerapkan\n" "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 " +"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" +"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." + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "Mentakrifkan kawasan di mana pokok mempunyai epal." @@ -3243,6 +3302,11 @@ msgstr "Membolehkan Seri" msgid "Enable Bloom Debug" msgstr "Membolehkan Nyahpepijat Seri" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Debanding" +msgstr "Boleh Cedera" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3269,6 +3333,11 @@ msgstr "" "Jika dibenarkan, gunakan cakera Poisson untuk membuat \"bayang lembut\". " "Jika tidak, gunakan penapisan PCF." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Post Processing" +msgstr "Pascapemprosesan" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "Membolehkan Penakaian Surihan Sinar" @@ -3318,6 +3387,11 @@ msgstr "Membolehkan keselamatan mods" 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)." + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "Membolehkan input pengguna secara rawak (hanya untuk percubaan)." @@ -3348,6 +3422,11 @@ msgstr "" "tetapi mereka mungkin tidak mampu menyokong semua sifat baharu yang anda " "sangkakan." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable touchscreen" +msgstr "Skrin Sentuh" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3361,14 +3440,6 @@ msgstr "" "tekstur)\n" "apabila menyambung ke pelayan permainan." -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" -"Membolehkan objek penimbal bucu.\n" -"Ini patut meningkatkan prestasi grafik dengan banyak." - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3407,6 +3478,19 @@ msgstr "Membolehkan animasi item dalam inventori." msgid "Enables caching of facedir rotated meshes." 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 "" + +#: 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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -4353,10 +4437,12 @@ msgstr "" "- Legap: melumpuhkan lut sinar" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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" @@ -4535,10 +4621,6 @@ msgstr "" "Buatkan warna kabut dan langit bergantung kepada waktu (fajar/matahari " "terbenam) dan arah pandang." -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "Buatkan semua cecair menjadi legap" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "Tahap Pemampatan Peta untuk Simpanan Cakera" @@ -4594,11 +4676,14 @@ 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" "When the 'snowbiomes' flag is enabled jungles are automatically enabled and\n" -"the 'jungles' flag is ignored." +"the 'jungles' flag is ignored.\n" +"The 'temples' flag disables generation of desert temples. Normal dungeons " +"will appear instead." msgstr "" "Atribut penjanaan peta khusus untuk Janapeta v6.\n" "Bendera 'snowbiomes' membolehkan sistem 5 biom baharu.\n" @@ -4641,10 +4726,6 @@ msgstr "Lengah masa penjanaan jejaring blok peta" msgid "Mapblock mesh generation threads" msgstr "Bebenang penjanaan jejaring BlokPeta" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "Saiz cache BlokPeta untuk penjana jejaring blokpeta dalam unit MB" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "Had masa nyahmuat blok peta" @@ -4915,6 +4996,11 @@ msgstr "Tahap pengelogan minimum untuk ditulis ke sembang." 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" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "Had minimum jumlah rawak gua besar per ketulan peta." @@ -4983,6 +5069,11 @@ msgstr "Kepekaan tetikus" msgid "Mouse sensitivity multiplier." msgstr "Pendarab kepekaan tetikus." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Movement threshold" +msgstr "Nilai ambang gua" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "Hingar lumpur" @@ -5127,10 +5218,6 @@ msgstr "Penakai Oklusi" msgid "Occlusion Culling" msgstr "Penakaian Oklusi" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "Cecair legap" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -5145,6 +5232,11 @@ msgstr "" "Buka menu jeda apabila fokus tetingkap hilang.\n" "Tidak jeda jika formspec dibuka." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "OpenGL debug" +msgstr "Nyahpepijat janapeta" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "Pilihan mengatasi warna pautan sesawang di sembang." @@ -5280,6 +5372,15 @@ msgstr "" 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. " + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -5298,6 +5399,10 @@ msgstr "Menaikkan rupa bumi untuk membuat lembah di sekitar sungai." msgid "Random input" msgstr "Input rawak" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "Mesej Sembang Terkini" @@ -5511,13 +5616,14 @@ 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" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5679,8 +5785,9 @@ msgstr "" "Julat: dari -1 ke 1.0" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Set the language. Leave empty to use the system language.\n" +"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" @@ -5727,6 +5834,10 @@ msgstr "" "Tetapkan kepada \"true\" untuk membolehkan kesan seri.\n" "Warna yang terang akan menyantak ke objek di sekitarnya." +#: 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 "Set to true to enable waving leaves." msgstr "Tetapkan kepada \"true\" untuk membolehkan daun bergoyang." @@ -5772,11 +5883,11 @@ 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.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" "Pembayang membolehkan kesan visual lanjutan dan boleh meningkatkan prestasi\n" "untuk sesetengah kad video.\n" @@ -5866,16 +5977,6 @@ msgstr "" "ketumpatan gua dan kurungan bawah tanah. Perubahan nilai ini adalah\n" "untuk kegunaan istimewa, lebih baik biarkannya tidak berubah." -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" -"Saiz cache blokpeta untuk penjana jejaring. Menaikkan nilai ini akan\n" -"meningkatkan jumlah % hit cache, mengurangkan data yang perlu disalin\n" -"daripada jalur utama, lalu mengurangkan ketaran." - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "Kecondongan Orbit Badan Angkasa" @@ -5910,9 +6011,10 @@ 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 Change Keys." +"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 " @@ -5938,6 +6040,15 @@ msgstr "Kelajuan menyelinap, dalam unit nod per saat." msgid "Soft shadow radius" msgstr "Jejari bayang lembut" +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "Bunyi" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sound Extensions Blacklist" +msgstr "Senarai Hitam Bendera ContentDB" + #: src/settings_translation_file.cpp msgid "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -6148,6 +6259,12 @@ msgstr "" "Format lalai di untuk menyimpan profil,\n" "apabila memanggil `/profiler save [format]` tanpa format." +#: 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 "" "The file path relative to your world path in which profiles will be saved to." @@ -6155,12 +6272,27 @@ msgstr "" "Laluan fail yang relatif kepada laluan dunia anda di mana profil akan " "disimpankan." +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: 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 -msgid "The length in pixels it takes for touchscreen interaction to start." +#, 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." @@ -6176,6 +6308,15 @@ msgstr "" "0.0 = Gelora tidak bergerak langsung.\n" "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." + #: src/settings_translation_file.cpp msgid "The network interface that the server listens on." msgstr "Antaramuka rangkaian yang pelayan dengar." @@ -6207,11 +6348,12 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" "Bahagian belakang pengemas gabung.\n" "Nota: Mula semula diperlukan selepas mengubah tetapan ini!\n" @@ -6294,6 +6436,10 @@ msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "" "Hingar 2D ketiga daripada empat yang mentakrifkan ketinggian bukit/gunung." +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -6350,14 +6496,15 @@ msgstr "Kepekaan skrin sentuh" msgid "Touchscreen sensitivity multiplier." msgstr "Pendarab kepekaan skrin sentuh." -#: src/settings_translation_file.cpp -msgid "Touchscreen threshold" -msgstr "Nilai ambang skrin sentuh" - #: src/settings_translation_file.cpp msgid "Tradeoffs for performance" msgstr "Keseimbangan untuk prestasi" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Translucent liquids" +msgstr "Cecair legap" + #: src/settings_translation_file.cpp msgid "Transparency Sorting Distance" msgstr "Jarak Pengisihan Lut Sinar" @@ -6403,8 +6550,11 @@ 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" +"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" @@ -6467,9 +6617,8 @@ msgstr "" "Gunakan penapisan anisotropik apabila melihat tekstur dari suatu sudut." #: src/settings_translation_file.cpp -#, fuzzy msgid "Use bilinear filtering when scaling textures." -msgstr "Gunakan penapisan trilinear apabila menyesuaikan tekstur." +msgstr "Gunakan penapisan bilinear apabila menyesuaikan tekstur." #: src/settings_translation_file.cpp msgid "Use crosshair for touch screen" @@ -6485,13 +6634,12 @@ msgstr "" "memilih objek." #: src/settings_translation_file.cpp -#, fuzzy 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 "" -"Gunakan pemetaan mip untuk menyesuaiturunkan tekstur. Boleh meningkatkan\n" +"Gunakan pemetaan mip apabila menyesuaikan tekstur. Boleh meningkatkan\n" "sedikit prestasi, terutamanya apabila menggunakan pek tekstur leraian " "tinggi.\n" "Penyesuaiturunan secara tepat-gama tidak disokong." @@ -6507,13 +6655,12 @@ msgstr "" "untuk jejaring klien dengan saiz lebih kecil daripada blok peta 4x4x4." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Use trilinear filtering when scaling textures.\n" "If both bilinear and trilinear filtering are enabled, trilinear filtering\n" "is applied." msgstr "" -"Gunakan penapisan trilinear apabila menyesuaiturunkan tekstur.\n" +"Gunakan penapisan trilinear apabila menyesuaikan tekstur.\n" "Sekiranya kedua-dua penapisan bilinear dan trilinear dibolehkan,\n" "maka penapisan trilinear yang akan diterapkan." @@ -6531,10 +6678,6 @@ msgstr "" msgid "User Interfaces" msgstr "Antara Muka Pengguna" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "VBO" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "Segerak Menegak" @@ -6628,6 +6771,10 @@ msgstr "Kayu bedik maya memicu butang Aux1" msgid "Volume" msgstr "Kekuatan bunyi" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Volume of all sounds.\n" @@ -6636,6 +6783,16 @@ msgstr "" "Kekuatan semua bunyi.\n" "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" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volumetric lighting" +msgstr "Pencahayaan lembut" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6943,12 +7100,18 @@ msgstr "Had cURL selari" #~ msgid "(game support required)" #~ msgstr "(sokongan permainan diperlukan)" +#~ msgid "- Address: " +#~ msgstr "- Alamat: " + #~ msgid "- Creative Mode: " #~ msgstr "- Mod Kreatif: " #~ msgid "- Damage: " #~ msgstr "- Boleh cedera: " +#~ msgid "- Port: " +#~ msgstr "- Port: " + #~ msgid "" #~ "0 = parallax occlusion with slope information (faster).\n" #~ "1 = relief mapping (slower, more accurate)." @@ -6987,6 +7150,13 @@ msgstr "Had cURL selari" #~ "Ambil perhatian bahawa medan alamat dalam menu utama mengatasi tetapan " #~ "ini." +#~ msgid "" +#~ "Adjust dpi configuration to your screen (non X11/Android only) e.g. for " +#~ "4k screens." +#~ msgstr "" +#~ "Laraskan konfigurasi DPI ke skrin anda (bukan X11/Android sahaja) cth. " +#~ "untuk skrin 4K." + #~ msgid "" #~ "Adjust the gamma encoding for the light tables. Higher numbers are " #~ "brighter.\n" @@ -7058,6 +7228,9 @@ msgstr "Had cURL selari" #~ msgid "Bits per pixel (aka color depth) in fullscreen mode." #~ msgstr "Bit per piksel (atau kedalaman warna) dalam mod skrin penuh." +#~ msgid "Block bounds shown for all blocks" +#~ msgstr "Batas blok ditunjukkan untuk semua blok" + #~ msgid "Bump Mapping" #~ msgstr "Pemetaan Bertompok" @@ -7083,6 +7256,9 @@ msgstr "Had cURL selari" #~ msgid "Center of light curve mid-boost." #~ msgstr "Titik tengah tolakan-tengah lengkung cahaya." +#~ msgid "Change Keys" +#~ msgstr "Tukar Kekunci" + #~ msgid "Change keys" #~ msgstr "Tukar kekunci" @@ -7159,6 +7335,38 @@ msgstr "Had cURL selari" #~ msgstr "" #~ "Mengawal lebar terowong, nilai lebih kecil mencipta terowong lebih lebar." +#, c-format +#~ msgid "" +#~ "Controls:\n" +#~ "- %s: move forwards\n" +#~ "- %s: move backwards\n" +#~ "- %s: move left\n" +#~ "- %s: move right\n" +#~ "- %s: jump/climb up\n" +#~ "- %s: dig/punch/use\n" +#~ "- %s: place/use\n" +#~ "- %s: sneak/climb down\n" +#~ "- %s: drop item\n" +#~ "- %s: inventory\n" +#~ "- Mouse: turn/look\n" +#~ "- Mouse wheel: select item\n" +#~ "- %s: chat\n" +#~ msgstr "" +#~ "Kawalan:\n" +#~ "- %s: bergerak ke depan\n" +#~ "- %s: bergerak ke belakang\n" +#~ "- %s: bergerak ke kiri\n" +#~ "- %s: bergerak ke kanan\n" +#~ "- %s: lompat/naik atas\n" +#~ "- %s: gali/ketuk/guna\n" +#~ "- %s: letak/guna\n" +#~ "- %s: selinap/turun bawah\n" +#~ "- %s: jatuhkan item\n" +#~ "- %s: inventori\n" +#~ "- Tetikus: pusing/lihat sekeliling\n" +#~ "- Roda tetikus: pilih item\n" +#~ "- %s: sembang\n" + #~ msgid "Creative" #~ msgstr "Kreatif" @@ -7168,6 +7376,9 @@ msgstr "Had cURL selari" #~ msgid "Crosshair color (R,G,B)." #~ msgstr "Warna bagi kursor rerambut silang (R,G,B)." +#~ msgid "DPI" +#~ msgstr "DPI" + #~ msgid "Damage" #~ msgstr "Boleh cedera" @@ -7265,6 +7476,13 @@ msgstr "Had cURL selari" #~ msgid "Enable register confirmation" #~ msgstr "Bolehkan pengesahan pendaftaran" +#~ msgid "" +#~ "Enable vertex buffer objects.\n" +#~ "This should greatly improve graphics performance." +#~ msgstr "" +#~ "Membolehkan objek penimbal bucu.\n" +#~ "Ini patut meningkatkan prestasi grafik dengan banyak." + #~ msgid "Enabled" #~ msgstr "Dibolehkan" @@ -7580,6 +7798,9 @@ msgstr "Had cURL selari" #~ msgid "Instrumentation" #~ msgstr "Instrumentasi" +#~ msgid "Invalid gamespec." +#~ msgstr "Spesifikasi permainan tidak sah." + #~ msgid "Inventory key" #~ msgstr "Kekunci inventori" @@ -8277,6 +8498,12 @@ msgstr "Had cURL selari" #~ "Membuatkan DirectX bekerja dengan LuaJIT. Lumpuhkan tetapan jika " #~ "bermasalah." +#~ msgid "Makes all liquids opaque" +#~ msgstr "Buatkan semua cecair menjadi legap" + +#~ msgid "Mapblock mesh generator's MapBlock cache size in MB" +#~ msgstr "Saiz cache BlokPeta untuk penjana jejaring blokpeta dalam unit MB" + #~ msgid "Menus" #~ msgstr "Menu" @@ -8518,15 +8745,21 @@ msgstr "Had cURL selari" #~ msgid "Simple Leaves" #~ msgstr "Daun Ringkas" +#~ msgid "" +#~ "Size of the MapBlock cache of the mesh generator. Increasing this will\n" +#~ "increase the cache hit %, reducing the data being copied from the main\n" +#~ "thread, thus reducing jitter." +#~ msgstr "" +#~ "Saiz cache blokpeta untuk penjana jejaring. Menaikkan nilai ini akan\n" +#~ "meningkatkan jumlah % hit cache, mengurangkan data yang perlu disalin\n" +#~ "daripada jalur utama, lalu mengurangkan ketaran." + #~ msgid "Smooth Lighting" #~ msgstr "Pencahayaan Lembut" #~ msgid "Smooths rotation of camera. 0 to disable." #~ msgstr "Melembutkan pemutaran kamera. Set sebagai 0 untuk melumpuhkannya." -#~ msgid "Sound" -#~ msgstr "Bunyi" - #~ msgid "Special" #~ msgstr "Istimewa" @@ -8590,6 +8823,9 @@ 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" @@ -8643,6 +8879,9 @@ msgstr "Had cURL selari" #~ "Jika ditetapkan ke 0, MSAA akan dilumpuhkan.\n" #~ "Anda perlu mulakan semula selepas mengubah pilihan ini." +#~ msgid "VBO" +#~ msgstr "VBO" + #~ msgid "Variation of hill height and lake depth on floatland smooth terrain." #~ msgstr "" #~ "Variasi ketinggian bukit dan kedalaman tasik rupa bumi lembut tanah " @@ -8747,8 +8986,14 @@ msgstr "Had cURL selari" #~ msgid "You died." #~ msgstr "Anda telah meninggal." +#~ msgid "You have no games installed." +#~ msgstr "Anda tidak memasang sebarang permainan." + #~ msgid "Z" #~ msgstr "Z" #~ msgid "needs_fallback_font" #~ msgstr "no" + +#~ msgid "ok" +#~ msgstr "ok" diff --git a/po/ms_Arab/minetest.po b/po/ms_Arab/minetest.po index cf09c6aef..1fb480365 100644 --- a/po/ms_Arab/minetest.po +++ b/po/ms_Arab/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\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" @@ -72,7 +72,8 @@ msgid "Command not available: " msgstr "ڤرينته تيدق ترسديا: " #: builtin/common/chatcommands.lua -msgid "Get help for commands" +#, fuzzy +msgid "Get help for commands (-t: output in chat)" msgstr "داڤتکن بنتوان اونتوق ڤرينته" #: builtin/common/chatcommands.lua @@ -83,13 +84,10 @@ msgstr "" "سنارايکن کسمواڽ." #: builtin/common/chatcommands.lua -msgid "[all | ]" +#, fuzzy +msgid "[all | ] [-t]" msgstr "[all | <ڤرينته>]" -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" -msgstr "OK" - #: builtin/fstk/ui.lua msgid "" msgstr "<تياد يڠ ترسديا>" @@ -106,6 +104,10 @@ msgstr "تله برلاکوڽ رالت:" msgid "Main menu" msgstr "مينو اوتام" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "OK" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "سامبوڠ سمولا" @@ -134,19 +136,26 @@ msgstr "کامي هاي مڽوکوڠ ڤروتوکول ۏرسي $1." msgid "We support protocol versions between version $1 and $2." msgstr "کامي مڽوکوڠ ڤروتوکول ۏرسي $1 هيڠݢ $2." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "”$1‟ سوده وجود. اداکه اندا ايڠين توليس ݢنتيڽ؟" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" +msgstr "رالت کتيک مماسڠ ”$1‟: $2" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." -msgstr "کبرݢنتوڠن $1 دان $2 اکن دڤاسڠکن." +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download \"$1\"" +msgstr "ݢاݢل اونتوق مموات تورون ”$1‟" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" -msgstr "$1 اوليه $2" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr "ݢاݢل مموات تورون $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "ݢاݢل اونتوق مڽاري ”$1‟ (جنيس فاٴيل تيدقدسوکوڠ اتاو ارکيب روسق)" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" @@ -154,156 +163,157 @@ msgstr "" "$1 سدڠ موات تورون⹁\n" "$2 منوڠݢو ݢيليرن" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." msgstr "$1 دموات تورون..." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "$1 ممرلوکن کبرݢنتوڠن يڠ تيدق دجومڤاٴي." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "$1 اکن دڤاسڠکن⹁ دان $2 کبرݢنتوڠن اکن دلڠکاو." - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "سموا ڤاکيج" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "سوده دڤاسڠ" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "کمبالي کمينو اوتام" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "ContentDB تيدق ترسديا اڤابيلا ماٴينتيس‌ت دکومڤيل تنڤا cURL" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "مموات تورون..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "ڤرماٴينن" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +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 "Mods" +msgstr "مودس" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "تياد ڤاکيج يڠ بوليه دأمبيل" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "تياد حاصيل" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "تياد کمس کيني" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "منوڠݢو ݢيليرن" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "ڤيک تيکستور" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "ڤاکيج $1 تيدق دجومڤاٴي." + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "ڽهڤاسڠ" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "کمس کيني" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "کمس کيني سموا [$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 دان $2 اکن دڤاسڠکن." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "$1 اوليه $2" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "$1 ممرلوکن کبرݢنتوڠن يڠ تيدق دجومڤاٴي." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "$1 اکن دڤاسڠکن⹁ دان $2 کبرݢنتوڠن اکن دلڠکاو." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "سوده دڤاسڠ" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "ڤرماٴينن اساس:" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "بطل" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "ContentDB تيدق ترسديا اڤابيلا ماٴينتيس‌ت دکومڤيل تنڤا cURL" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "کبرݢنتوڠن:" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "مموات تورون..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "رالت کتيک مماسڠ ”$1‟: $2" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download \"$1\"" -msgstr "ݢاݢل اونتوق مموات تورون ”$1‟" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "ݢاݢل مموات تورون $1" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "ݢاݢل اونتوق مڽاري ”$1‟ (جنيس فاٴيل تيدقدسوکوڠ اتاو ارکيب روسق)" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "ڤرماٴينن" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "ڤاسڠ" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "ڤاسڠ $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "ڤاسڠ کبرݢنتوڠن يڠ هيلڠ" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "ممواتکن..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "مودس" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "تياد ڤاکيج يڠ بوليه دأمبيل" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "تياد حاصيل" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "تياد کمس کيني" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "تيدق دجومڤاٴي" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "توليس ݢنتي" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "سيلا ڤريقسا دان ڤستيکن ڤرماٴينن اساس ايت بتول." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" -msgstr "منوڠݢو ݢيليرن" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" +msgstr "”$1‟ سوده وجود. اداکه اندا ايڠين توليس ݢنتيڽ؟" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "ڤيک تيکستور" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "ڤاکيج $1 تيدق دجومڤاٴي." - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "ڽهڤاسڠ" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "کمس کيني" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "کمس کيني سموا [$1]" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "ليهت معلومت لنجوت دالم ڤلاير سساوڠ" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" -msgstr "اندا ڤرلو ڤاسڠ ڤرماٴينن سبلوم اندا بوليه ڤاسڠ مودس" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" +msgstr "توليس ݢنتي" #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" @@ -451,10 +461,20 @@ msgstr "چيڤتا" msgid "Decorations" msgstr "هياسن" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." msgstr "Development Test هاڽاله اونتوق کݢوناٴن ڤمباڠون." +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "کوروڠن باوه تانه" @@ -828,10 +848,6 @@ msgstr "" msgid "Back" msgstr "کبلاکڠ" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "توکر ککونچي" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -841,7 +857,8 @@ msgstr "سيمبڠ" msgid "Clear" msgstr "ڤادم" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "کاولن" @@ -1056,6 +1073,16 @@ msgstr "ڤاسڠ سواتو ڤرماٴينن" msgid "Install games from ContentDB" msgstr "ڤاسڠکن ڤرماٴينن درڤد ContentDB" +#: builtin/mainmenu/tab_local.lua +msgid "Minetest 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 " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "بوات بارو" @@ -1090,8 +1117,9 @@ msgid "Start Game" msgstr "مولاکن ڤرماٴينن" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." -msgstr "اندا تيدق مماسڠ سبارڠ ڤرماٴينن." +#, fuzzy +msgid "You need to install a game before you can create a world." +msgstr "اندا ڤرلو ڤاسڠ ڤرماٴينن سبلوم اندا بوليه ڤاسڠ مودس" #: builtin/mainmenu/tab_online.lua #, fuzzy @@ -1177,19 +1205,11 @@ msgstr "سدڠ ممواتکن تيکستور..." msgid "Rebuilding shaders..." msgstr "سدڠ ممبينا سمولا ڤمبايڠ..." -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "رالت دالم ڤڽمبوڠن (تامت تيمڤوه؟)" - #: src/client/clientlauncher.cpp #, fuzzy msgid "Could not find or load game: " msgstr "تيدق جومڤ اتاو تيدق بوليه مواتکن ڤرماٴينن \"" -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "سڤيسيفيکاسي ڤرماٴينن تيدق صح." - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "مينو اوتام" @@ -1214,7 +1234,11 @@ msgstr "فاٴيل کات لالوان يڠ دسدياکن ݢاݢل دبوک: " msgid "Provided world path doesn't exist: " msgstr "لالوان دنيا دبري تيدق وجود: " -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "سدڠ ممواتکن ميديا..." + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp msgid "" "\n" "Check debug.txt for details." @@ -1222,18 +1246,10 @@ msgstr "" "\n" "ڤريقسا فاٴيل debug.txt اونتوق معلومت لنجوت." -#: src/client/game.cpp -msgid "- Address: " -msgstr "- علامت: " - #: src/client/game.cpp msgid "- Mode: " msgstr "- مود: " -#: src/client/game.cpp -msgid "- Port: " -msgstr "- ڤورت: " - #: src/client/game.cpp msgid "- Public: " msgstr "- عوام: " @@ -1269,10 +1285,6 @@ msgstr "ڤرݢرقن اٴوتوماتيک دبوليهکن" msgid "Block bounds hidden" msgstr "" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "" @@ -1319,6 +1331,10 @@ msgstr "سکريڤ ڤيهق کليئن دلومڤوهکن" msgid "Connecting to server..." msgstr "سدڠ مڽمبوڠ کڤد ڤلاين..." +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "رالت دالم ڤڽمبوڠن (تامت تيمڤوه؟)" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "" @@ -1327,47 +1343,14 @@ msgstr "" msgid "Continue" msgstr "تروسکن" -#: src/client/game.cpp -#, fuzzy, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" -"کاولن:\n" -"- %s: برݢرق کدڤن\n" -"- %s: برݢرق کبلاکڠ\n" -"- %s: برݢرق ککيري\n" -"- %s: برݢرق ککانن\n" -"- %s: لومڤت\\ناٴيق اتس\n" -"- %s: سلينڤ\\تورون باواه\n" -"- %s: جاتوهکن ايتم\n" -"- %s: اينۏينتوري\n" -"- تتيکوس: ڤوسيڠ\\ليهت سکليليڠ\n" -"- تتيکوس کيري: ݢالي\\کتوق\n" -"- تتيکوس کانن: لتق\\ݢونا\n" -"- رودا تتيکوس: ڤيليه ايتم\n" -"- %s: سيمبڠ\n" - #: src/client/game.cpp #, fuzzy msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1459,6 +1442,11 @@ msgstr "کابوت دلومڤوهکن" msgid "Fog enabled" msgstr "کابوت دبوليهکن" +#: src/client/game.cpp +#, fuzzy +msgid "Fog enabled by game or mod" +msgstr "زوم سدڠ دلومڤوهکن اوليه ڤرماٴينن اتاو مودس" + #: src/client/game.cpp msgid "Game info:" msgstr "معلومت ڤرماٴينن:" @@ -1479,10 +1467,6 @@ msgstr "سدڠ منتعريفکن ايتم..." msgid "KiB/s" msgstr "KiB/s" -#: src/client/game.cpp -msgid "Media..." -msgstr "سدڠ ممواتکن ميديا..." - #: src/client/game.cpp msgid "MiB/s" msgstr "MiB/s" @@ -1641,10 +1625,6 @@ msgstr "رڠک داواي دتونجوقکن" msgid "Zoom currently disabled by game or mod" msgstr "زوم سدڠ دلومڤوهکن اوليه ڤرماٴينن اتاو مودس" -#: src/client/game.cpp -msgid "ok" -msgstr "اوکي" - #: src/client/gameui.cpp #, fuzzy msgid "Chat currently disabled by game or mod" @@ -1979,6 +1959,15 @@ msgstr "ڤتا ميني دالم مود ڤرموکاٴن⹁ زوم 1x" msgid "Minimap in texture mode" msgstr "ڤتا ميني دالم مود تيکستور" +#: src/client/shader.cpp +#, fuzzy, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "ݢاݢل ممبوک لامن سساوڠ" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2170,6 +2159,19 @@ msgstr "زوم" msgid "press key" msgstr "تکن ککونچي" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +#, fuzzy +msgid "Unable to open URL" +msgstr "ݢاݢل ممبوک لامن سساوڠ" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "توکر" @@ -2203,6 +2205,7 @@ msgstr "ککواتن بوڽي: " #. 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 "ms_Arab" @@ -2410,14 +2413,6 @@ msgstr "جارق ڤڠهنترن اوبجيک اکتيف" msgid "Adds particles when digging a node." msgstr "منمبه ڤرتيکل اڤابيلا مڠݢالي نود." -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" -"لارسکن کونفيݢوراسي DPI کسکرين اندا (بوکن X11/Android سهاج) چونتوه اونتوق " -"سکرين 4K." - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2441,6 +2436,10 @@ msgstr "تمبه نام ايتم" msgid "Advanced" msgstr "تتڤن مندالم" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2502,6 +2501,17 @@ msgstr "تمبه نام ايتم کتيڤ التن." msgid "Apple trees noise" 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 "Arm inertia" msgstr "اينرسيا لڠن" @@ -2525,12 +2535,21 @@ msgid "" "clients.\n" "Small values potentially improve performance a lot, at the expense of " "visible\n" -"rendering glitches (some blocks will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +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 @@ -2596,6 +2615,10 @@ msgstr "بيوم" msgid "Biome noise" msgstr "" +#: src/settings_translation_file.cpp +msgid "Block cull optimize distance" +msgstr "" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "" @@ -2818,6 +2841,12 @@ msgstr "کابوت برورنا" msgid "Colored shadows" 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -2954,10 +2983,6 @@ msgid "" "Also controls the object crosshair color" msgstr "" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "DPI" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "" @@ -3008,6 +3033,24 @@ msgid "" "but also uses more resources." 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 " +"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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" +"بوليهکن تتڤن اونتوق ملارڠ کليئن لام درڤد مڽمبوڠ.\n" +"کليئن لام ماسيه سسواي دݢوناکن جک مريک تيدق رونتوه (کريش) اڤابيلا چوبا اونتوق " +"مڽمبوڠ کڤلاين بهارو⹁\n" +"تتاڤي مريک موڠکين تيدق ممڤو مڽوکوڠ سموا صيفت بهارو يڠ اندا سڠکاکن." + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "" @@ -3201,6 +3244,11 @@ msgstr "ممبوليهکن سموا" msgid "Enable Bloom Debug" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Debanding" +msgstr "بوليه چدرا" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3222,6 +3270,11 @@ msgid "" "filtering." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Post Processing" +msgstr "ممبوليهکن کايو بديق" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "" @@ -3264,6 +3317,11 @@ msgstr "" 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 "ممبوليهکن اينڤوت ڤڠݢونا سچارا راوق (هاڽ اونتوق ڤرچوباٴن)." + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "ممبوليهکن اينڤوت ڤڠݢونا سچارا راوق (هاڽ اونتوق ڤرچوباٴن)." @@ -3293,6 +3351,11 @@ msgstr "" "مڽمبوڠ کڤلاين بهارو⹁\n" "تتاڤي مريک موڠکين تيدق ممڤو مڽوکوڠ سموا صيفت بهارو يڠ اندا سڠکاکن." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable touchscreen" +msgstr "نيلاي امبڠ سکرين سنتوه" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3305,14 +3368,6 @@ msgstr "" "تيکستور)\n" "اڤابيلا مڽمبوڠ کڤلاين ڤرماٴينن." -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" -"ممبوليهکن اوبجيک ڤنيمبل بوچو.\n" -"اين ڤاتوت منيڠکتکن ڤريستاسي ݢرافيک دڠن باڽق." - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3352,6 +3407,19 @@ msgstr "ممبوليهکن انيماسي ايتم دالم اينۏينتوري msgid "Enables caching of facedir rotated meshes." msgstr "ممبوليهکن ڤڠاݢريݢتن ججاريڠ يڠ دڤوتر دڤکسي Y ايايت (facedir)." +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -4211,9 +4279,10 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" #: src/settings_translation_file.cpp @@ -4362,10 +4431,6 @@ msgid "" msgstr "" "بواتکن ورنا کابوت دان لاڠيت برݢنتوڠ کڤد وقتو (فجر\\ماتاهاري) دان اره ڤندڠ." -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "بواتکن سموا چچاٴير منجادي لݢڤ" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "" @@ -4414,7 +4479,9 @@ 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." +"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 @@ -4450,11 +4517,6 @@ msgstr "لڠه ماس ڤنجاناٴن ججاريڠ بلوک ڤتا" msgid "Mapblock mesh generation threads" msgstr "لڠه ماس ڤنجاناٴن ججاريڠ بلوک ڤتا" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "" -"ساٴيز کيش بلوکڤتا اونتوق ڤنجان ججاريڠ بلوکڤتا دالم اونيت ميݢاباٴيت (MB)" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "حد ماس ڽهموات بلوک ڤتا" @@ -4712,6 +4774,11 @@ msgstr "" msgid "Minimap scan height" msgstr "کتيڠݢين ايمبسن ڤتا ميني" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Minimum dig repetition interval" +msgstr "سلڠ ڤڠاولڠن کليک کانن" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "" @@ -4780,6 +4847,11 @@ msgstr "کڤيکاٴن تتيکوس" msgid "Mouse sensitivity multiplier." msgstr "ڤندارب کڤيکاٴن تتيکوس." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Movement threshold" +msgstr "نيلاي امبڠ سکرين سنتوه" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "" @@ -4897,10 +4969,6 @@ msgstr "" msgid "Occlusion Culling" msgstr "" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "چچاٴير لݢڤ" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -4915,6 +4983,10 @@ msgstr "" "بوک مينو جيدا اڤابيلا فوکوس تتيڠکڤ هيلڠ.\n" "تيدق جيدا جيک فورمسڤيک دبوک." +#: src/settings_translation_file.cpp +msgid "OpenGL debug" +msgstr "" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "" @@ -5055,6 +5127,15 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Protocol version minimum" +msgstr "ۏرسي ڤروتوکول تيدق سراسي. " + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -5072,6 +5153,10 @@ msgstr "" msgid "Random input" msgstr "اينڤوت راوق" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "ميسيج سيمبڠ ترکيني" @@ -5272,8 +5357,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5396,7 +5481,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" @@ -5433,6 +5518,10 @@ msgid "" "Bright colors will bleed over the neighboring objects." 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 #, fuzzy msgid "Set to true to enable waving leaves." @@ -5478,11 +5567,11 @@ msgid "Shaders" msgstr "ڤمبايڠ" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" "ڤمبايڠ ممبوليهکن کسن ۏيسوال مندالم دان بوليه منيڠکتکن\n" "ڤريستاسي اونتوق سستڠه کد ۏيديو.\n" @@ -5558,16 +5647,6 @@ msgid "" "recommended." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" -"ساٴيز کيش بلوکڤتا اونتوق ڤنجان ججاريڠ. مناٴيقکن نيلاي اين\n" -"اکن منيڠکتکن جومله % هيت کيش⹁ مڠورڠکن داتا يڠ ڤرلو دسالين\n" -"درڤد جالور اوتام⹁ لالو مڠورڠکن کترن." - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "" @@ -5604,7 +5683,7 @@ msgstr "ڤنچهاياٴن لمبوت" #, fuzzy msgid "" "Smooths rotation of camera when in cinematic mode, 0 to disable. Enter " -"cinematic mode by using the key set in Change Keys." +"cinematic mode by using the key set in Controls." msgstr "" "ملمبوتکن ڤموترن کاميرا دالم مود سينماتيک. سيت سباݢاي 0 اونتوق ملومڤوهکنڽ." @@ -5629,6 +5708,14 @@ msgstr "" msgid "Soft shadow radius" 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 "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -5806,18 +5893,38 @@ msgid "" "when calling `/profiler save [format]` without format." 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 "" "The file path relative to your world path in which profiles will be saved to." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "ڤڠنل ڤستي کايو بديق يڠ دݢوناکن" #: src/settings_translation_file.cpp #, fuzzy -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "ڤنجڠ دالم ڤيکسيل اونتوق ممولاکن اينتراکسي سکرين سنتوه." #: src/settings_translation_file.cpp @@ -5834,6 +5941,15 @@ msgstr "" "نيلاي اصلڽ 1.0 (1/2 نود).\n" "ممرلوکن تتڤن چچاٴير برݢلورا دبوليهکن." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"The minimum time in seconds it takes between digging nodes when holding\n" +"the dig button." +msgstr "" +"جومله ماس دالم ساٴت دامبيل اونتوق ملاکوکن کليک کانن يڠ براولڠ اڤابيلا\n" +"ڤماٴين منکن بوتڠ تتيکوس کانن تنڤ ملڤسکنڽ." + #: src/settings_translation_file.cpp msgid "The network interface that the server listens on." msgstr "انتاراموک رڠکاين يڠ ڤلاين دڠر." @@ -5864,11 +5980,12 @@ 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" "OpenGL is the default for desktop, and OGLES2 for Android.\n" -"Shaders are supported by OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" "بهاݢين بلاکڠ ڤڠمس ݢابوڠ.\n" "نوتا: مولا سمولا دڤرلوکن سلڤس مڠوبه تتڤن اين!\n" @@ -5941,6 +6058,10 @@ msgstr "" msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "" +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -5997,15 +6118,15 @@ msgstr "کڤيکاٴن تتيکوس" msgid "Touchscreen sensitivity multiplier." msgstr "ڤندارب کڤيکاٴن تتيکوس." -#: src/settings_translation_file.cpp -#, fuzzy -msgid "Touchscreen threshold" -msgstr "نيلاي امبڠ سکرين سنتوه" - #: src/settings_translation_file.cpp msgid "Tradeoffs for performance" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Translucent liquids" +msgstr "چچاٴير لݢڤ" + #: src/settings_translation_file.cpp msgid "Transparency Sorting Distance" msgstr "" @@ -6044,7 +6165,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 "" #: src/settings_translation_file.cpp @@ -6156,10 +6279,6 @@ msgstr "" msgid "User Interfaces" msgstr "" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "VBO" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "VSync" @@ -6247,6 +6366,10 @@ msgstr "کايو بديق ماي مميچو بوتڠ aux" msgid "Volume" msgstr "کقواتن بوڽي" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Volume of all sounds.\n" @@ -6255,6 +6378,16 @@ msgstr "" "کقواتن سموا بوڽي.\n" "ممرلوکن سيستم بوڽي دبوليهکن." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volume when unfocused" +msgstr "بيڠکاي ڤر ساٴت (FPS) مکسيما اڤابيلا ڤرماٴينن دجيداکن." + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volumetric lighting" +msgstr "ڤنچهاياٴن لمبوت" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6528,12 +6661,18 @@ msgstr "" msgid "cURL parallel limit" msgstr "" +#~ msgid "- Address: " +#~ msgstr "- علامت: " + #~ msgid "- Creative Mode: " #~ msgstr "- مود کرياتيف: " #~ msgid "- Damage: " #~ msgstr "- بوليه چدرا " +#~ msgid "- Port: " +#~ msgstr "- ڤورت: " + #~ msgid "" #~ "0 = parallax occlusion with slope information (faster).\n" #~ "1 = relief mapping (slower, more accurate)." @@ -6568,6 +6707,13 @@ msgstr "" #~ "بيار کوسوڠ اونتوق ممولاکن ڤلاين ڤرماٴينن تمڤتن.\n" #~ "امبيل ڤرهاتيان بهاوا ميدن علامت دالم مينو اوتام مڠاتسي تتڤن اين." +#~ msgid "" +#~ "Adjust dpi configuration to your screen (non X11/Android only) e.g. for " +#~ "4k screens." +#~ msgstr "" +#~ "لارسکن کونفيݢوراسي DPI کسکرين اندا (بوکن X11/Android سهاج) چونتوه اونتوق " +#~ "سکرين 4K." + #~ msgid "All Settings" #~ msgstr "سموا تتڤن" @@ -6616,6 +6762,9 @@ msgstr "" #~ msgid "Camera update toggle key" #~ msgstr "ککونچي توݢول کمس کيني کاميرا" +#~ msgid "Change Keys" +#~ msgstr "توکر ککونچي" + #, fuzzy #~ msgid "Change keys" #~ msgstr "توکر ککونچي" @@ -6660,6 +6809,38 @@ msgstr "" #~ "ڤرݢرقن کدڤن برتروسن⹁ دتوݢول اوليه ککونچي أوتوڤرݢرقن.\n" #~ "تکن ککونچي أوتوڤرݢرقن لاݢي اتاو ڤرݢرقن کبلاکڠ اونتوق ملومڤوهکنڽ." +#, fuzzy, c-format +#~ msgid "" +#~ "Controls:\n" +#~ "- %s: move forwards\n" +#~ "- %s: move backwards\n" +#~ "- %s: move left\n" +#~ "- %s: move right\n" +#~ "- %s: jump/climb up\n" +#~ "- %s: dig/punch/use\n" +#~ "- %s: place/use\n" +#~ "- %s: sneak/climb down\n" +#~ "- %s: drop item\n" +#~ "- %s: inventory\n" +#~ "- Mouse: turn/look\n" +#~ "- Mouse wheel: select item\n" +#~ "- %s: chat\n" +#~ msgstr "" +#~ "کاولن:\n" +#~ "- %s: برݢرق کدڤن\n" +#~ "- %s: برݢرق کبلاکڠ\n" +#~ "- %s: برݢرق ککيري\n" +#~ "- %s: برݢرق ککانن\n" +#~ "- %s: لومڤت\\ناٴيق اتس\n" +#~ "- %s: سلينڤ\\تورون باواه\n" +#~ "- %s: جاتوهکن ايتم\n" +#~ "- %s: اينۏينتوري\n" +#~ "- تتيکوس: ڤوسيڠ\\ليهت سکليليڠ\n" +#~ "- تتيکوس کيري: ݢالي\\کتوق\n" +#~ "- تتيکوس کانن: لتق\\ݢونا\n" +#~ "- رودا تتيکوس: ڤيليه ايتم\n" +#~ "- %s: سيمبڠ\n" + #~ msgid "Creative" #~ msgstr "کرياتيف" @@ -6669,6 +6850,9 @@ msgstr "" #~ msgid "Crosshair color (R,G,B)." #~ msgstr "ورنا باݢي کورسور ررمبوت سيلڠ (R,G,B)." +#~ msgid "DPI" +#~ msgstr "DPI" + #~ msgid "Damage" #~ msgstr "بوليه چدرا" @@ -6734,6 +6918,13 @@ msgstr "" #~ msgid "Enable register confirmation" #~ msgstr "بوليهکن ڤڠصحن ڤندفترن" +#~ msgid "" +#~ "Enable vertex buffer objects.\n" +#~ "This should greatly improve graphics performance." +#~ msgstr "" +#~ "ممبوليهکن اوبجيک ڤنيمبل بوچو.\n" +#~ "اين ڤاتوت منيڠکتکن ڤريستاسي ݢرافيک دڠن باڽق." + #~ msgid "Enabled" #~ msgstr "دبوليهکن" @@ -7015,6 +7206,9 @@ msgstr "" #~ msgid "Install: file: \"$1\"" #~ msgstr "ڤاسڠ: فايل: \"$1\"" +#~ msgid "Invalid gamespec." +#~ msgstr "سڤيسيفيکاسي ڤرماٴينن تيدق صح." + #~ msgid "Inventory key" #~ msgstr "ککونچي اينۏينتوري" @@ -7690,6 +7884,13 @@ msgstr "" #~ msgid "Main" #~ msgstr "اوتام" +#~ msgid "Makes all liquids opaque" +#~ msgstr "بواتکن سموا چچاٴير منجادي لݢڤ" + +#~ msgid "Mapblock mesh generator's MapBlock cache size in MB" +#~ msgstr "" +#~ "ساٴيز کيش بلوکڤتا اونتوق ڤنجان ججاريڠ بلوکڤتا دالم اونيت ميݢاباٴيت (MB)" + #~ msgid "Menus" #~ msgstr "مينو" @@ -7887,15 +8088,21 @@ msgstr "" #~ msgid "Simple Leaves" #~ msgstr "داون ريڠکس" +#~ msgid "" +#~ "Size of the MapBlock cache of the mesh generator. Increasing this will\n" +#~ "increase the cache hit %, reducing the data being copied from the main\n" +#~ "thread, thus reducing jitter." +#~ msgstr "" +#~ "ساٴيز کيش بلوکڤتا اونتوق ڤنجان ججاريڠ. مناٴيقکن نيلاي اين\n" +#~ "اکن منيڠکتکن جومله % هيت کيش⹁ مڠورڠکن داتا يڠ ڤرلو دسالين\n" +#~ "درڤد جالور اوتام⹁ لالو مڠورڠکن کترن." + #~ msgid "Smooth Lighting" #~ msgstr "ڤنچهاياٴن لمبوت" #~ msgid "Smooths rotation of camera. 0 to disable." #~ msgstr "ملمبوتکن ڤموترن کاميرا. سيت سباݢاي 0 اونتوق ملومڤوهکنڽ." -#~ msgid "Sound" -#~ msgstr "بوڽي" - #~ msgid "Special" #~ msgstr "ايستيميوا" @@ -7962,6 +8169,9 @@ msgstr "" #~ msgid "Use bilinear filtering when scaling textures down." #~ msgstr "ݢوناکن ڤناڤيسن بيلينيار اڤابيلا مڽسوايکن تيکستور." +#~ msgid "VBO" +#~ msgstr "VBO" + #~ msgid "Vertical screen synchronization." #~ msgstr "ڤڽݢرقن منݢق سکرين." @@ -8030,8 +8240,14 @@ msgstr "" #~ msgid "You died." #~ msgstr "اندا تله منيڠݢل" +#~ msgid "You have no games installed." +#~ msgstr "اندا تيدق مماسڠ سبارڠ ڤرماٴينن." + #~ msgid "Z" #~ msgstr "Z" #~ msgid "needs_fallback_font" #~ msgstr "yes" + +#~ msgid "ok" +#~ msgstr "اوکي" diff --git a/po/nb/minetest.po b/po/nb/minetest.po index c8eed900c..508c1a9f6 100644 --- a/po/nb/minetest.po +++ b/po/nb/minetest.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: Norwegian Bokmål (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" -"PO-Revision-Date: 2023-10-22 17:18+0000\n" -"Last-Translator: ROllerozxa \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" "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.1\n" +"X-Generator: Weblate 5.5.3\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -71,7 +71,8 @@ msgid "Command not available: " msgstr "Ikke tilgjengelig kommando: " #: builtin/common/chatcommands.lua -msgid "Get help for commands" +#, fuzzy +msgid "Get help for commands (-t: output in chat)" msgstr "Få hjelp med kommandoer" #: builtin/common/chatcommands.lua @@ -82,13 +83,10 @@ msgstr "" "liste opp alt." #: builtin/common/chatcommands.lua -msgid "[all | ]" +#, fuzzy +msgid "[all | ] [-t]" msgstr "[all | ]" -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" -msgstr "OK" - #: builtin/fstk/ui.lua msgid "" msgstr "" @@ -105,6 +103,10 @@ msgstr "Det oppstod en feil:" msgid "Main menu" msgstr "Hovedmeny" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "OK" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Koble til på nytt" @@ -133,19 +135,27 @@ msgstr "Vi støtter kun protokollversjon $1." msgid "We support protocol versions between version $1 and $2." msgstr "Vi støtter protokollversjoner mellom versjon $1 og $2." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "«$1» eksisterer allerede. Ønsker du å skrive over den?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" +msgstr "Feil ved installering av \"$1\": $2" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." -msgstr "$1 og $2 pakker blir installert." +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download \"$1\"" +msgstr "Kunne ikke laste ned \"$1\"" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" -msgstr "$1 av $2" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr "Kunne ikke laste ned $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "" +"Klarte ikke å ekstrakte \"$1\" (Ikke-støttet filtype eller ødelagt pakke)" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" @@ -153,157 +163,157 @@ msgstr "" "$1 laster ned,\n" "$2 i kø" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." msgstr "$1 laster ned..." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "$1 påkrevd pakke manglet." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "$1 blir installert, and $2 pakker blir hoppet over." - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "Alle pakker" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "Allerede installert" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "Tilbake til hovedmeny" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "ContentDB er ikke tilgjengelig når Minetest kompileres uten cURL" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "Laster ned..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "Spill" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +msgstr "Installere" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp +msgid "Loading..." +msgstr "Laster inn..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Mods" +msgstr "Modder" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "Kunne ikke hente pakker" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "Ingen resultater" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "Ingen oppdateringer" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "Satt i kø" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "Teksturpakker" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "Pakken $1 ble ikke funnet." + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "Avinstallere" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "Oppdatere" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "Oppdatere Alle [$1]" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "View more information in a web browser" +msgstr "Se mer informasjon i en nettleser" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "You need to install a game before you can install a mod" +msgstr "Du må installere ett spill før du kan installere en modifikasjon" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 and $2 dependencies will be installed." +msgstr "$1 og $2 pakker blir installert." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "$1 av $2" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "$1 påkrevd pakke manglet." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "$1 blir installert, and $2 pakker blir hoppet over." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "Allerede installert" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "Grunnspill:" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "Avbryt" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "ContentDB er ikke tilgjengelig når Minetest kompileres uten cURL" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "Pakker:" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "Laster ned..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download \"$1\"" -msgstr "Kunne ikke laste ned \"$1\"" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "Kunne ikke laste ned $1" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "Installasjon: Ikke-støttet filtype eller ødelagt pakke" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "Spill" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "Installere" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "Installere $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "Installasjon mangler pakker" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "Laster inn..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "Modder" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "Kunne ikke hente pakker" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "Ingen resultater" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "Ingen oppdateringer" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "Ikke funnet" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "Overskriv" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "Vennligst sjekk at grunnspillet er riktig." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" -msgstr "Satt i kø" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" +msgstr "«$1» eksisterer allerede. Ønsker du å skrive over den?" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "Teksturpakker" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "Avinstallere" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "Oppdatere" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "Oppdatere Alle [$1]" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "Se mer informasjon i nettleseren" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" -msgstr "" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" +msgstr "Overskriv" #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" @@ -311,20 +321,20 @@ msgstr "$1 (Aktivert)" #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 mods" -msgstr "$1 mods" +msgstr "$1 modifikasjoner" #: builtin/mainmenu/content/pkgmgr.lua msgid "Failed to install $1 to $2" msgstr "Kunne ikke installere $1 til $2" #: builtin/mainmenu/content/pkgmgr.lua -#, fuzzy msgid "Install: Unable to find suitable folder name for $1" -msgstr "Install Mod: Kan ikke finne passende mappenavn for modpack $1" +msgstr "" +"Installering: Kan ikke finne passende mappenavn for modifikasjonspakke $1" #: builtin/mainmenu/content/pkgmgr.lua msgid "Unable to find a valid mod, modpack, or game" -msgstr "Kan ikke finne en gyldig mod, modpakke eller spill" +msgstr "Kan ikke finne en gyldig modifikasjon, modifikasjonspakke eller spill" #: builtin/mainmenu/content/pkgmgr.lua msgid "Unable to install a $1 as a $2" @@ -336,11 +346,11 @@ msgstr "Kan ikke installere en $1 som en teksturpakke" #: builtin/mainmenu/dlg_config_world.lua msgid "(Enabled, has error)" -msgstr "" +msgstr "(Aktivert, har feil)" #: builtin/mainmenu/dlg_config_world.lua msgid "(Unsatisfied)" -msgstr "" +msgstr "(Ufornøyd)" #: builtin/mainmenu/dlg_config_world.lua msgid "Disable all" @@ -348,7 +358,7 @@ msgstr "Deaktivere alle" #: builtin/mainmenu/dlg_config_world.lua msgid "Disable modpack" -msgstr "Deaktiver modpakke" +msgstr "Deaktiver modifikasjonspakke" #: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" @@ -356,15 +366,15 @@ msgstr "Aktiver alle" #: builtin/mainmenu/dlg_config_world.lua msgid "Enable modpack" -msgstr "Aktiver modpakke" +msgstr "Aktiver modifikasjonspakke" #: 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 "" -"Kunne ikke aktivere modden \"$1\" inneholder ugyldige tegn. Kun tegnene [a-" -"z0-9_] er tillatt." +"Feilet til å aktivere modifikasjonen \"$1\" siden det inneholder ugyldige " +"tegn. Kun tegnene [a-z0-9_] er tillatt." #: builtin/mainmenu/dlg_config_world.lua msgid "Find More Mods" @@ -372,7 +382,7 @@ msgstr "Finn Flere Mods" #: builtin/mainmenu/dlg_config_world.lua msgid "Mod:" -msgstr "Mod:" +msgstr "Modifikasjon:" #: builtin/mainmenu/dlg_config_world.lua msgid "No (optional) dependencies" @@ -380,24 +390,23 @@ msgstr "Ingen (valgfrie) pakker" #: builtin/mainmenu/dlg_config_world.lua msgid "No game description provided." -msgstr "Mangler spillbeskrivelse." +msgstr "Ingen spillbeskrivelse oppgitt." #: builtin/mainmenu/dlg_config_world.lua -#, fuzzy msgid "No hard dependencies" -msgstr "Krever ingen andre modder" +msgstr "Krever ingen andre avhengigheter" #: builtin/mainmenu/dlg_config_world.lua msgid "No modpack description provided." -msgstr "Ingen modpakke-beskrivelse tilgjengelig." +msgstr "Ingen modifikasjonspakke-beskrivelse tilgjengelig." #: builtin/mainmenu/dlg_config_world.lua msgid "No optional dependencies" -msgstr "Ingen valgfrie pakker" +msgstr "Ingen valgfrie avhengigheter" #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Optional dependencies:" -msgstr "Valgfrie behov:" +msgstr "Valgfrie avhengigheter:" #: builtin/mainmenu/dlg_config_world.lua #: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua @@ -453,9 +462,19 @@ msgstr "Opprett" msgid "Decorations" msgstr "Dekorasjoner" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." -msgstr "Utviklingstesten er tiltenkt utviklere." +msgstr "Utviklingstesten er tiltenkt for utviklere." + +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" @@ -491,7 +510,7 @@ msgstr "Øker fuktigheten rundt elver" #: builtin/mainmenu/dlg_create_world.lua msgid "Install another game" -msgstr "" +msgstr "Last et annet spill" #: builtin/mainmenu/dlg_create_world.lua msgid "Lakes" @@ -499,23 +518,23 @@ msgstr "Innsjøer" #: builtin/mainmenu/dlg_create_world.lua msgid "Low humidity and high heat causes shallow or dry rivers" -msgstr "Lav fuktighet og høy varme fører til små eller tørre elver" +msgstr "Lav fuktighet og høy varme fører til grunne eller tørre elver" #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Mapgen" -msgstr "Mapgen" +msgstr "Kartgenerasjon" #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Mapgen flags" -msgstr "Mapgen-flagg" +msgstr "Kartgenerasjon-flagg" #: builtin/mainmenu/dlg_create_world.lua msgid "Mapgen-specific flags" -msgstr "Mapgen-spesifikke flagg" +msgstr "Kartgenerasjon-spesifikke flagg" #: builtin/mainmenu/dlg_create_world.lua msgid "Mountains" -msgstr "Fjell" +msgstr "Fjeller" #: builtin/mainmenu/dlg_create_world.lua msgid "Mud flow" @@ -552,7 +571,7 @@ msgstr "Frø" #: builtin/mainmenu/dlg_create_world.lua msgid "Smooth transition between biomes" -msgstr "Glatt overgang mellom biotoper" +msgstr "Jevn overgang mellom biotoper" #: builtin/mainmenu/dlg_create_world.lua msgid "" @@ -580,7 +599,7 @@ msgstr "Temperert, Ørken, Jungel, Tundra, Taiga" #: builtin/mainmenu/dlg_create_world.lua msgid "Terrain surface erosion" -msgstr "Terrengoverflate Erosjon" +msgstr "Terrengoverflate erosjon" #: builtin/mainmenu/dlg_create_world.lua msgid "Trees and jungle grass" @@ -625,11 +644,11 @@ msgstr "Bekreft passord" #: builtin/mainmenu/dlg_register.lua msgid "Joining $1" -msgstr "" +msgstr "Blir med $1" #: builtin/mainmenu/dlg_register.lua msgid "Missing name" -msgstr "" +msgstr "Mangler navn" #: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua #: builtin/mainmenu/tab_online.lua @@ -651,7 +670,7 @@ msgstr "Registrer" #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "Dismiss" -msgstr "" +msgstr "Avvis" #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "" @@ -659,20 +678,25 @@ msgid "" "\"Minetest Game\". Since Minetest 5.8.0, Minetest ships without a default " "game." msgstr "" +"I lang tid ble Minetest-spillmotoren levert med et standardspill kalt " +"\"Minetest Game\". Siden Minetest 5.8.0, leveres Minetest uten et " +"standardspill." #: 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 "" +"Hvis du vil fortsette å spille i Minetest Game-verdenene dine, må du " +"installere Minetest-spillet på nytt." #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "Minetest Game is no longer installed by default" -msgstr "" +msgstr "Minetest Game er ikke lenger installert på forhånd" #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "Reinstall Minetest Game" -msgstr "" +msgstr "Reinstaller Minetest Game" #: builtin/mainmenu/dlg_rename_modpack.lua msgid "Accept" @@ -692,7 +716,7 @@ msgstr "" #: builtin/mainmenu/dlg_version_info.lua msgid "A new $1 version is available" -msgstr "" +msgstr "En ny $1 versjon er tilgjengelig" #: builtin/mainmenu/dlg_version_info.lua msgid "" @@ -701,18 +725,22 @@ msgid "" "Visit $3 to find out how to get the newest version and stay up to date with " "features and bugfixes." msgstr "" +"Installert versjon: $1\n" +"Ny versjon: $2\n" +"Besøk $3 for å finne ut hvordan du får den nyeste versjonen og holder deg " +"oppdatert med funksjoner og feilrettinger." #: builtin/mainmenu/dlg_version_info.lua msgid "Later" -msgstr "" +msgstr "Senere" #: builtin/mainmenu/dlg_version_info.lua msgid "Never" -msgstr "" +msgstr "Aldri" #: builtin/mainmenu/dlg_version_info.lua msgid "Visit website" -msgstr "" +msgstr "Besøk nettsted" #: builtin/mainmenu/init.lua msgid "Settings" @@ -815,20 +843,16 @@ msgstr "myknet" #: builtin/mainmenu/settings/dlg_settings.lua msgid "(Use system language)" -msgstr "" +msgstr "(Bruk systemspråk)" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Accessibility" -msgstr "" +msgstr "Tilgjengelighet" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Back" msgstr "Tilbake" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "Endre taster" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -838,27 +862,26 @@ msgstr "Chatte" msgid "Clear" msgstr "Tøm" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "Kontroller" #: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp msgid "General" -msgstr "" +msgstr "Generelt" #: builtin/mainmenu/settings/dlg_settings.lua -#, fuzzy msgid "Movement" -msgstr "Rask bevegelse" +msgstr "Bevegelse" #: builtin/mainmenu/settings/dlg_settings.lua -#, fuzzy msgid "Reset setting to default" -msgstr "Gjenopprette standard" +msgstr "Tilbakestill til standard" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Reset setting to default ($1)" -msgstr "" +msgstr "Tilbakestill til standard ($1)" #: builtin/mainmenu/settings/dlg_settings.lua builtin/mainmenu/tab_online.lua msgid "Search" @@ -866,7 +889,7 @@ msgstr "Søk" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Show advanced settings" -msgstr "" +msgstr "Vis avanserte innstillinger" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Show technical names" @@ -887,11 +910,11 @@ msgstr "Innhold: Mods" #: builtin/mainmenu/settings/shadows_component.lua msgid "(The game will need to enable shadows as well)" -msgstr "" +msgstr "(Spillet må også aktivere skygger)" #: builtin/mainmenu/settings/shadows_component.lua msgid "Custom" -msgstr "" +msgstr "Tilpasset" #: builtin/mainmenu/settings/shadows_component.lua msgid "Disabled" @@ -940,7 +963,7 @@ msgstr "Kjerneutviklere" #: builtin/mainmenu/tab_about.lua msgid "Core Team" -msgstr "" +msgstr "Kjerneteam" #: builtin/mainmenu/tab_about.lua msgid "Irrlicht device:" @@ -1009,9 +1032,8 @@ msgid "Rename" msgstr "Gi nytt navn" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Update available?" -msgstr "" +msgstr "Oppdatering tilgjengelig?" #: builtin/mainmenu/tab_content.lua msgid "Use Texture Pack" @@ -1049,6 +1071,17 @@ msgstr "Installere et spill" msgid "Install games from ContentDB" msgstr "Installer spill fra ContentDB" +#: builtin/mainmenu/tab_local.lua +#, fuzzy +msgid "Minetest doesn't come with a game by default." +msgstr "Minetest Game er ikke lenger installert på forhånd" + +#: builtin/mainmenu/tab_local.lua +msgid "" +"Minetest is a game-creation platform that allows you to play many different " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "Ny" @@ -1082,8 +1115,9 @@ msgid "Start Game" msgstr "Start spill" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." -msgstr "Du har ingen spill installert." +#, fuzzy +msgid "You need to install a game before you can create a world." +msgstr "Du må installere ett spill før du kan installere en modifikasjon" #: builtin/mainmenu/tab_online.lua msgid "Address" @@ -1112,11 +1146,11 @@ msgstr "Ta del i spill" #: builtin/mainmenu/tab_online.lua msgid "Login" -msgstr "" +msgstr "Logg på" #: builtin/mainmenu/tab_online.lua msgid "Ping" -msgstr "Latens" +msgstr "Forsinkelse" #: builtin/mainmenu/tab_online.lua msgid "Public Servers" @@ -1162,18 +1196,10 @@ msgstr "Laster inn teksturer..." msgid "Rebuilding shaders..." msgstr "Gjenoppbygger shaders..." -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "Tilkoblingsfeil (tidsavbrudd?)" - #: src/client/clientlauncher.cpp msgid "Could not find or load game: " msgstr "Kunne ikke finne eller laste inn spillet: " -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "Ugyldig spillspesifikasjon." - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "Hovedmeny" @@ -1198,7 +1224,11 @@ msgstr "Den oppgitte passordfilen kunne ikke åpnes: " msgid "Provided world path doesn't exist: " msgstr "Angitt sti til verdenen finnes ikke: " -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "Media…" + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp msgid "" "\n" "Check debug.txt for details." @@ -1206,18 +1236,10 @@ msgstr "" "\n" "Sjekk debug.txt for detaljer." -#: src/client/game.cpp -msgid "- Address: " -msgstr "- Adresse: " - #: src/client/game.cpp msgid "- Mode: " msgstr "- Modus: " -#: src/client/game.cpp -msgid "- Port: " -msgstr "- Port: " - #: src/client/game.cpp msgid "- Public: " msgstr "- Offentlig: " @@ -1252,10 +1274,6 @@ msgstr "Automatisk forover slått på" msgid "Block bounds hidden" msgstr "Block bounds gjemt" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "Block bounds vist for alle blokker" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "Block bounds vist for gjeldende blokk" @@ -1300,6 +1318,10 @@ msgstr "Skripting på klientsiden er deaktivert" msgid "Connecting to server..." msgstr "Kobler til tjener…" +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "Tilkoblingsfeil (tidsavbrudd?)" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "Tilkoblingen mislyktes av ukjent årsak" @@ -1308,47 +1330,14 @@ msgstr "Tilkoblingen mislyktes av ukjent årsak" msgid "Continue" msgstr "Fortsett" -#: src/client/game.cpp -#, fuzzy, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" -"Kontroller:\n" -"- %s: flytt forover\n" -"- %s: flytt bakover\n" -"- %s: flytt mot venstre\n" -"- %s: flytt mot høyre\n" -"- %s: hopp/klatre oppover\n" -"- %s: grav/slå\n" -"- %s: plasser/bruk\n" -"- %s: snik/klatre nedover\n" -"- %s: slipp ting\n" -"- %s: inventar\n" -"- Mus: snu/se\n" -"- Musehjul: velg ting\n" -"- %s: chat\n" - #: src/client/game.cpp #, fuzzy msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1410,35 +1399,40 @@ msgstr "Avslutt til operativsystem" #: src/client/game.cpp msgid "Fast mode disabled" -msgstr "Rask modus deaktivert" +msgstr "Hurtigmodus slått av" #: src/client/game.cpp msgid "Fast mode enabled" -msgstr "Hurtigmodus aktivert" +msgstr "Hurtigmodus slått på" #: src/client/game.cpp msgid "Fast mode enabled (note: no 'fast' privilege)" -msgstr "Hurtigmodus aktivert (merk: ingen \"rask\"-rettigheter)" +msgstr "Hurtigmodus slått på (merk: ingen «hurtig»-rettigheter)" #: src/client/game.cpp msgid "Fly mode disabled" -msgstr "Flymodus deaktivert" +msgstr "Flymodus slått av" #: src/client/game.cpp msgid "Fly mode enabled" -msgstr "Flymodus aktivert" +msgstr "Flymodus slått på" #: src/client/game.cpp msgid "Fly mode enabled (note: no 'fly' privilege)" -msgstr "Flymodus aktivert (merk: ingen 'fly'-privilegium)" +msgstr "Flymodus slått på (merk: ingen 'fly'-rettigheter)" #: src/client/game.cpp msgid "Fog disabled" -msgstr "Tåke deaktivert" +msgstr "Tåke slått av" #: src/client/game.cpp msgid "Fog enabled" -msgstr "Tåke aktivert" +msgstr "Tåke slått på" + +#: src/client/game.cpp +#, fuzzy +msgid "Fog enabled by game or mod" +msgstr "Zoom er for øyeblikket deaktivert av spill eller mod" #: src/client/game.cpp msgid "Game info:" @@ -1460,10 +1454,6 @@ msgstr "Gjenstandsdefinisjoner…" msgid "KiB/s" msgstr "KiB/s" -#: src/client/game.cpp -msgid "Media..." -msgstr "Media…" - #: src/client/game.cpp msgid "MiB/s" msgstr "MiB/s" @@ -1619,10 +1609,6 @@ msgstr "Kantlinjer vises" msgid "Zoom currently disabled by game or mod" msgstr "Zoom er for øyeblikket deaktivert av spill eller mod" -#: src/client/game.cpp -msgid "ok" -msgstr "ok" - #: src/client/gameui.cpp #, fuzzy msgid "Chat currently disabled by game or mod" @@ -1868,9 +1854,8 @@ msgid "Return Key" msgstr "Return" #: src/client/keycode.cpp -#, fuzzy msgid "Right Arrow" -msgstr "Høyre Ctrl" +msgstr "Pil høyre" #: src/client/keycode.cpp msgid "Right Button" @@ -1924,7 +1909,7 @@ msgstr "Tab" #: src/client/keycode.cpp msgid "Up Arrow" -msgstr "" +msgstr "Pil opp" #: src/client/keycode.cpp msgid "X Button 1" @@ -1957,6 +1942,15 @@ msgstr "" msgid "Minimap in texture mode" msgstr "" +#: src/client/shader.cpp +#, fuzzy, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "Klarte ikke laste ned $1" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -1975,9 +1969,8 @@ msgid "" msgstr "" #: src/content/mod_configuration.cpp -#, fuzzy msgid "Some mods have unsatisfied dependencies:" -msgstr "Krever ingen andre modder" +msgstr "Noen modder har utilfredstilte avhengigheter:" #: src/gui/guiChatConsole.cpp #, fuzzy @@ -1986,7 +1979,7 @@ msgstr "Klarte ikke laste ned $1" #: src/gui/guiChatConsole.cpp msgid "Opening webpage" -msgstr "" +msgstr "Åpner nettside" #: src/gui/guiFormSpecMenu.cpp msgid "Proceed" @@ -2071,7 +2064,7 @@ msgstr "Tast allerede i bruk" #: src/gui/guiKeyChangeMenu.cpp msgid "Keybindings." -msgstr "" +msgstr "Tastebindinger." #: src/gui/guiKeyChangeMenu.cpp msgid "Left" @@ -2149,6 +2142,19 @@ msgstr "Forstørrelse" msgid "press key" msgstr "trykk tast" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +#, fuzzy +msgid "Unable to open URL" +msgstr "Klarte ikke laste ned $1" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "Endre" @@ -2182,6 +2188,7 @@ msgstr "Lydstyrke: %d%%" #. 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 "nb" @@ -2189,11 +2196,12 @@ msgstr "nb" msgid "" "Name is not registered. To create an account on this server, click 'Register'" msgstr "" +"Navnet er ikke registrert. For å lage en konto på denne tjeneren, klikk " +"'Registrer'" #: src/network/clientpackethandler.cpp -#, fuzzy msgid "Name is taken. Please choose another name" -msgstr "Vennligst velg et navn!" +msgstr "Navnet er tatt. Vennligst velg et annet navn" #: src/server.cpp #, c-format @@ -2270,7 +2278,7 @@ msgstr "2D-støytall som plasserer elvedaler og elveleier." #: src/settings_translation_file.cpp msgid "3D" -msgstr "" +msgstr "3D" #: src/settings_translation_file.cpp msgid "3D clouds" @@ -2402,14 +2410,6 @@ msgstr "Område for sending av aktive objekt" msgid "Adds particles when digging a node." msgstr "Legger på partikler når man graver ut en blokk." -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" -"Justér skjermens DPI-innstilling (ikke for X11/kun Android), f. eks. for 4k-" -"skjermer." - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2425,14 +2425,17 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Admin name" -msgstr "Legg til elementnavn" +msgstr "Administratornavn" #: src/settings_translation_file.cpp msgid "Advanced" msgstr "Avansert" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2448,9 +2451,8 @@ msgstr "" "belysning - det har lite å si for naturlig nattelys." #: src/settings_translation_file.cpp -#, fuzzy msgid "Always fly fast" -msgstr "Alltid flymodus og rask forflytning" +msgstr "Alltid fly raskt" #: src/settings_translation_file.cpp msgid "Ambient occlusion gamma" @@ -2473,14 +2475,12 @@ msgid "Announce to this serverlist." msgstr "Offentliggjør for denne serverlisten." #: src/settings_translation_file.cpp -#, fuzzy msgid "Anti-aliasing scale" -msgstr "Kantutjevning:" +msgstr "Kantutgjevningsskala" #: src/settings_translation_file.cpp -#, fuzzy msgid "Antialiasing method" -msgstr "Kantutjevning:" +msgstr "Kantutjevningsmetode" #: src/settings_translation_file.cpp msgid "Append item name" @@ -2494,6 +2494,17 @@ msgstr "Legg elementnavn til infoboble." msgid "Apple trees noise" msgstr "Støytall for epletrær" +#: 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 "Arm inertia" msgstr "Treghet i armer" @@ -2511,18 +2522,37 @@ msgid "Ask to reconnect after crash" msgstr "Spør om å koble til igjen etter krasj" #: src/settings_translation_file.cpp +#, fuzzy 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 will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +msgstr "" +"På denne avstanden vil serveren utføre en kraftig optimalisering\n" +"av hvilke blokker som sendes til klienten.\n" +"En lav verdi kan potensielt føre til en kraftig forbedring i ytelsen, \n" +"på bekostning av synlige gjengivelsesfeil (det kan skje at blokker ikke\n" +"gjengis under vann og i huler, tidvis heller ikke på land).\n" +"Angi denne verdien til høyere enn max_block_send_distance\n" +"for å slå av denne optimaliseringen.\n" +"Målenheten er «mapblocks» (en enhet på 16x16 blokker)." + +#: src/settings_translation_file.cpp +#, fuzzy +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 "" "På denne avstanden vil serveren utføre en kraftig optimalisering\n" "av hvilke blokker som sendes til klienten.\n" @@ -2535,7 +2565,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Audio" -msgstr "" +msgstr "Audio" #: src/settings_translation_file.cpp msgid "Automatically jump up single-node obstacles." @@ -2596,6 +2626,11 @@ msgstr "Biomer" msgid "Biome noise" msgstr "Biotoplyd" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Block cull optimize distance" +msgstr "Avstand for optimalizering av mapblocksending" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "Avstand for optimalizering av mapblocksending" @@ -2760,6 +2795,8 @@ msgid "" "Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " "output." msgstr "" +"Klikkbare nettkoblinger (midtklikk eller Ctrl+venstreklikk) aktivert i " +"tekstpratkonsollens utdata." #: src/settings_translation_file.cpp msgid "Client" @@ -2821,6 +2858,12 @@ msgstr "Farget tåke" msgid "Colored shadows" msgstr "Farget tåke" +#: 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -2969,10 +3012,6 @@ msgid "" "Also controls the object crosshair color" msgstr "" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "DPI (skjermoppløsning)" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "Størrelsesterskel for feilsøkingsloggfil" @@ -3023,6 +3062,19 @@ msgid "" "but also uses more resources." 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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "Definerer område der trær har epler." @@ -3211,6 +3263,11 @@ msgstr "Aktiver alle" msgid "Enable Bloom Debug" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Debanding" +msgstr "Aktiver skade" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3230,6 +3287,11 @@ msgid "" "filtering." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Post Processing" +msgstr "Bruk joystick" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "" @@ -3272,6 +3334,10 @@ msgstr "" msgid "Enable mouse wheel (scroll) for item selection in hotbar." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable random mod loading (mainly used for testing)." +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3295,6 +3361,11 @@ msgid "" "expecting." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable touchscreen" +msgstr "Strandlydsterskel" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3303,12 +3374,6 @@ msgid "" "when connecting to the server." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3338,6 +3403,19 @@ msgstr "" msgid "Enables caching of facedir rotated meshes." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -3428,9 +3506,8 @@ msgid "Filmic tone mapping" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Filtering and Antialiasing" -msgstr "Kantutjevning:" +msgstr "Filtrering og kantutjevning" #: src/settings_translation_file.cpp msgid "First of 4 2D noises that together define hill/mountain range height." @@ -3699,9 +3776,8 @@ msgid "HUD" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "HUD scaling" -msgstr "HUD vist" +msgstr "HUD skalering" #: src/settings_translation_file.cpp msgid "" @@ -3814,11 +3890,12 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "How much you are slowed down when moving inside a liquid.\n" "Decrease this to increase liquid resistance to movement." -msgstr "Reduksjon av denne verdien øker bevegelsesmotstanden i væsker." +msgstr "" +"Hvor mye du bremses når du beveger deg gjennom væsker.\n" +"Reduksjon av denne verdien øker bevegelsesmotstanden i væsker." #: src/settings_translation_file.cpp msgid "How wide to make rivers." @@ -4109,7 +4186,7 @@ msgstr "Hoppehastighet" #: src/settings_translation_file.cpp msgid "Keyboard and Mouse" -msgstr "" +msgstr "Tastatur og mus" #: src/settings_translation_file.cpp msgid "Kick players who sent more than X messages per 10 seconds." @@ -4161,15 +4238,15 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Length of liquid waves." -msgstr "Bølgende blader" +msgstr "Lengden på flytende bølger." #: src/settings_translation_file.cpp msgid "" @@ -4313,10 +4390,6 @@ msgid "" "Make fog and sky colors depend on daytime (dawn/sunset) and view direction." msgstr "" -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "" @@ -4365,7 +4438,9 @@ 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." +"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 @@ -4400,10 +4475,6 @@ msgstr "" msgid "Mapblock mesh generation threads" msgstr "" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "" @@ -4578,7 +4649,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Maximum number of players that can be connected simultaneously." -msgstr "" +msgstr "Maksimalt antall spillere som kan kobles til samtidig." #: src/settings_translation_file.cpp msgid "Maximum number of recent chat messages to show" @@ -4655,6 +4726,10 @@ msgstr "" msgid "Minimap scan height" msgstr "" +#: src/settings_translation_file.cpp +msgid "Minimum dig repetition interval" +msgstr "" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "" @@ -4725,6 +4800,11 @@ msgstr "Pekerfølsomhet" msgid "Mouse sensitivity multiplier." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Movement threshold" +msgstr "Grotteterskel" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "" @@ -4837,10 +4917,6 @@ msgstr "" msgid "Occlusion Culling" msgstr "Ikke-synlige blokker blir ikke sendt videre av serveren" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -4853,6 +4929,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "OpenGL debug" +msgstr "" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "" @@ -4963,6 +5043,15 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Protocol version minimum" +msgstr "Avvikende protokollversjon. " + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -4978,6 +5067,10 @@ msgstr "" msgid "Random input" msgstr "" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "" @@ -5111,9 +5204,8 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Screen" -msgstr "Skjerm:" +msgstr "Skjerm" #: src/settings_translation_file.cpp msgid "Screen height" @@ -5169,8 +5261,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5312,8 +5404,9 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" "Angi språk. La stå tom for å bruke operativsystemets språk.\n" @@ -5352,6 +5445,10 @@ msgid "" "Bright colors will bleed over the neighboring objects." 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 #, fuzzy msgid "Set to true to enable waving leaves." @@ -5400,8 +5497,7 @@ msgstr "Shaders" msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" #: src/settings_translation_file.cpp @@ -5475,13 +5571,6 @@ msgid "" "recommended." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "" @@ -5517,7 +5606,7 @@ 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 Change Keys." +"cinematic mode by using the key set in Controls." msgstr "" #: src/settings_translation_file.cpp @@ -5540,6 +5629,15 @@ msgstr "" msgid "Soft shadow radius" msgstr "Skriftskygge" +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "Lyd" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sound Extensions Blacklist" +msgstr "ContentDBs svarteliste" + #: src/settings_translation_file.cpp msgid "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -5706,17 +5804,37 @@ msgid "" "when calling `/profiler save [format]` without format." 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 "" "The file path relative to your world path in which profiles will be saved to." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "" #: src/settings_translation_file.cpp -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" #: src/settings_translation_file.cpp @@ -5733,6 +5851,12 @@ msgstr "" "Forvalgt verdi er 1,0 (1/2 blokk).\n" "Krever at væskebølger er påslått." +#: 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 "The network interface that the server listens on." msgstr "" @@ -5759,7 +5883,7 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" #: src/settings_translation_file.cpp @@ -5816,6 +5940,10 @@ msgstr "" msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "" +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -5861,19 +5989,18 @@ msgid "Touchscreen sensitivity" msgstr "Pekerfølsomhet" #: src/settings_translation_file.cpp -#, fuzzy msgid "Touchscreen sensitivity multiplier." -msgstr "Pekerfølsomhet" - -#: src/settings_translation_file.cpp -#, fuzzy -msgid "Touchscreen threshold" -msgstr "Strandlydsterskel" +msgstr "Berøringsskjermfølsomhetsfaktor." #: src/settings_translation_file.cpp msgid "Tradeoffs for performance" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Translucent liquids" +msgstr "Bølgende blader" + #: src/settings_translation_file.cpp msgid "Transparency Sorting Distance" msgstr "" @@ -5912,7 +6039,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 "" #: src/settings_translation_file.cpp @@ -6015,10 +6144,6 @@ msgstr "" msgid "User Interfaces" msgstr "" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "VSync" @@ -6105,6 +6230,10 @@ msgstr "" msgid "Volume" msgstr "Volum" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Volume of all sounds.\n" @@ -6113,6 +6242,16 @@ msgstr "" "Volum på all lyd. \n" "Krever påslått lydsystem." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volume when unfocused" +msgstr "Maks FPS når spillet ikke har fokus eller er pauset" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volumetric lighting" +msgstr "Knutepunktsframheving" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6361,12 +6500,18 @@ msgstr "cURL-tidsgrense" msgid "cURL parallel limit" msgstr "Maksimal parallellisering i cURL" +#~ msgid "- Address: " +#~ msgstr "- Adresse: " + #~ msgid "- Creative Mode: " #~ msgstr "- Kreativ modus: " #~ msgid "- Damage: " #~ msgstr "- Skade: " +#~ msgid "- Port: " +#~ msgstr "- Port: " + #~ msgid "2x" #~ msgstr "2x" @@ -6395,6 +6540,13 @@ msgstr "Maksimal parallellisering i cURL" #~ "Vær klar over at adressen i feltet i hovedmenyen overkjører denne " #~ "innstillingen." +#~ msgid "" +#~ "Adjust dpi configuration to your screen (non X11/Android only) e.g. for " +#~ "4k screens." +#~ msgstr "" +#~ "Justér skjermens DPI-innstilling (ikke for X11/kun Android), f. eks. for " +#~ "4k-skjermer." + #~ msgid "All Settings" #~ msgstr "Alle innstillinger" @@ -6428,6 +6580,9 @@ msgstr "Maksimal parallellisering i cURL" #~ msgid "Bits per pixel (aka color depth) in fullscreen mode." #~ msgstr "Biter per piksel (dvs. fargedybde) i fullskjermsmodus." +#~ msgid "Block bounds shown for all blocks" +#~ msgstr "Block bounds vist for alle blokker" + #~ msgid "Bump Mapping" #~ msgstr "Teksturtilføyning" @@ -6449,6 +6604,9 @@ msgstr "Maksimal parallellisering i cURL" #~ msgid "Camera update toggle key" #~ msgstr "Av/på-tast for visningsoppdatning" +#~ msgid "Change Keys" +#~ msgstr "Endre taster" + #~ msgid "Change keys" #~ msgstr "Endre taster" @@ -6511,6 +6669,38 @@ msgstr "Maksimal parallellisering i cURL" #~ msgid "Controls sinking speed in liquid." #~ msgstr "Bestemmer synkehastigheten i væsker." +#, fuzzy, c-format +#~ msgid "" +#~ "Controls:\n" +#~ "- %s: move forwards\n" +#~ "- %s: move backwards\n" +#~ "- %s: move left\n" +#~ "- %s: move right\n" +#~ "- %s: jump/climb up\n" +#~ "- %s: dig/punch/use\n" +#~ "- %s: place/use\n" +#~ "- %s: sneak/climb down\n" +#~ "- %s: drop item\n" +#~ "- %s: inventory\n" +#~ "- Mouse: turn/look\n" +#~ "- Mouse wheel: select item\n" +#~ "- %s: chat\n" +#~ msgstr "" +#~ "Kontroller:\n" +#~ "- %s: flytt forover\n" +#~ "- %s: flytt bakover\n" +#~ "- %s: flytt mot venstre\n" +#~ "- %s: flytt mot høyre\n" +#~ "- %s: hopp/klatre oppover\n" +#~ "- %s: grav/slå\n" +#~ "- %s: plasser/bruk\n" +#~ "- %s: snik/klatre nedover\n" +#~ "- %s: slipp ting\n" +#~ "- %s: inventar\n" +#~ "- Mus: snu/se\n" +#~ "- Musehjul: velg ting\n" +#~ "- %s: chat\n" + #~ msgid "Creative" #~ msgstr "Kreativ" @@ -6520,6 +6710,9 @@ msgstr "Maksimal parallellisering i cURL" #~ msgid "Crosshair color (R,G,B)." #~ msgstr "Trådkorsfarge (R, G, B)." +#~ msgid "DPI" +#~ msgstr "DPI (skjermoppløsning)" + #~ msgid "Damage" #~ msgstr "Skade" @@ -6748,6 +6941,9 @@ msgstr "Maksimal parallellisering i cURL" #~ msgid "Instrumentation" #~ msgstr "Instrumentering" +#~ msgid "Invalid gamespec." +#~ msgstr "Ugyldig spillspesifikasjon." + #~ msgid "Inventory key" #~ msgstr "Tast for beholdning" @@ -7288,9 +7484,6 @@ msgstr "Maksimal parallellisering i cURL" #~ msgid "No Mipmap" #~ msgstr "Mangler mipmap" -#~ msgid "Node Highlighting" -#~ msgstr "Knutepunktsframheving" - #~ msgid "Node Outlining" #~ msgstr "Knutepunktsomriss" @@ -7378,9 +7571,6 @@ msgstr "Maksimal parallellisering i cURL" #~ msgid "Smooth Lighting" #~ msgstr "Jevn belysning" -#~ msgid "Sound" -#~ msgstr "Lyd" - #~ msgid "Special" #~ msgstr "Spesial" @@ -7412,6 +7602,10 @@ msgstr "Maksimal parallellisering i cURL" #~ msgid "Touch threshold (px):" #~ msgstr "Berøringsterskel: (px)" +#, fuzzy +#~ msgid "Touchscreen threshold" +#~ msgstr "Strandlydsterskel" + #~ msgid "Trilinear Filter" #~ msgstr "Tri-lineært filter" @@ -7476,8 +7670,14 @@ msgstr "Maksimal parallellisering i cURL" #~ msgid "You died." #~ msgstr "Du døde." +#~ msgid "You have no games installed." +#~ msgstr "Du har ingen spill installert." + #~ msgid "Z" #~ msgstr "Z" #~ msgid "needs_fallback_font" #~ msgstr "no" + +#~ msgid "ok" +#~ msgstr "ok" diff --git a/po/nl/minetest.po b/po/nl/minetest.po index e05f470de..b79887a17 100644 --- a/po/nl/minetest.po +++ b/po/nl/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Dutch (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" "PO-Revision-Date: 2023-10-22 17:18+0000\n" "Last-Translator: Bas Huis \n" "Language-Team: Dutch ]" +#, fuzzy +msgid "[all | ] [-t]" msgstr "[all | ]" -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" -msgstr "Oke" - #: builtin/fstk/ui.lua msgid "" msgstr "" @@ -105,6 +103,10 @@ msgstr "Er is een fout opgetreden:" msgid "Main menu" msgstr "Hoofdmenu" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "Oke" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Opnieuw verbinding maken" @@ -133,19 +135,27 @@ msgstr "Wij ondersteunen enkel protocol versie $1." msgid "We support protocol versions between version $1 and $2." msgstr "Wij ondersteunen protocol versies $1 tot en met $2." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "\"$1\" bestaat al. Wilt u het overschrijven ?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" +msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." -msgstr "Afhankelijkheden $1 en $2 zullen geïnstalleerd worden." +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "Failed to download \"$1\"" +msgstr "Installeren van mod $1 is mislukt" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" -msgstr "$1 door $2" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr "Installeren van mod $1 is mislukt" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "Installeren: Niet ondersteund bestandstype of defect archief" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" @@ -153,160 +163,159 @@ msgstr "" "$1 is aan het downloaden,\n" "$2 is ingepland" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." msgstr "$1 is aan het downloaden..." -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "All packages" +msgstr "Alle pakketten" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Back to Main Menu" +msgstr "Terug naar hoofdmenu" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "" +"ContentDB is niet beschikbaar wanneer Minetest compileert is zonder cURL" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "Downloaden..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "Spellen" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +msgstr "Installeren" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp +msgid "Loading..." +msgstr "Bezig met laden..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Mods" +msgstr "Mods" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "Er konden geen pakketten geladen worden" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "Geen resultaten" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "Geen updates" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "Ingepland" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "Textuur verzamelingen" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "Verwijder" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "Update" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "Allemaal bijwerken [$1]" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "View more information in a web browser" +msgstr "Bekijk meer informatie in een webbrowser" + +#: 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 "Afhankelijkheden $1 en $2 zullen geïnstalleerd worden." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "$1 door $2" + +#: builtin/mainmenu/content/dlg_install.lua msgid "$1 required dependencies could not be found." msgstr "$1 benodigde afhankelijkheden werden niet gevonden." -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "$1 will be installed, and $2 dependencies will be skipped." msgstr "" "$1 zal worden geïnstalleerd, en $2 afhankelijkheden worden overgeslagen." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "All packages" -msgstr "Alle pakketten" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Already installed" msgstr "Reeds geïnstalleerd" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Back to Main Menu" -msgstr "Terug naar hoofdmenu" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "Basis Spel:" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "Annuleren" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "" -"ContentDB is niet beschikbaar wanneer Minetest compileert is zonder cURL" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "Afhankelijkheden:" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "Downloaden..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to download \"$1\"" -msgstr "Installeren van mod $1 is mislukt" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "Installeren van mod $1 is mislukt" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "Installeren: Niet ondersteund bestandstype of defect archief" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "Spellen" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "Installeren" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "Installeer $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "Installeer ontbrekende afhankelijkheden" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "Bezig met laden..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "Mods" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "Er konden geen pakketten geladen worden" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "Geen resultaten" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "Geen updates" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "Niet gevonden" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "Overschrijven" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "Controleer of het basis spel correct is, aub." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" -msgstr "Ingepland" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" +msgstr "\"$1\" bestaat al. Wilt u het overschrijven ?" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "Textuur verzamelingen" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "Verwijder" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "Update" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "Allemaal bijwerken [$1]" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "Bekijk meer informatie in een webbrowser" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" -msgstr "" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" +msgstr "Overschrijven" #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" @@ -458,6 +467,10 @@ msgstr "Maken" msgid "Decorations" msgstr "Decoraties" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua #, fuzzy msgid "Development Test is meant for developers." @@ -465,6 +478,12 @@ msgstr "" "Waarschuwing: Het minimale ontwikkellaars-test-spel is bedoeld voor " "ontwikkelaars." +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "Kerkers" @@ -837,10 +856,6 @@ msgstr "" msgid "Back" msgstr "Terug" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "Toetsen aanpassen" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -850,7 +865,8 @@ msgstr "Chatten" msgid "Clear" msgstr "Wissen" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "Besturing" @@ -1066,6 +1082,16 @@ msgstr "Installeer $1" msgid "Install games from ContentDB" msgstr "Installeer spellen van ContentDB" +#: builtin/mainmenu/tab_local.lua +msgid "Minetest 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 " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "Nieuw" @@ -1099,8 +1125,8 @@ msgid "Start Game" msgstr "Start spel" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." -msgstr "Je hebt geen spellen geïnstalleerd." +msgid "You need to install a game before you can create a world." +msgstr "" #: builtin/mainmenu/tab_online.lua msgid "Address" @@ -1181,18 +1207,10 @@ msgstr "Texturen laden..." msgid "Rebuilding shaders..." msgstr "Shaders herbouwen..." -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "Fout bij verbinden (time out?)" - #: src/client/clientlauncher.cpp msgid "Could not find or load game: " msgstr "Kan het spel niet vinden of laden: " -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "Onjuiste spel-spec." - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "Hoofdmenu" @@ -1217,7 +1235,11 @@ msgstr "Opgegeven wachtwoordbestand kan niet worden geopend: " msgid "Provided world path doesn't exist: " msgstr "Het gespecificeerde wereld-pad bestaat niet: " -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "Media..." + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp msgid "" "\n" "Check debug.txt for details." @@ -1225,18 +1247,10 @@ msgstr "" "\n" "Kijk in debug.txt voor details." -#: src/client/game.cpp -msgid "- Address: " -msgstr "- Adres: " - #: src/client/game.cpp msgid "- Mode: " msgstr "- Mode(creatief/overleving): " -#: src/client/game.cpp -msgid "- Port: " -msgstr "- Poort: " - #: src/client/game.cpp msgid "- Public: " msgstr "- Openbaar: " @@ -1271,10 +1285,6 @@ msgstr "Automatisch vooruit ingeschakeld" msgid "Block bounds hidden" msgstr "Blokgrenzen verborgen" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "Blokgrenzen getoond voor alle blokken" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "Blokgrenzen getoond voor huidige blok" @@ -1320,6 +1330,10 @@ msgstr "Client-side scripting is uitgeschakeld" msgid "Connecting to server..." msgstr "Verbinding met de server wordt gemaakt..." +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "Fout bij verbinden (time out?)" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "Verbinding mislukt om onbekende reden" @@ -1328,47 +1342,14 @@ msgstr "Verbinding mislukt om onbekende reden" msgid "Continue" msgstr "Verder spelen" -#: src/client/game.cpp -#, fuzzy, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" -"Besturing: \n" -"-%s: ga vooruit \n" -"-%s: ga achteruit \n" -"-%s: ga naar links \n" -"-%s: ga naar rechts \n" -"-%s: springen / klimmen \n" -"-%s: graaf/duw\n" -"-%s: plaats/gebruik \n" -"-%s: sluip / ga naar beneden \n" -"-%s: drop item \n" -"-%s: inventaris \n" -"- Muis: draaien / kijken \n" -"- Muiswiel: item selecteren \n" -"-%s: chat\n" - #: src/client/game.cpp #, fuzzy msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1460,6 +1441,11 @@ msgstr "Mist uitgeschakeld" msgid "Fog enabled" msgstr "Mist ingeschakeld" +#: src/client/game.cpp +#, fuzzy +msgid "Fog enabled by game or mod" +msgstr "Zoom momenteel uitgeschakeld door game of mod" + #: src/client/game.cpp msgid "Game info:" msgstr "Spel info:" @@ -1480,10 +1466,6 @@ msgstr "Voorwerpdefinities..." msgid "KiB/s" msgstr "KiB/s" -#: src/client/game.cpp -msgid "Media..." -msgstr "Media..." - #: src/client/game.cpp msgid "MiB/s" msgstr "MiB/s" @@ -1641,10 +1623,6 @@ msgstr "Draadframe weergegeven" msgid "Zoom currently disabled by game or mod" msgstr "Zoom momenteel uitgeschakeld door game of mod" -#: src/client/game.cpp -msgid "ok" -msgstr "oké" - #: src/client/gameui.cpp #, fuzzy msgid "Chat currently disabled by game or mod" @@ -1979,6 +1957,15 @@ msgstr "Minimap in oppervlaktemodus, Zoom x%d" msgid "Minimap in texture mode" msgstr "Minimap textuur modus" +#: src/client/shader.cpp +#, fuzzy, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "Openen van webpagina mislukt" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2169,6 +2156,19 @@ msgstr "Zoomen" msgid "press key" msgstr "druk op toets" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +#, fuzzy +msgid "Unable to open URL" +msgstr "Openen van webpagina mislukt" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "Veranderen" @@ -2202,6 +2202,7 @@ msgstr "Geluidsvolume: %d%%" #. 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 "nl" @@ -2431,14 +2432,6 @@ msgstr "Bereik waarbinnen actieve objecten gestuurd worden" msgid "Adds particles when digging a node." msgstr "Voeg opvliegende deeltjes toe bij het graven." -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" -"Pas de dpi-configuratie aan op uw scherm (alleen niet X11 / Android), b.v. " -"voor 4k-schermen." - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2471,6 +2464,10 @@ msgstr "Voeg itemnaam toe" msgid "Advanced" msgstr "Geavanceerd" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2532,6 +2529,17 @@ msgstr "Voeg itemnaam toe aan knopinfo." msgid "Apple trees noise" msgstr "Appel boom geluid" +#: 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 "Arm inertia" msgstr "Arm traagheid" @@ -2549,18 +2557,41 @@ msgid "Ask to reconnect after crash" msgstr "verbinding herstellen na een server-crash" #: src/settings_translation_file.cpp +#, fuzzy 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 will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +msgstr "" +"Op deze afstand zal de server agressief optimaliseren naar welke blokken " +"gestuurd worden \n" +"gebruikers. \n" +"Kleine waarden kunnen de prestaties mogelijk aanzienlijk verbeteren, ten " +"koste van zichtbaar \n" +"rendering glitches (sommige blokken worden niet onder water en in grotten " +"weergegeven, \n" +"evenals soms op het land). \n" +"Als u dit instelt op een waarde die groter is dan max_block_send_distance, " +"wordt dit uitgeschakeld \n" +"optimalisatie. \n" +"Vermeld in mapblocks (16 blokken)." + +#: src/settings_translation_file.cpp +#, fuzzy +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 "" "Op deze afstand zal de server agressief optimaliseren naar welke blokken " "gestuurd worden \n" @@ -2637,6 +2668,11 @@ msgstr "Vegetaties" msgid "Biome noise" msgstr "Biome-ruis" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Block cull optimize distance" +msgstr "Blok verzend optimalisatie afstand" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "Blok verzend optimalisatie afstand" @@ -2858,6 +2894,12 @@ msgstr "Gekleurde mist" msgid "Colored shadows" msgstr "Gekleurde schaduwen" +#: 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -3027,10 +3069,6 @@ msgstr "" "Draadkruis kleur (R,G,B).\n" "Controleert ook het object draadkruis kleur" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "Scherm DPI" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "Debug logbestand drempel" @@ -3084,6 +3122,25 @@ msgstr "" "Dit simuleert zachte schaduwen d.m.v. een PCF of Poisson-schijf\n" "maar is ook gebruiksintensiever." +#: 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 " +"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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" +"Zet dit aan om verbindingen van oudere cliënten te weigeren.\n" +"Oudere cliënten zijn compatibel, in de zin dat ze niet crashen als ze " +"verbinding \n" +"maken met nieuwere servers, maar ze ondersteunen wellicht niet alle nieuwere " +"mogelijkheden." + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "Bepaalt gebieden met appels in de bomen." @@ -3280,6 +3337,11 @@ msgstr "Alles aanzetten" msgid "Enable Bloom Debug" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Debanding" +msgstr "Verwondingen inschakelen" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3306,6 +3368,11 @@ msgstr "" "Indien ingeschakeld, wordt een Poisson-schijf gebruikt om zachte schaduwen " "te genereren. In het andere geval wordt PCF-filteren toegepast." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Post Processing" +msgstr "Schakel joysticks in" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "" @@ -3351,6 +3418,11 @@ msgstr "Veilige modus voor mods aanzetten" 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 "Schakel willkeurige invoer aan (enkel voor testen)." + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "Schakel willkeurige invoer aan (enkel voor testen)." @@ -3381,6 +3453,11 @@ msgstr "" "maken met nieuwere servers, maar ze ondersteunen wellicht niet alle nieuwere " "mogelijkheden." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable touchscreen" +msgstr "Gevoeligheid van het aanraakscherm" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3393,14 +3470,6 @@ msgstr "" "Het gebruik van externe media-servers versnelt het downloaden van media\n" "(bijv. texturen) aanzienlijk bij het maken van een verbinding met een server." -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" -"Vertex-bufferobjecten inschakelen. \n" -"Dit zou de grafische prestaties aanzienlijk moeten verbeteren." - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3443,6 +3512,19 @@ msgstr "Schakelt animatie van inventaris items aan." msgid "Enables caching of facedir rotated meshes." msgstr "Schakelt caching van facedir geroteerde meshes." +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -4400,9 +4482,10 @@ msgstr "" #: src/settings_translation_file.cpp #, fuzzy msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" "Lengte van server stap, en interval waarin objecten via het netwerk\n" "ververst worden." @@ -4580,10 +4663,6 @@ msgstr "" "Mist en hemelkleur afhankelijk van tijd van de dag (zonsopkomst/ondergang) " "en kijkrichting." -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "Maak alle vloeistoffen ondoorzichtig" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "Map compressie niveau voor het bewaren op de harde schijf" @@ -4639,11 +4718,14 @@ msgid "Map generation attributes specific to Mapgen v5." msgstr "Wereldgenerator instellingen specifiek voor Mapgen 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" "When the 'snowbiomes' flag is enabled jungles are automatically enabled and\n" -"the 'jungles' flag is ignored." +"the 'jungles' flag is ignored.\n" +"The 'temples' flag disables generation of desert temples. Normal dungeons " +"will appear instead." msgstr "" "Wereldgenerator instellingen specifiek voor generator v6.\n" "De sneeuwgebieden optie, activeert de nieuwe 5 vegetaties systeem.\n" @@ -4688,10 +4770,6 @@ msgstr "Mapblock maas generatie vertraging" msgid "Mapblock mesh generation threads" msgstr "Mapblock maas generatie vertraging" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "Mapblock maas generator's MapBlock cache grootte in MB" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "Wereldblok vergeet-tijd" @@ -4973,6 +5051,11 @@ msgstr "Minimaal aantal loggegevens in de chat weergeven." msgid "Minimap scan height" msgstr "Mini-kaart scan-hoogte" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Minimum dig repetition interval" +msgstr "Plaats (Rechts-klik) herhalingsinterval" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "Minimumlimiet van willekeurig aantal grote grotten per mapchunk." @@ -5044,6 +5127,11 @@ msgstr "Muis-gevoeligheid" msgid "Mouse sensitivity multiplier." msgstr "Muis-gevoeligheidsfactor." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Movement threshold" +msgstr "Grot drempel" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "Modder ruis" @@ -5194,10 +5282,6 @@ msgstr "" msgid "Occlusion Culling" msgstr "Door server worden onzichtbare nodes niet doorgegeven" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "Ondoorzichtige vloeistoffen" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -5214,6 +5298,11 @@ msgstr "" "Pauzemenu openen als het venster focus verliest. Pauzeert niet als er\n" "een formspec geopend is." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "OpenGL debug" +msgstr "Wereldgenerator debug" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "Optionele overschrijving van de kleur van weblinks in chat." @@ -5363,6 +5452,15 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "Aandeel grote grotten die vloeistof bevatten." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Protocol version minimum" +msgstr "Protocol versie stemt niet overeen. " + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -5380,6 +5478,10 @@ msgstr "Verhoogt het terrein om rond de rivieren valleien te maken." msgid "Random input" msgstr "Willekeurige invoer" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "Recente chatberichten" @@ -5594,8 +5696,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5741,8 +5843,9 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" "Stel de taal in. De systeem-taal wordt gebruikt indien leeg.\n" @@ -5789,6 +5892,10 @@ msgid "" "Bright colors will bleed over the neighboring objects." 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 #, fuzzy msgid "Set to true to enable waving leaves." @@ -5837,11 +5944,11 @@ msgid "Shaders" msgstr "Shaders" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" "Shaders maken bijzondere visuele effecten mogelijk, en kunnen op sommige\n" "videokaarten de prestaties verbeteren.\n" @@ -5928,16 +6035,6 @@ msgstr "" "ongewijzigd \n" "aanbevolen." -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" -"Grootte van de MapBlock cache voor de maas generator. Dit verhogen vergroot\n" -"de kans op een cache hit, waardoor minder data van de main thread\n" -"wordt gekopieerd waardoor flikkeren verminderd." - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "Tilt baan hemellichaam" @@ -5974,7 +6071,7 @@ msgstr "Vloeiende verlichting" #, fuzzy msgid "" "Smooths rotation of camera when in cinematic mode, 0 to disable. Enter " -"cinematic mode by using the key set in Change Keys." +"cinematic mode by using the key set in Controls." msgstr "" "Maakt camera-rotatie vloeiender in cintematic modus. 0 om uit te zetten." @@ -5998,6 +6095,15 @@ msgstr "Sluipsnelheid, in blokken per seconde." msgid "Soft shadow radius" msgstr "Radius zachte schaduwen" +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "Geluid" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sound Extensions Blacklist" +msgstr "ContentDB optie: verborgen pakketten lijst" + #: src/settings_translation_file.cpp msgid "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -6213,6 +6319,12 @@ msgstr "" "Het standaardformaat waarin profileringsgegevens worden bewaard,\n" " als '/profiler save' wordt aangeroepen zonder expliciet formaat." +#: 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 #, fuzzy msgid "" @@ -6221,13 +6333,27 @@ msgstr "" "Het bestand pad ten opzichte van de wereldfolder waar profilerings-gegevens " "worden opgeslagen." +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "De identificatie van de stuurknuppel die u gebruikt" #: src/settings_translation_file.cpp #, fuzzy -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" "De lengte in pixels die nodig is om een touchscreeninteractie te starten." @@ -6245,6 +6371,16 @@ msgstr "" "De standaardwaarde is 1,0 (1/2 blok). \n" "Vereist dat golvende vloeistoffen zijn ingeschakeld." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"The minimum time in seconds it takes between digging nodes when holding\n" +"the dig button." +msgstr "" +"De tijd in seconden tussen herhaalde rechts-klikken als de plaats knop " +"(rechter muisknop)\n" +"ingedrukt gehouden wordt." + #: src/settings_translation_file.cpp msgid "The network interface that the server listens on." msgstr "Het netwerk-adres waar de server op verbindingen wacht." @@ -6282,7 +6418,7 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" "Back-end om mee te renderen.\n" "Een herstart is vereist om dit definitief te wijzigen.\n" @@ -6371,6 +6507,10 @@ msgstr "" "Derde van vier 2D geluiden die samen voor heuvel/bergketens hoogte " "definiëren." +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -6430,15 +6570,15 @@ msgstr "Muis-gevoeligheid" msgid "Touchscreen sensitivity multiplier." msgstr "Muis-gevoeligheidsfactor." -#: src/settings_translation_file.cpp -#, fuzzy -msgid "Touchscreen threshold" -msgstr "Gevoeligheid van het aanraakscherm" - #: src/settings_translation_file.cpp msgid "Tradeoffs for performance" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Translucent liquids" +msgstr "Ondoorzichtige vloeistoffen" + #: src/settings_translation_file.cpp msgid "Transparency Sorting Distance" msgstr "" @@ -6477,7 +6617,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 "" #: src/settings_translation_file.cpp @@ -6591,10 +6733,6 @@ msgstr "" msgid "User Interfaces" msgstr "" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "VBO" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "Vertikale synchronisatie (VSync)" @@ -6685,6 +6823,10 @@ msgstr "Virtuele joystick activeert Aux1-toets" msgid "Volume" msgstr "Geluidsniveau" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Volume of all sounds.\n" @@ -6693,6 +6835,16 @@ msgstr "" "Volume van alle geluiden.\n" "Dit vereist dat het geluidssysteem aanstaat." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volume when unfocused" +msgstr "FPS als het spel gepauzeerd of niet gefocussed is" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volumetric lighting" +msgstr "Vloeiende verlichting" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6995,12 +7147,18 @@ msgstr "cURL interactieve time-out" msgid "cURL parallel limit" msgstr "Maximaal parallellisme in cURL" +#~ msgid "- Address: " +#~ msgstr "- Adres: " + #~ msgid "- Creative Mode: " #~ msgstr "- Creatieve Modus: " #~ msgid "- Damage: " #~ msgstr "- Verwondingen: " +#~ msgid "- Port: " +#~ msgstr "- Poort: " + #~ msgid "" #~ "0 = parallax occlusion with slope information (faster).\n" #~ "1 = relief mapping (slower, more accurate)." @@ -7035,6 +7193,13 @@ msgstr "Maximaal parallellisme in cURL" #~ "Indien leeg, wordt een lokale server gestart.\n" #~ "In het hoofdmenu kan een ander adres opgegeven worden." +#~ msgid "" +#~ "Adjust dpi configuration to your screen (non X11/Android only) e.g. for " +#~ "4k screens." +#~ msgstr "" +#~ "Pas de dpi-configuratie aan op uw scherm (alleen niet X11 / Android), b." +#~ "v. voor 4k-schermen." + #, fuzzy #~ msgid "" #~ "Adjust the gamma encoding for the light tables. Higher numbers are " @@ -7076,6 +7241,9 @@ msgstr "Maximaal parallellisme in cURL" #~ msgid "Bits per pixel (aka color depth) in fullscreen mode." #~ msgstr "Aantal bits per pixel (oftewel: kleurdiepte) in full-screen modus." +#~ msgid "Block bounds shown for all blocks" +#~ msgstr "Blokgrenzen getoond voor alle blokken" + #~ msgid "Bump Mapping" #~ msgstr "Bumpmapping" @@ -7097,6 +7265,9 @@ msgstr "Maximaal parallellisme in cURL" #~ msgid "Camera update toggle key" #~ msgstr "Toets voor het aan of uit schakelen van cameraverversing" +#~ msgid "Change Keys" +#~ msgstr "Toetsen aanpassen" + #, fuzzy #~ msgid "Change keys" #~ msgstr "Toetsen aanpassen" @@ -7172,6 +7343,38 @@ msgstr "Maximaal parallellisme in cURL" #~ msgstr "" #~ "Bepaalt breedte van tunnels, een kleinere waarde maakt bredere tunnels." +#, fuzzy, c-format +#~ msgid "" +#~ "Controls:\n" +#~ "- %s: move forwards\n" +#~ "- %s: move backwards\n" +#~ "- %s: move left\n" +#~ "- %s: move right\n" +#~ "- %s: jump/climb up\n" +#~ "- %s: dig/punch/use\n" +#~ "- %s: place/use\n" +#~ "- %s: sneak/climb down\n" +#~ "- %s: drop item\n" +#~ "- %s: inventory\n" +#~ "- Mouse: turn/look\n" +#~ "- Mouse wheel: select item\n" +#~ "- %s: chat\n" +#~ msgstr "" +#~ "Besturing: \n" +#~ "-%s: ga vooruit \n" +#~ "-%s: ga achteruit \n" +#~ "-%s: ga naar links \n" +#~ "-%s: ga naar rechts \n" +#~ "-%s: springen / klimmen \n" +#~ "-%s: graaf/duw\n" +#~ "-%s: plaats/gebruik \n" +#~ "-%s: sluip / ga naar beneden \n" +#~ "-%s: drop item \n" +#~ "-%s: inventaris \n" +#~ "- Muis: draaien / kijken \n" +#~ "- Muiswiel: item selecteren \n" +#~ "-%s: chat\n" + #~ msgid "Creative" #~ msgstr "Creatief" @@ -7181,6 +7384,9 @@ msgstr "Maximaal parallellisme in cURL" #~ msgid "Crosshair color (R,G,B)." #~ msgstr "Draadkruis-kleur (R,G,B)." +#~ msgid "DPI" +#~ msgstr "Scherm DPI" + #~ msgid "Damage" #~ msgstr "Verwondingen/schade" @@ -7267,6 +7473,13 @@ msgstr "Maximaal parallellisme in cURL" #~ msgid "Enable register confirmation" #~ msgstr "Registerbevestiging inschakelen" +#~ msgid "" +#~ "Enable vertex buffer objects.\n" +#~ "This should greatly improve graphics performance." +#~ msgstr "" +#~ "Vertex-bufferobjecten inschakelen. \n" +#~ "Dit zou de grafische prestaties aanzienlijk moeten verbeteren." + #~ msgid "Enabled" #~ msgstr "Ingeschakeld" @@ -7579,6 +7792,9 @@ msgstr "Maximaal parallellisme in cURL" #~ msgid "Instrumentation" #~ msgstr "Per soort" +#~ msgid "Invalid gamespec." +#~ msgstr "Onjuiste spel-spec." + #~ msgid "Inventory key" #~ msgstr "Inventaristoets" @@ -8273,6 +8489,12 @@ msgstr "Maximaal parallellisme in cURL" #~ "Maakt dat DirectX werkt met LuaJIT. Schakel dit uit als het problemen " #~ "geeft." +#~ msgid "Makes all liquids opaque" +#~ msgstr "Maak alle vloeistoffen ondoorzichtig" + +#~ msgid "Mapblock mesh generator's MapBlock cache size in MB" +#~ msgstr "Mapblock maas generator's MapBlock cache grootte in MB" + #~ msgid "Menus" #~ msgstr "Menu's" @@ -8502,15 +8724,22 @@ msgstr "Maximaal parallellisme in cURL" #~ msgid "Simple Leaves" #~ msgstr "Eenvoudige bladeren" +#~ msgid "" +#~ "Size of the MapBlock cache of the mesh generator. Increasing this will\n" +#~ "increase the cache hit %, reducing the data being copied from the main\n" +#~ "thread, thus reducing jitter." +#~ msgstr "" +#~ "Grootte van de MapBlock cache voor de maas generator. Dit verhogen " +#~ "vergroot\n" +#~ "de kans op een cache hit, waardoor minder data van de main thread\n" +#~ "wordt gekopieerd waardoor flikkeren verminderd." + #~ msgid "Smooth Lighting" #~ msgstr "Vloeiende verlichting" #~ msgid "Smooths rotation of camera. 0 to disable." #~ msgstr "Maakt camera-rotatie vloeiender. O om uit te zetten." -#~ msgid "Sound" -#~ msgstr "Geluid" - #~ msgid "Special" #~ msgstr "Speciaal" @@ -8566,6 +8795,10 @@ msgstr "Maximaal parallellisme in cURL" #~ msgid "Touch threshold (px):" #~ msgstr "Toetsgrenswaarde (px):" +#, fuzzy +#~ msgid "Touchscreen threshold" +#~ msgstr "Gevoeligheid van het aanraakscherm" + #~ msgid "Trilinear Filter" #~ msgstr "Trilineair filteren" @@ -8612,6 +8845,9 @@ msgstr "Maximaal parallellisme in cURL" #~ "Als de waarde op 0 staat, is MSAA uitgeschakeld.\n" #~ "Een herstart is nodig om deze wijziging te laten functioneren." +#~ msgid "VBO" +#~ msgstr "VBO" + #~ msgid "Variation of hill height and lake depth on floatland smooth terrain." #~ msgstr "" #~ "Variatie van de heuvel hoogte en vijver diepte op drijvend egaal terrein." @@ -8702,8 +8938,14 @@ msgstr "Maximaal parallellisme in cURL" #~ msgid "You died." #~ msgstr "Je bent gestorven." +#~ msgid "You have no games installed." +#~ msgstr "Je hebt geen spellen geïnstalleerd." + #~ msgid "Z" #~ msgstr "Z" #~ msgid "needs_fallback_font" #~ msgstr "no" + +#~ msgid "ok" +#~ msgstr "oké" diff --git a/po/nn/minetest.po b/po/nn/minetest.po index 8b42f54ab..67d7e4f2d 100644 --- a/po/nn/minetest.po +++ b/po/nn/minetest.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: Norwegian Nynorsk (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" -"PO-Revision-Date: 2023-12-03 17:17+0000\n" -"Last-Translator: Krock \n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" +"PO-Revision-Date: 2024-02-27 22:01+0000\n" +"Last-Translator: jhh \n" "Language-Team: Norwegian Nynorsk \n" "Language: nn\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.3-dev\n" +"X-Generator: Weblate 5.5-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -71,7 +71,8 @@ msgid "Command not available: " msgstr "Kommandoen er ikkje tilgjengeleg: " #: builtin/common/chatcommands.lua -msgid "Get help for commands" +#, fuzzy +msgid "Get help for commands (-t: output in chat)" msgstr "Få hjelp med kommandoar" #: builtin/common/chatcommands.lua @@ -82,20 +83,17 @@ msgstr "" "liste opp alt." #: builtin/common/chatcommands.lua -msgid "[all | ]" +#, fuzzy +msgid "[all | ] [-t]" msgstr "[all [ ]" -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" -msgstr "OK" - #: builtin/fstk/ui.lua msgid "" msgstr "" #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" -msgstr "Ein feil oppstod i eit LUA-skript:" +msgstr "Ein feil oppstod i eit Lua-skript:" #: builtin/fstk/ui.lua msgid "An error occurred:" @@ -105,6 +103,10 @@ msgstr "Det har skjedd ein feil:" msgid "Main menu" msgstr "Hovudmeny" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "OK" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Kople til igjen" @@ -133,19 +135,27 @@ msgstr "Me støtter berre protokoll versjon $1." msgid "We support protocol versions between version $1 and $2." msgstr "Me støtter protokollversjonar mellom $1 og $2." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "«$1» eksisterer allereie. Vil du overskrive den?" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." -msgstr "$1 og $2 avhengigheiter vil verte installerte." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "Failed to download \"$1\"" +msgstr "Klarte ikkje å laste ned $1" + +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr "Klarte ikkje å laste ned $1" + +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "Installasjon: Filtypen er ikkje støtta, eller arkivet er korrupt" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" @@ -153,158 +163,158 @@ msgstr "" "$1 lastar ned,\n" "$2 i kø" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." msgstr "$1 lastar ned …" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "$1 obligatoriske avhengigheiter vart ikkje funne." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "$1 vil verte installert, og $2 avhengigheiter vil verte hoppa over." - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "Alle pakker" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "Allereie installert" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "Attende til hovudmeny" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "ContentDB er ikkje tilgjengeleg når Minetest vart kompilert utan cURL" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "Lastar ned …" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "Spel" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +msgstr "Installer" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp +msgid "Loading..." +msgstr "Laster.." + +#: builtin/mainmenu/content/dlg_contentdb.lua +#, fuzzy +msgid "Mods" +msgstr "Mods" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "Ingen pakkar kunne verte henta" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "Ingen resultat" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "Ingen oppdateringar" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "I kø" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "Teksturpakkar" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "Avinstaller" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "Oppdater" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "Oppdater alt [$1]" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "View more information in a web browser" +msgstr "Sjå meir informasjon i ein nettlesar" + +#: 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 og $2 avhengigheiter vil verte installerte." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "$1 obligatoriske avhengigheiter vart ikkje funne." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "$1 vil verte installert, og $2 avhengigheiter vil verte hoppa over." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "Allereie installert" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "Basisspel:" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "Avbryt" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "ContentDB er ikkje tilgjengeleg når Minetest vart kompilert utan cURL" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "Avhengigheiter:" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "Lastar ned …" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to download \"$1\"" -msgstr "Klarte ikkje å laste ned $1" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "Klarte ikkje å laste ned $1" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "Installasjon: Filtypen er ikkje støtta, eller arkivet er korrupt" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "Spel" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "Installer" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "Installer $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "Installer manglande avhengigheiter" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "Lastar …" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "Modifikasjonar" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "Ingen pakkar kunne verte henta" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "Ingen resultat" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "Ingen oppdateringar" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "Ikkje funnen" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "Overskriv" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "Ver venleg å sjekke at basisspelet er korrekt." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" -msgstr "I kø" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" +msgstr "«$1» eksisterer allereie. Vil du overskrive den?" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "Teksturpakkar" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "Avinstaller" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "Oppdater" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "Oppdater alt [$1]" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "Sjå meir informasjon i ein nettlesar" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" -msgstr "" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" +msgstr "Overskriv" #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" @@ -451,16 +461,26 @@ msgstr "Hòler" #: builtin/mainmenu/dlg_create_world.lua msgid "Create" -msgstr "Skap" +msgstr "Opprett" #: builtin/mainmenu/dlg_create_world.lua msgid "Decorations" msgstr "Dekorasjonar" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." msgstr "Skaparrøynet er meint for skaparar." +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "Fangehól" @@ -643,15 +663,15 @@ msgstr "Namn" #: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua #: builtin/mainmenu/tab_online.lua msgid "Password" -msgstr "Passord" +msgstr "Lykelord" #: builtin/mainmenu/dlg_register.lua msgid "Passwords do not match" -msgstr "Passorda er ikkje like" +msgstr "Lykelord samsvarer ikkje" #: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua msgid "Register" -msgstr "Lag ein konto" +msgstr "Registrer deg" #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "Dismiss" @@ -743,7 +763,7 @@ msgstr "Bla gjennom" #: builtin/mainmenu/settings/components.lua msgid "Edit" -msgstr "Endre" +msgstr "Rediger" #: builtin/mainmenu/settings/components.lua msgid "Select directory" @@ -835,10 +855,6 @@ msgstr "" msgid "Back" msgstr "Attende" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "Endre nykeler" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -848,7 +864,8 @@ msgstr "Chat" msgid "Clear" msgstr "Rydd til side" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "Styring" @@ -1055,6 +1072,16 @@ msgstr "legg inn eit spel" msgid "Install games from ContentDB" msgstr "Installer spel frå ContentDB" +#: builtin/mainmenu/tab_local.lua +msgid "Minetest 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 " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "Ny" @@ -1088,8 +1115,8 @@ msgid "Start Game" msgstr "Start spel" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." -msgstr "Du har ikkje lagt inn noko spel." +msgid "You need to install a game before you can create a world." +msgstr "" #: builtin/mainmenu/tab_online.lua msgid "Address" @@ -1118,7 +1145,7 @@ msgstr "Bli med i spel" #: builtin/mainmenu/tab_online.lua msgid "Login" -msgstr "" +msgstr "Innlogging" #: builtin/mainmenu/tab_online.lua msgid "Ping" @@ -1169,18 +1196,10 @@ msgstr "Lastar teksturar …" msgid "Rebuilding shaders..." msgstr "Gjenoppbyggjer skuggeleggjarar..." -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "Tilkoplingsfeil (Tidsavbrot?)" - #: src/client/clientlauncher.cpp msgid "Could not find or load game: " msgstr "Kunne ikkje finne eller laste spel: " -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "Ugyldig spel-spesifikasjonar." - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "Hovudmeny" @@ -1205,7 +1224,11 @@ msgstr "Greidde ikkje å opne passordfila du gav: " msgid "Provided world path doesn't exist: " msgstr "Verdsruta du gav finst ikkje: " -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "Medier..." + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp msgid "" "\n" "Check debug.txt for details." @@ -1213,18 +1236,10 @@ msgstr "" "\n" "Sjekk problemsøkjar.txt for detaljar." -#: src/client/game.cpp -msgid "- Address: " -msgstr "- Adresse: " - #: src/client/game.cpp msgid "- Mode: " msgstr "- modus: " -#: src/client/game.cpp -msgid "- Port: " -msgstr "- Port: " - #: src/client/game.cpp msgid "- Public: " msgstr "- Offentleg: " @@ -1259,10 +1274,6 @@ msgstr "Automatiske framsteg er i gang" msgid "Block bounds hidden" msgstr "" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "" @@ -1286,7 +1297,7 @@ msgstr "Zoom er for tiden deaktivert tå spelet eller ein modifikasjon" #: src/client/game.cpp msgid "Change Password" -msgstr "Byt kodeord" +msgstr "Endre lykelord" #: src/client/game.cpp msgid "Cinematic mode disabled" @@ -1308,6 +1319,10 @@ msgstr "Klient side-skildring er av" msgid "Connecting to server..." msgstr "Kopler til tenarmaskin..." +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "Tilkoplingsfeil (Tidsavbrot?)" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "Tilkoplinga feila av ein ukjent grunn" @@ -1316,47 +1331,14 @@ msgstr "Tilkoplinga feila av ein ukjent grunn" msgid "Continue" msgstr "Fortset" -#: src/client/game.cpp -#, fuzzy, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" -"Styring:\n" -"- %s: gå framover\n" -"- %s: gå bakover\n" -"- %s: gå mot venstre\n" -"- %s: gå mot høgre\n" -"- %s: hopp/klatre opp\n" -"- %s: grav/slå\n" -"- %s: plasser/nytt\n" -"- %s: snik/klatre ned\n" -"- %s: slepp ting\n" -"- %s: inventar\n" -"- Mus: snu deg/sjå\n" -"- Musehjul: vel ting\n" -"- %s: nettprat\n" - #: src/client/game.cpp #, fuzzy msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1448,6 +1430,11 @@ msgstr "Tåke er deaktivert" msgid "Fog enabled" msgstr "Tåke er aktivert" +#: src/client/game.cpp +#, fuzzy +msgid "Fog enabled by game or mod" +msgstr "Zoom er for tiden deaktivert tå spelet eller ein modifikasjon" + #: src/client/game.cpp msgid "Game info:" msgstr "Spel info:" @@ -1468,10 +1455,6 @@ msgstr "Definerér gjennstander..." msgid "KiB/s" msgstr "KiB/s" -#: src/client/game.cpp -msgid "Media..." -msgstr "Medier..." - #: src/client/game.cpp msgid "MiB/s" msgstr "MiB/s" @@ -1630,10 +1613,6 @@ msgstr "Jern-tråd-ramma er vist" msgid "Zoom currently disabled by game or mod" msgstr "Zoom er for tiden deaktivert tå spelet eller ein modifikasjon" -#: src/client/game.cpp -msgid "ok" -msgstr "ok" - #: src/client/gameui.cpp #, fuzzy msgid "Chat currently disabled by game or mod" @@ -1968,6 +1947,15 @@ msgstr "Minikart i overflatemodus, Zoom x%d" msgid "Minimap in texture mode" msgstr "Minikart i overflate modus, Zoom x1" +#: src/client/shader.cpp +#, fuzzy, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "Klarte ikkje å opne nettside" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2158,6 +2146,19 @@ msgstr "Zoom" msgid "press key" msgstr "berør knapp" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +#, fuzzy +msgid "Unable to open URL" +msgstr "Klarte ikkje å opne nettside" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "Byt" @@ -2191,6 +2192,7 @@ msgstr "Lydstyrke: %d%%" #. 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 "nn" @@ -2381,14 +2383,6 @@ msgstr "" msgid "Adds particles when digging a node." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" -"Juster dpi-konfigurasjonen for din skjem (kun system utan X11/Android), f." -"eks. for 4K-skjermar." - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2414,6 +2408,10 @@ msgstr "Verdsnamn" msgid "Advanced" msgstr "Avansert" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2469,6 +2467,17 @@ msgstr "" msgid "Apple trees noise" 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 "Arm inertia" msgstr "Armtreigheit" @@ -2492,12 +2501,21 @@ msgid "" "clients.\n" "Small values potentially improve performance a lot, at the expense of " "visible\n" -"rendering glitches (some blocks will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +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 @@ -2562,6 +2580,10 @@ msgstr "Biom" msgid "Biome noise" msgstr "" +#: src/settings_translation_file.cpp +msgid "Block cull optimize distance" +msgstr "" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "" @@ -2776,6 +2798,12 @@ msgstr "Farga tåke" msgid "Colored shadows" msgstr "Farga skuggar" +#: 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -2910,10 +2938,6 @@ msgid "" "Also controls the object crosshair color" msgstr "" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "DPI" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "" @@ -2963,6 +2987,19 @@ msgid "" "but also uses more resources." 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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "Definerer område der tre har eple." @@ -3150,6 +3187,11 @@ msgstr "Aktiver alt" msgid "Enable Bloom Debug" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Debanding" +msgstr "Aktivér skading" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3171,6 +3213,10 @@ msgid "" "filtering." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable Post Processing" +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "" @@ -3213,6 +3259,10 @@ msgstr "" msgid "Enable mouse wheel (scroll) for item selection in hotbar." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable random mod loading (mainly used for testing)." +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3236,6 +3286,11 @@ msgid "" "expecting." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable touchscreen" +msgstr "Touchskjerm" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3244,12 +3299,6 @@ msgid "" "when connecting to the server." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3279,6 +3328,19 @@ msgstr "" msgid "Enables caching of facedir rotated meshes." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -4077,9 +4139,10 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" #: src/settings_translation_file.cpp @@ -4229,10 +4292,6 @@ msgstr "" "Gjer at tåke- og himmelfargen er avhengig av tida på dagen (morgongry/" "solnedgang) og retninga ein er orientert mot." -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "" @@ -4281,7 +4340,9 @@ 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." +"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 @@ -4316,10 +4377,6 @@ msgstr "" msgid "Mapblock mesh generation threads" msgstr "" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "" @@ -4562,6 +4619,10 @@ msgstr "" msgid "Minimap scan height" msgstr "" +#: src/settings_translation_file.cpp +msgid "Minimum dig repetition interval" +msgstr "" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "" @@ -4630,6 +4691,11 @@ msgstr "" msgid "Mouse sensitivity multiplier." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Movement threshold" +msgstr "Fingerrøringsterskel (px):" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "" @@ -4740,10 +4806,6 @@ msgstr "" msgid "Occlusion Culling" msgstr "" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -4756,6 +4818,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "OpenGL debug" +msgstr "" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "" @@ -4865,6 +4931,15 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Protocol version minimum" +msgstr "Protkoll versjon bommert. " + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -4880,6 +4955,10 @@ msgstr "" msgid "Random input" msgstr "" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "" @@ -5046,9 +5125,8 @@ msgstr "" "Bruk 0 for standard kvalitet." #: src/settings_translation_file.cpp -#, fuzzy msgid "Screenshots" -msgstr "Skjermbilde" +msgstr "Skjermbilete" #: src/settings_translation_file.cpp msgid "Seabed noise" @@ -5072,8 +5150,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5198,7 +5276,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" @@ -5231,6 +5309,10 @@ msgid "" "Bright colors will bleed over the neighboring objects." 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 "Set to true to enable waving leaves." msgstr "" @@ -5270,8 +5352,7 @@ msgstr "Skuggeleggjarar" msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" #: src/settings_translation_file.cpp @@ -5341,13 +5422,6 @@ msgid "" "recommended." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "" @@ -5383,7 +5457,7 @@ 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 Change Keys." +"cinematic mode by using the key set in Controls." msgstr "" #: src/settings_translation_file.cpp @@ -5405,6 +5479,15 @@ msgstr "" msgid "Soft shadow radius" msgstr "Skyradius" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sound" +msgstr "Lyd e dempa" + +#: src/settings_translation_file.cpp +msgid "Sound Extensions Blacklist" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -5561,18 +5644,38 @@ msgid "" "when calling `/profiler save [format]` without format." 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 "" "The file path relative to your world path in which profiles will be saved to." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "" #: src/settings_translation_file.cpp #, fuzzy -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "Lengda, i pikslar, det tek før touchskjerminteraksjonen startar." #: src/settings_translation_file.cpp @@ -5583,6 +5686,12 @@ msgid "" "Default is 1.0 (1/2 node)." 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 "The network interface that the server listens on." msgstr "" @@ -5609,7 +5718,7 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" #: src/settings_translation_file.cpp @@ -5666,6 +5775,10 @@ msgstr "" msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "" +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -5713,15 +5826,15 @@ msgstr "Touchskjerm" msgid "Touchscreen sensitivity multiplier." msgstr "" -#: src/settings_translation_file.cpp -#, fuzzy -msgid "Touchscreen threshold" -msgstr "Fingerrøringsterskel (px):" - #: src/settings_translation_file.cpp msgid "Tradeoffs for performance" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Translucent liquids" +msgstr "Raslende lauv" + #: src/settings_translation_file.cpp msgid "Transparency Sorting Distance" msgstr "" @@ -5757,7 +5870,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 "" #: src/settings_translation_file.cpp @@ -5855,10 +5970,6 @@ msgstr "" msgid "User Interfaces" msgstr "Brukargrensesnitt" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "" @@ -5945,6 +6056,10 @@ msgstr "" msgid "Volume" msgstr "Volum" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Volume of all sounds.\n" @@ -5953,6 +6068,15 @@ msgstr "" "Volumet på alle lydar.\n" "Krev at lydsystemet er slått på." +#: src/settings_translation_file.cpp +msgid "Volume when unfocused" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volumetric lighting" +msgstr "Knutepunktsframheving" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6193,6 +6317,9 @@ msgstr "" msgid "cURL parallel limit" msgstr "" +#~ msgid "- Address: " +#~ msgstr "- Adresse: " + #, fuzzy #~ msgid "- Creative Mode: " #~ msgstr "- Gude løyving: " @@ -6200,6 +6327,9 @@ msgstr "" #~ msgid "- Damage: " #~ msgstr "- Skade: " +#~ msgid "- Port: " +#~ msgstr "- Port: " + #~ msgid "2x" #~ msgstr "2x" @@ -6227,6 +6357,13 @@ msgstr "" #~ "La dette vere tomt for å starte ein lokal tenar.\n" #~ "Merk at adressefeltet i hovudmenyen overkøyrer denne innstillinga." +#~ msgid "" +#~ "Adjust dpi configuration to your screen (non X11/Android only) e.g. for " +#~ "4k screens." +#~ msgstr "" +#~ "Juster dpi-konfigurasjonen for din skjem (kun system utan X11/Android), f." +#~ "eks. for 4K-skjermar." + #~ msgid "All Settings" #~ msgstr "Alle innstillingar" @@ -6251,6 +6388,9 @@ msgstr "" #~ msgid "Bump Mapping" #~ msgstr "Dunke kartlegging" +#~ msgid "Change Keys" +#~ msgstr "Endre nykeler" + #, fuzzy #~ msgid "Change keys" #~ msgstr "Endre nykeler" @@ -6279,12 +6419,47 @@ msgstr "" #~ msgid "Controls sinking speed in liquid." #~ msgstr "Kontrollerer kor raskt ting synk i væske." +#, fuzzy, c-format +#~ msgid "" +#~ "Controls:\n" +#~ "- %s: move forwards\n" +#~ "- %s: move backwards\n" +#~ "- %s: move left\n" +#~ "- %s: move right\n" +#~ "- %s: jump/climb up\n" +#~ "- %s: dig/punch/use\n" +#~ "- %s: place/use\n" +#~ "- %s: sneak/climb down\n" +#~ "- %s: drop item\n" +#~ "- %s: inventory\n" +#~ "- Mouse: turn/look\n" +#~ "- Mouse wheel: select item\n" +#~ "- %s: chat\n" +#~ msgstr "" +#~ "Styring:\n" +#~ "- %s: gå framover\n" +#~ "- %s: gå bakover\n" +#~ "- %s: gå mot venstre\n" +#~ "- %s: gå mot høgre\n" +#~ "- %s: hopp/klatre opp\n" +#~ "- %s: grav/slå\n" +#~ "- %s: plasser/nytt\n" +#~ "- %s: snik/klatre ned\n" +#~ "- %s: slepp ting\n" +#~ "- %s: inventar\n" +#~ "- Mus: snu deg/sjå\n" +#~ "- Musehjul: vel ting\n" +#~ "- %s: nettprat\n" + #~ msgid "Creative" #~ msgstr "Kreativ" #~ msgid "Credits" #~ msgstr "Medvirkende" +#~ msgid "DPI" +#~ msgstr "DPI" + #~ msgid "Damage" #~ msgstr "Skade" @@ -6350,6 +6525,9 @@ msgstr "" #~ msgid "Install: file: \"$1\"" #~ msgstr "Installer: fil: «$1»" +#~ msgid "Invalid gamespec." +#~ msgstr "Ugyldig spel-spesifikasjonar." + #~ msgid "" #~ "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" #~ msgstr "" @@ -6392,10 +6570,6 @@ msgstr "" #~ msgid "No Mipmap" #~ msgstr "Ingen Mipkart" -#, fuzzy -#~ msgid "Node Highlighting" -#~ msgstr "Knutepunktsframheving" - #, fuzzy #~ msgid "Node Outlining" #~ msgstr "Knute-utlinjing" @@ -6531,8 +6705,14 @@ msgstr "" #~ msgid "You died." #~ msgstr "Du døydde" +#~ msgid "You have no games installed." +#~ msgstr "Du har ikkje lagt inn noko spel." + #~ msgid "Z" #~ msgstr "Z" #~ msgid "needs_fallback_font" #~ msgstr "no" + +#~ msgid "ok" +#~ msgstr "ok" diff --git a/po/oc/minetest.po b/po/oc/minetest.po index 757aababb..a23e35ec2 100644 --- a/po/oc/minetest.po +++ b/po/oc/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" "PO-Revision-Date: 2023-12-03 17:17+0000\n" "Last-Translator: Krock \n" "Language-Team: Occitan ]" +#, fuzzy +msgid "[all | ] [-t]" msgstr "[all | ]" -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" -msgstr "D'accòrdi" - #: builtin/fstk/ui.lua msgid "" msgstr "" @@ -105,6 +103,10 @@ msgstr "Se presenta una error:" msgid "Main menu" msgstr "Menú principau" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "D'accòrdi" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Tornar Conectar" @@ -133,19 +135,28 @@ msgstr "Suportem mas la version $1 dau protocòl." msgid "We support protocol versions between version $1 and $2." msgstr "Suportem de versions dau protocòl entre $1 e $2." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "\"$1\" exista dejà. Voletz l'espotir?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" +msgstr "Error per installar \"$1\": $2" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." -msgstr "Las dependéncias $1 e $2 van s'installar." +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download \"$1\"" +msgstr "Error per lo descharjament de \"$1\"" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" -msgstr "$1 per $2" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr "Error per lo descharjament de $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "" +"A pas capitat de traire \"$1\" (tipe de fichèir pas supportat o archiva " +"cassada)" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" @@ -153,158 +164,157 @@ msgstr "" "$1 en descharjament,\n" "$2 en espeita" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." msgstr "Descharjament de $1..." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "Las dependéncias que fan besonh per $1 pòdon pas se trobar." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "$1 sera installat, e las dependéncias de $2 seràn ignoradas." - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "Tot los paquets" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "Dejá installat" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "Tornar au Menú Principau" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "ContentDB es pas disponible quand Minetest es compilat sens cURL" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "Descharjament..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "Juòcs" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +msgstr "Installar" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp +msgid "Loading..." +msgstr "Charjament..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Mods" +msgstr "Mòds" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "Pas gis de paquets poguèron èsser quèrre" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "Pas de resultats" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "Pas de mesas a jorn" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "En espeita" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "Pacs de textura" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "Desinstallar" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "Mesa a jorn" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "Tot metre a jorn [$1]" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "View more information in a web browser" +msgstr "Espiar mai d'informacions dins un navegador wèb" + +#: 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 "Las dependéncias $1 e $2 van s'installar." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "$1 per $2" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "Las dependéncias que fan besonh per $1 pòdon pas se trobar." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "$1 sera installat, e las dependéncias de $2 seràn ignoradas." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "Dejá installat" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "Juòc de Basa:" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "Annular" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "ContentDB es pas disponible quand Minetest es compilat sens cURL" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "Dependéncias:" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "Descharjament..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "Error per installar \"$1\": $2" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download \"$1\"" -msgstr "Error per lo descharjament de \"$1\"" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "Error per lo descharjament de $1" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "" -"A pas capitat de traire \"$1\" (tipe de fichèir pas supportat o archiva " -"cassada)" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "Juòcs" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "Installar" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "Installar $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "Installar las dependéncias mancantas" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "Charjament..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "Mòds" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "Pas gis de paquets poguèron èsser quèrre" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "Pas de resultats" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "Pas de mesas a jorn" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "Pas trobat" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "Espotir" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "Verifiatz que lo juòc de basa es corrèct." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" -msgstr "En espeita" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" +msgstr "\"$1\" exista dejà. Voletz l'espotir?" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "Pacs de textura" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "Desinstallar" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "Mesa a jorn" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "Tot metre a jorn [$1]" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "Espiar mai d'informacions dins un navegador wèb" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" -msgstr "" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" +msgstr "Espotir" #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" @@ -454,10 +464,20 @@ msgstr "Crear" msgid "Decorations" msgstr "Decoracions" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." msgstr "Test de Desvelopament es per los desvelopair·e·a·s." +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "Donjons" @@ -832,10 +852,6 @@ msgstr "" msgid "Back" msgstr "" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "Chanjar las Tòchas" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -845,7 +861,8 @@ msgstr "" msgid "Clear" msgstr "Espotir" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "" @@ -1054,6 +1071,16 @@ msgstr "Installar un juòc" msgid "Install games from ContentDB" msgstr "Installar de juòcs de ContentDB" +#: builtin/mainmenu/tab_local.lua +msgid "Minetest 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 " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "Novèl" @@ -1087,8 +1114,8 @@ msgid "Start Game" msgstr "Començar le Juòc" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." -msgstr "Avètz pas gis de juòc installat." +msgid "You need to install a game before you can create a world." +msgstr "" #: builtin/mainmenu/tab_online.lua msgid "Address" @@ -1167,18 +1194,10 @@ msgstr "Charjament de las texturas..." msgid "Rebuilding shaders..." msgstr "Tornat construcion daus shaders..." -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "Error de connecion (perduda?)" - #: src/client/clientlauncher.cpp msgid "Could not find or load game: " msgstr "Se pòt pas trobar o charjar le juòc: " -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "Lo juòc specifiat es pas valide." - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "Menú Principau" @@ -1203,7 +1222,11 @@ msgstr "Lo fichèir de senhau prepausat a pas capitat de dobrir. " msgid "Provided world path doesn't exist: " msgstr "Lo chamin de monde prepausat exista pas: " -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "" + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp msgid "" "\n" "Check debug.txt for details." @@ -1211,18 +1234,10 @@ msgstr "" "\n" "Espiar debug.txt per los detalhs." -#: src/client/game.cpp -msgid "- Address: " -msgstr "- Adreça: " - #: src/client/game.cpp msgid "- Mode: " msgstr "- Mòda: " -#: src/client/game.cpp -msgid "- Port: " -msgstr "- Pòrt: " - #: src/client/game.cpp msgid "- Public: " msgstr "- Public: " @@ -1257,10 +1272,6 @@ msgstr "Marcha automatica activada" msgid "Block bounds hidden" msgstr "Liams daus Blòcs escònduts" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "Liams daus blòcs mostrats per totas los blòcs" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "Liams daus blòcs mostrats per aqueste blòc" @@ -1307,6 +1318,10 @@ msgstr "Lo scriptatge dau costat dau client es desactivat" msgid "Connecting to server..." msgstr "Connexion au servidor..." +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "Error de connecion (perduda?)" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "Connexion pas capitada per una rason pas coneguda" @@ -1315,46 +1330,13 @@ msgstr "Connexion pas capitada per una rason pas coneguda" msgid "Continue" msgstr "Contunhar" -#: src/client/game.cpp -#, fuzzy, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" -"Contratròles:\n" -"- %s: bojar davant\n" -"- %s: bojar darrèir\n" -"- %s: bojar a gaucha\n" -"- %s: bojar a dreita\n" -"- %s: sautar/grimpar en naut\n" -"- %s: curar/tustar\n" -"- %s: plaçar/utilizar\n" -"- %s: s'aclatar/grimpar en bàs\n" -"- %s: tombar l'objèct\n" -"- %s: inventari\n" -"- Mouse: virar/espiar\n" -"- Mouse wheel: seleccionar un objèct\n" -"- %s: parlar\n" - #: src/client/game.cpp msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1434,6 +1416,12 @@ msgstr "" msgid "Fog enabled" msgstr "" +#: src/client/game.cpp +#, fuzzy +msgid "Fog enabled by game or mod" +msgstr "" +"Se pòt pas mostrar los liams de blòcs (desactivat per un mòd o un juòc)" + #: src/client/game.cpp msgid "Game info:" msgstr "" @@ -1454,10 +1442,6 @@ msgstr "" msgid "KiB/s" msgstr "" -#: src/client/game.cpp -msgid "Media..." -msgstr "" - #: src/client/game.cpp msgid "MiB/s" msgstr "" @@ -1613,10 +1597,6 @@ msgstr "" msgid "Zoom currently disabled by game or mod" msgstr "" -#: src/client/game.cpp -msgid "ok" -msgstr "" - #: src/client/gameui.cpp msgid "Chat currently disabled by game or mod" msgstr "" @@ -1940,6 +1920,15 @@ msgstr "" msgid "Minimap in texture mode" msgstr "" +#: src/client/shader.cpp +#, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2130,6 +2119,18 @@ msgstr "" msgid "press key" msgstr "" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Unable to open URL" +msgstr "" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "" @@ -2163,6 +2164,7 @@ msgstr "" #. 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 "oc" @@ -2348,12 +2350,6 @@ msgstr "" msgid "Adds particles when digging a node." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2376,6 +2372,10 @@ msgstr "" msgid "Advanced" msgstr "" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2431,6 +2431,17 @@ msgstr "" msgid "Apple trees noise" 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 "Arm inertia" msgstr "" @@ -2452,12 +2463,21 @@ msgid "" "clients.\n" "Small values potentially improve performance a lot, at the expense of " "visible\n" -"rendering glitches (some blocks will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +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 @@ -2522,6 +2542,10 @@ msgstr "Biòms" msgid "Biome noise" msgstr "" +#: src/settings_translation_file.cpp +msgid "Block cull optimize distance" +msgstr "" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "" @@ -2734,6 +2758,12 @@ msgstr "" msgid "Colored shadows" 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -2865,10 +2895,6 @@ msgid "" "Also controls the object crosshair color" msgstr "" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "" @@ -2918,6 +2944,19 @@ msgid "" "but also uses more resources." 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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "" @@ -3103,6 +3142,11 @@ msgstr "Tot activar" msgid "Enable Bloom Debug" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Debanding" +msgstr "Activar los Degats" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3122,6 +3166,10 @@ msgid "" "filtering." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable Post Processing" +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "" @@ -3164,6 +3212,10 @@ msgstr "" msgid "Enable mouse wheel (scroll) for item selection in hotbar." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable random mod loading (mainly used for testing)." +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3187,6 +3239,10 @@ msgid "" "expecting." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable touchscreen" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3195,12 +3251,6 @@ msgid "" "when connecting to the server." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3230,6 +3280,19 @@ msgstr "" msgid "Enables caching of facedir rotated meshes." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -4024,9 +4087,10 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" #: src/settings_translation_file.cpp @@ -4172,10 +4236,6 @@ msgid "" "Make fog and sky colors depend on daytime (dawn/sunset) and view direction." msgstr "" -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "" @@ -4224,7 +4284,9 @@ 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." +"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 @@ -4259,10 +4321,6 @@ msgstr "" msgid "Mapblock mesh generation threads" msgstr "" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "" @@ -4505,6 +4563,10 @@ msgstr "" msgid "Minimap scan height" msgstr "" +#: src/settings_translation_file.cpp +msgid "Minimum dig repetition interval" +msgstr "" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "" @@ -4573,6 +4635,11 @@ msgstr "" msgid "Mouse sensitivity multiplier." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Movement threshold" +msgstr "Sensibilitat tactila (px):" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "" @@ -4681,10 +4748,6 @@ msgstr "" msgid "Occlusion Culling" msgstr "" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -4697,6 +4760,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "OpenGL debug" +msgstr "" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "" @@ -4806,6 +4873,15 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Protocol version minimum" +msgstr "La version dau protocòl correspònda pas. " + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -4821,6 +4897,10 @@ msgstr "" msgid "Random input" msgstr "" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "" @@ -5008,8 +5088,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5127,7 +5207,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" @@ -5160,6 +5240,10 @@ msgid "" "Bright colors will bleed over the neighboring objects." 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 "Set to true to enable waving leaves." msgstr "" @@ -5199,8 +5283,7 @@ msgstr "Shaders" msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" #: src/settings_translation_file.cpp @@ -5270,13 +5353,6 @@ msgid "" "recommended." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "" @@ -5312,7 +5388,7 @@ 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 Change Keys." +"cinematic mode by using the key set in Controls." msgstr "" #: src/settings_translation_file.cpp @@ -5333,6 +5409,14 @@ msgstr "" msgid "Soft shadow radius" 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 "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -5489,17 +5573,37 @@ msgid "" "when calling `/profiler save [format]` without format." 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 "" "The file path relative to your world path in which profiles will be saved to." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "" #: src/settings_translation_file.cpp -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" #: src/settings_translation_file.cpp @@ -5510,6 +5614,12 @@ msgid "" "Default is 1.0 (1/2 node)." 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 "The network interface that the server listens on." msgstr "" @@ -5536,7 +5646,7 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" #: src/settings_translation_file.cpp @@ -5593,6 +5703,10 @@ msgstr "" msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "" +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -5640,12 +5754,11 @@ msgid "Touchscreen sensitivity multiplier." msgstr "" #: src/settings_translation_file.cpp -#, fuzzy -msgid "Touchscreen threshold" -msgstr "Sensibilitat tactila (px):" +msgid "Tradeoffs for performance" +msgstr "" #: src/settings_translation_file.cpp -msgid "Tradeoffs for performance" +msgid "Translucent liquids" msgstr "" #: src/settings_translation_file.cpp @@ -5683,7 +5796,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 "" #: src/settings_translation_file.cpp @@ -5781,10 +5896,6 @@ msgstr "" msgid "User Interfaces" msgstr "" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "" @@ -5871,12 +5982,25 @@ msgstr "" msgid "Volume" msgstr "" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +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 +#, fuzzy +msgid "Volumetric lighting" +msgstr "Sobrelusança daus Blòcs" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6116,6 +6240,12 @@ msgstr "" #~ msgid "(game support required)" #~ msgstr "(supòrt dau juòc necessari)" +#~ msgid "- Address: " +#~ msgstr "- Adreça: " + +#~ msgid "- Port: " +#~ msgstr "- Pòrt: " + #~ msgid "2x" #~ msgstr "2x" @@ -6140,6 +6270,12 @@ msgstr "" #~ msgid "Bilinear Filter" #~ msgstr "Colador Bilinear" +#~ msgid "Block bounds shown for all blocks" +#~ msgstr "Liams daus blòcs mostrats per totas los blòcs" + +#~ msgid "Change Keys" +#~ msgstr "Chanjar las Tòchas" + #, fuzzy #~ msgid "Change keys" #~ msgstr "Chanjar las Tòchas" @@ -6147,6 +6283,38 @@ msgstr "" #~ msgid "Connected Glass" #~ msgstr "Veire conectat" +#, fuzzy, c-format +#~ msgid "" +#~ "Controls:\n" +#~ "- %s: move forwards\n" +#~ "- %s: move backwards\n" +#~ "- %s: move left\n" +#~ "- %s: move right\n" +#~ "- %s: jump/climb up\n" +#~ "- %s: dig/punch/use\n" +#~ "- %s: place/use\n" +#~ "- %s: sneak/climb down\n" +#~ "- %s: drop item\n" +#~ "- %s: inventory\n" +#~ "- Mouse: turn/look\n" +#~ "- Mouse wheel: select item\n" +#~ "- %s: chat\n" +#~ msgstr "" +#~ "Contratròles:\n" +#~ "- %s: bojar davant\n" +#~ "- %s: bojar darrèir\n" +#~ "- %s: bojar a gaucha\n" +#~ "- %s: bojar a dreita\n" +#~ "- %s: sautar/grimpar en naut\n" +#~ "- %s: curar/tustar\n" +#~ "- %s: plaçar/utilizar\n" +#~ "- %s: s'aclatar/grimpar en bàs\n" +#~ "- %s: tombar l'objèct\n" +#~ "- %s: inventari\n" +#~ "- Mouse: virar/espiar\n" +#~ "- Mouse wheel: seleccionar un objèct\n" +#~ "- %s: parlar\n" + #~ msgid "Dynamic shadows:" #~ msgstr "Ombras dinamicas:" @@ -6163,6 +6331,9 @@ msgstr "" #~ msgstr "" #~ "Installar un Mòd: Pas possible de trobar lo nom reau dau mòd per: $1" +#~ msgid "Invalid gamespec." +#~ msgstr "Lo juòc specifiat es pas valide." + #~ msgid "Mipmap" #~ msgstr "Mipmapa" @@ -6175,9 +6346,6 @@ msgstr "" #~ msgid "No Mipmap" #~ msgstr "Pas de Mipmapa" -#~ msgid "Node Highlighting" -#~ msgstr "Sobrelusança daus Blòcs" - #~ msgid "Node Outlining" #~ msgstr "Sobrelinhament daus Blòcs" @@ -6253,5 +6421,8 @@ msgstr "" #~ msgid "Y" #~ msgstr "Y" +#~ msgid "You have no games installed." +#~ msgstr "Avètz pas gis de juòc installat." + #~ msgid "Z" #~ msgstr "Z" diff --git a/po/pl/minetest.po b/po/pl/minetest.po index 7cc2ec821..8ad317f2a 100644 --- a/po/pl/minetest.po +++ b/po/pl/minetest.po @@ -2,18 +2,18 @@ msgid "" msgstr "" "Project-Id-Version: Polish (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" -"PO-Revision-Date: 2023-09-08 10:04+0000\n" -"Last-Translator: Jakub Z \n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" +"PO-Revision-Date: 2024-08-11 15:14+0000\n" +"Last-Translator: nauta-turbidus \n" "Language-Team: Polish \n" "Language: pl\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%10>=2 && n%10<=4 && (n%100<10 " -"|| n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 5.0.1-dev\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" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -72,8 +72,8 @@ msgid "Command not available: " msgstr "Polecenie nie jest dostępne: " #: builtin/common/chatcommands.lua -msgid "Get help for commands" -msgstr "Uzyskaj pomoc dotyczącą poleceń" +msgid "Get help for commands (-t: output in chat)" +msgstr "Uzyskaj pomoc dotyczącą poleceń (-t: wyjście na czacie)" #: builtin/common/chatcommands.lua msgid "" @@ -83,12 +83,8 @@ msgstr "" "wyświetlić wszystko." #: builtin/common/chatcommands.lua -msgid "[all | ]" -msgstr "[wszystko | ]" - -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" -msgstr "OK" +msgid "[all | ] [-t]" +msgstr "[wszystko | ] [-t]" #: builtin/fstk/ui.lua msgid "" @@ -106,6 +102,10 @@ msgstr "Wystąpił błąd:" msgid "Main menu" msgstr "Menu główne" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "OK" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Połącz ponownie" @@ -134,19 +134,27 @@ msgstr "Wspieramy wyłącznie protokół w wersji $1." msgid "We support protocol versions between version $1 and $2." msgstr "Wspieramy protokoły w wersji od $1 do $2." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "\"$1\" aktualnie istnieje. Czy chcesz go nadpisać?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" +msgstr "Błąd instalowania \"$1\": $2" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." -msgstr "Zostaną zainstalowane zależności $1 i $2." +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download \"$1\"" +msgstr "Nie udało się pobrać \"$1\"" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" -msgstr "$1 przez $2" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr "Pobieranie $1 do $2 nie powiodło się :(" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "" +"Nie udało się wypakować \"$1\" (za mało miejsca na dysku, niewspierany typ " +"pliku lub uszkodzone archiwum)" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" @@ -154,158 +162,157 @@ msgstr "" "$1 pobieranych,\n" "$2 w kolejce" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." msgstr "Pobieranie $1..." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "$1 wymaga zależności, które nie zostały znalezione." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "$1 zostanie zainstalowany, a zależności $2 zostaną pominięte." - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "Wszystkie zasoby" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "Już zainstalowany" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "Powrót do menu głównego" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "ContentDB nie jest dostępne gdy Minetest był zbudowany bez cURL" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "Pobieranie..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "Błąd przy pobieraniu zależności dla pakietu" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "Gry" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +msgstr "Instaluj" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp +msgid "Loading..." +msgstr "Ładowanie..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Mods" +msgstr "Modyfikacje" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "Nie można pobrać pakietów" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "Brak wyników" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "Brak aktualizacji" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "W kolejce" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "Paczki zasobów" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "Paczka $1 nie została znaleziona." + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "Odinstaluj" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "Aktualizuj" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "Zaktualizuj wszystko [$1]" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "View more information in a web browser" +msgstr "Pokaż więcej informacji w przeglądarce" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "You need to install a game before you can install a mod" +msgstr "Musisz zainstalować grę, zanim zainstalujesz mody" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 and $2 dependencies will be installed." +msgstr "Zostaną zainstalowane zależności $1 i $2." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "$1 przez $2" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "$1 wymaga zależności, które nie zostały znalezione." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "$1 zostanie zainstalowany, a zależności $2 zostaną pominięte." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "Już zainstalowany" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "Gra podstawowa:" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "Anuluj" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "ContentDB nie jest dostępne gdy Minetest był zbudowany bez cURL" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "Zależności:" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "Pobieranie..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "Błąd instalowania \"$1\": $2" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download \"$1\"" -msgstr "Nie udało się pobrać \"$1\"" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "Pobieranie $1 do $2 nie powiodło się :(" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "" -"Nie udało się wypakować \"$1\" (niewspierany typ pliku lub uszkodzone " -"archiwum)" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "Gry" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "Instaluj" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "Zainstaluj $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "Zainstaluj brakujące zależności" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "Ładowanie..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "Modyfikacje" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "Nie można pobrać pakietów" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "Brak wyników" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "Brak aktualizacji" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "Nie znaleziono" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "Nadpisz" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "Proszę sprawdzić, czy gra podstawowa jest poprawnie zainstalowana." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" -msgstr "W kolejce" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" +msgstr "\"$1\" aktualnie istnieje. Czy chcesz go nadpisać?" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "Paczki zasobów" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "Odinstaluj" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "Aktualizuj" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "Zaktualizuj wszystko [$1]" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "Pokaż więcej informacji w przeglądarce" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" -msgstr "" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" +msgstr "Nadpisz" #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" @@ -453,10 +460,22 @@ msgstr "Utwórz" msgid "Decorations" msgstr "Dekoracje" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "Pustynne świątynie" + #: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." msgstr "Development Test jest przeznaczony dla programistów." +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" +"Osobny wariant lochu generowany w biomach pustynnych (tylko jeśli lochy " +"włączone)" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "Lochy" @@ -653,7 +672,7 @@ msgstr "Zarejestruj się" #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "Dismiss" -msgstr "" +msgstr "Odrzuć" #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "" @@ -661,21 +680,25 @@ msgid "" "\"Minetest Game\". Since Minetest 5.8.0, Minetest ships without a default " "game." msgstr "" +"Przez dłuższy czas, razem z silnikiem Minetest dostarczana była domyślna gra " +"o nazwie \"Minetest Game\". Od wersji 5.8.0, Minetest jest rozpowszechniany " +"bez domyślnej gry." #: 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 "" +"Jeżeli chcesz kontynuować zabawę w Twoich światach Minetest Game, musisz ją " +"teraz zainstalować." #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "Minetest Game is no longer installed by default" -msgstr "" +msgstr "\"Minetest Game\" nie jest już domyślnie instalowana" #: builtin/mainmenu/dlg_reinstall_mtg.lua -#, fuzzy msgid "Reinstall Minetest Game" -msgstr "Zainstaluj inną grę" +msgstr "Zainstaluj ponownie \"Minetest Game\"" #: builtin/mainmenu/dlg_rename_modpack.lua msgid "Accept" @@ -752,13 +775,12 @@ msgid "Select file" msgstr "Wybierz plik" #: builtin/mainmenu/settings/components.lua -#, fuzzy msgid "Set" -msgstr "Wybierz" +msgstr "Ustaw" #: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua msgid "(No description of setting given)" -msgstr "(brak opisu)" +msgstr "(Brak opisu ustawienia)" #: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua msgid "2D Noise" @@ -766,7 +788,7 @@ msgstr "Szum 2d" #: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua msgid "Lacunarity" -msgstr "Lunarność" +msgstr "Lakunarność" #: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua msgid "Octaves" @@ -823,20 +845,16 @@ msgstr "wygładzony" #: builtin/mainmenu/settings/dlg_settings.lua msgid "(Use system language)" -msgstr "" +msgstr "(Użyj języka systemowego)" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Accessibility" -msgstr "" +msgstr "Dostępność" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Back" msgstr "Backspace" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "Zmień klawisze" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -846,7 +864,8 @@ msgstr "Czat" msgid "Clear" msgstr "Delete" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "Sterowanie" @@ -855,18 +874,16 @@ msgid "General" msgstr "Ogólne" #: builtin/mainmenu/settings/dlg_settings.lua -#, fuzzy msgid "Movement" -msgstr "Szybkie poruszanie" +msgstr "Poruszanie się" #: builtin/mainmenu/settings/dlg_settings.lua -#, fuzzy msgid "Reset setting to default" -msgstr "Przywróć domyślne" +msgstr "Przywróć wartość domyślną" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Reset setting to default ($1)" -msgstr "" +msgstr "Przywróć wartość domyślną ($1)" #: builtin/mainmenu/settings/dlg_settings.lua builtin/mainmenu/tab_online.lua msgid "Search" @@ -874,7 +891,7 @@ msgstr "Wyszukaj" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Show advanced settings" -msgstr "" +msgstr "Pokaż ustawienia zaawansowane" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Show technical names" @@ -894,11 +911,11 @@ msgstr "Zawartość: Mody" #: builtin/mainmenu/settings/shadows_component.lua msgid "(The game will need to enable shadows as well)" -msgstr "" +msgstr "(Gra również musi obsługiwać cienie)" #: builtin/mainmenu/settings/shadows_component.lua msgid "Custom" -msgstr "" +msgstr "Niestandardowe" #: builtin/mainmenu/settings/shadows_component.lua msgid "Disabled" @@ -951,7 +968,7 @@ msgstr "Główny zespół" #: builtin/mainmenu/tab_about.lua msgid "Irrlicht device:" -msgstr "" +msgstr "Urządzenie Irrlicht:" #: builtin/mainmenu/tab_about.lua msgid "Open User Data Directory" @@ -983,18 +1000,16 @@ msgid "Browse online content" msgstr "Przeglądaj zawartość online" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Browse online content [$1]" -msgstr "Przeglądaj zawartość online" +msgstr "Przeglądaj zawartość online [$1]" #: builtin/mainmenu/tab_content.lua msgid "Content" msgstr "Zawartość" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Content [$1]" -msgstr "Zawartość" +msgstr "Zawartość [$1]" #: builtin/mainmenu/tab_content.lua msgid "Disable Texture Pack" @@ -1017,9 +1032,8 @@ msgid "Rename" msgstr "Zmień nazwę" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Update available?" -msgstr "" +msgstr "Aktualizacja dostępna?" #: builtin/mainmenu/tab_content.lua msgid "Use Texture Pack" @@ -1057,6 +1071,18 @@ msgstr "Zainstaluj grę" msgid "Install games from ContentDB" msgstr "Instaluj gry z ContentDB" +#: builtin/mainmenu/tab_local.lua +msgid "Minetest doesn't come with a game by default." +msgstr "Minetest nie ma domyślnie zainstalowanej gry." + +#: builtin/mainmenu/tab_local.lua +msgid "" +"Minetest is a game-creation platform that allows you to play many different " +"games." +msgstr "" +"Minetest to platforma tworzenia gier, która pozwala Ci grać w wiele różnych " +"gier." + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "Nowy" @@ -1090,8 +1116,8 @@ msgid "Start Game" msgstr "Rozpocznij grę" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." -msgstr "Nie zainstalowano żadnych trybów gry." +msgid "You need to install a game before you can create a world." +msgstr "Musisz zainstalować grę, zanim będziesz mógł stworzyć świat." #: builtin/mainmenu/tab_online.lua msgid "Address" @@ -1170,18 +1196,10 @@ msgstr "Ładowanie tekstur..." msgid "Rebuilding shaders..." msgstr "Przebudowywanie shaderów..." -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "Błąd połączenia (brak odpowiedzi?)" - #: src/client/clientlauncher.cpp msgid "Could not find or load game: " msgstr "Nie można znaleźć lub załadować gry: " -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "Nieprawidłowa specyfikacja trybu gry." - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "Menu główne" @@ -1206,7 +1224,11 @@ msgstr "Nie udało się otworzyć dostarczonego pliku z hasłem " msgid "Provided world path doesn't exist: " msgstr "Podana ścieżka świata nie istnieje: " -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "Media..." + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp msgid "" "\n" "Check debug.txt for details." @@ -1214,18 +1236,10 @@ msgstr "" "\n" "Sprawdź plik debug.txt by uzyskać więcej informacji." -#: src/client/game.cpp -msgid "- Address: " -msgstr "Adres " - #: src/client/game.cpp msgid "- Mode: " msgstr "- Tryb: " -#: src/client/game.cpp -msgid "- Port: " -msgstr "- Port: " - #: src/client/game.cpp msgid "- Public: " msgstr "- Publiczne: " @@ -1260,10 +1274,6 @@ msgstr "Automatyczne chodzenie do przodu włączone" msgid "Block bounds hidden" msgstr "Ukryte granice bloków" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "Granice bloków pokazane dla wszystkich bloków" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "Granice bloku wyświetlane dla bieżącego bloku" @@ -1281,9 +1291,8 @@ msgid "Camera update enabled" msgstr "Aktualizowanie kamery włączone" #: src/client/game.cpp -#, fuzzy msgid "Can't show block bounds (disabled by game or mod)" -msgstr "Nie można wyświetlić granic bloków (wyłączone przez mod lub grę)" +msgstr "Nie można wyświetlić granic bloków (wyłączone przez grę lub mod)" #: src/client/game.cpp msgid "Change Password" @@ -1309,6 +1318,10 @@ msgstr "Skryptowanie po stronie klienta jest wyłączone" msgid "Connecting to server..." msgstr "Łączenie z serwerem..." +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "Błąd połączenia (brak odpowiedzi?)" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "Połączenie nie powiodło się z nieznanego powodu" @@ -1318,46 +1331,12 @@ msgid "Continue" msgstr "Kontynuuj" #: src/client/game.cpp -#, fuzzy, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" -"Sterowanie:\n" -"- %s: idź do przodu\n" -"- %s: przesuń się do tyłu\n" -"- %s: przesuń się w lewo\n" -"- %s: przesuń w prawo\n" -"- %s: skok/wspinaj się\n" -"- %s: kopanie/cios\n" -"- %s: połóż/użyj\n" -"- %s: skradanie się/schodzenie w dół\n" -"- %s: upuść przedmiot\n" -"- %s: ekwipunek\n" -"- Mysz: obróć / spójrz\n" -"- Kółko myszy: wybierz element\n" -"- %s: czat\n" - -#: src/client/game.cpp -#, fuzzy msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1368,16 +1347,16 @@ msgid "" msgstr "" "Domyślne sterowanie:\n" "Brak widocznego menu:\n" -"- pojedyncze dotknięcie: aktywacja\n" -"- podwójne dotknięcie: postaw/użyj\n" "- przejechanie palcem: rozglądanie się\n" +"- dotknięcie: postaw/uderz/użyj (domyślnie)\n" +"- długie dotknięcie: kop/użyj (domyślnie)\n" "Menu/Ekwipunek widoczny:\n" "- potwójne dotknięcie poza menu:\n" " -->zamknij\n" -"- dotknięcie stacka, dotknięcie slota:\n" -" --> przenieś stack\n" +"- dotknięcie stosu, dotknięcie miejsca:\n" +" --> przenieś stos\n" "- dotknięcie i przeciągnięcie, dotknięcie drugim palcem\n" -" --> umieść pojedynczy item w slocie\n" +" --> umieść pojedynczy przedmiot w miejscu\n" #: src/client/game.cpp #, c-format @@ -1449,6 +1428,10 @@ msgstr "Mgła wyłączona" msgid "Fog enabled" msgstr "Mgła włączona" +#: src/client/game.cpp +msgid "Fog enabled by game or mod" +msgstr "Mgła włączona przez grę lub mod" + #: src/client/game.cpp msgid "Game info:" msgstr "Informacje o grze:" @@ -1469,10 +1452,6 @@ msgstr "Definicje przedmiotów..." msgid "KiB/s" msgstr "KiB/s" -#: src/client/game.cpp -msgid "Media..." -msgstr "Media..." - #: src/client/game.cpp msgid "MiB/s" msgstr "MiB/s" @@ -1573,49 +1552,53 @@ msgid "Unable to listen on %s because IPv6 is disabled" msgstr "Nie można nasłuchiwać na %s, ponieważ IPv6 jest wyłączony" #: src/client/game.cpp -#, fuzzy msgid "Unlimited viewing range disabled" -msgstr "Włączono nieskończony zasięg widoczności" +msgstr "Nieograniczony zasięg widoczności wyłączony" #: src/client/game.cpp -#, fuzzy msgid "Unlimited viewing range enabled" -msgstr "Włączono nieskończony zasięg widoczności" +msgstr "Nieograniczony zasięg widoczności włączony" #: src/client/game.cpp msgid "Unlimited viewing range enabled, but forbidden by game or mod" msgstr "" +"Nieograniczony zasięg widoczności włączony, ale niedozwolony przez grę lub " +"moda" #: src/client/game.cpp -#, fuzzy, c-format +#, c-format msgid "Viewing changed to %d (the minimum)" -msgstr "Zasięg widoczności na minimum: %d1" +msgstr "Zasięg widoczności zmieniony 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 "" +"Zasięg widoczności zmieniony na %d (minimum), ale ograniczony do %d przez " +"grę lub moda" #: src/client/game.cpp #, c-format msgid "Viewing range changed to %d" -msgstr "Zmieniono zasięg widoczności na %d%%" +msgstr "Zasięg widoczności zmieniony na %d" #: src/client/game.cpp -#, fuzzy, c-format +#, c-format msgid "Viewing range changed to %d (the maximum)" -msgstr "Zmieniono zasięg widoczności na %d%%" +msgstr "Zmieniono zasięg widoczności na %d (maksymalny)" #: src/client/game.cpp #, c-format msgid "" "Viewing range changed to %d (the maximum), but limited to %d by game or mod" msgstr "" +"Zasięg widoczności zmieniony na %d (maksimum), ale gra lub mod ogranicza go " +"do %d" #: src/client/game.cpp -#, fuzzy, c-format +#, c-format msgid "Viewing range changed to %d, but limited to %d by game or mod" -msgstr "Zmieniono zasięg widoczności na %d%%" +msgstr "Zmieniono zasięg widoczności na %d, ale gra lub mod ogranicza go do %d" #: src/client/game.cpp #, c-format @@ -1630,10 +1613,6 @@ msgstr "Siatka widoczna" msgid "Zoom currently disabled by game or mod" msgstr "Powiększenie jest obecnie wyłączone przez grę lub mod" -#: src/client/game.cpp -msgid "ok" -msgstr "ok" - #: src/client/gameui.cpp msgid "Chat currently disabled by game or mod" msgstr "Czat jest obecnie wyłączony przez grę lub mod" @@ -1673,32 +1652,28 @@ msgstr "Backspace" #. ~ Usually paired with the Pause key #: src/client/keycode.cpp -#, fuzzy msgid "Break Key" -msgstr "Skradanie" +msgstr "Break" #: src/client/keycode.cpp msgid "Caps Lock" msgstr "Klawisz Caps Lock" #: src/client/keycode.cpp -#, fuzzy msgid "Clear Key" +msgstr "Clear" + +#: src/client/keycode.cpp +msgid "Control Key" +msgstr "Ctrl" + +#: src/client/keycode.cpp +msgid "Delete Key" msgstr "Delete" -#: src/client/keycode.cpp -#, fuzzy -msgid "Control Key" -msgstr "Control" - -#: src/client/keycode.cpp -#, fuzzy -msgid "Delete Key" -msgstr "Usuń" - #: src/client/keycode.cpp msgid "Down Arrow" -msgstr "" +msgstr "Strzałka w dół" #: src/client/keycode.cpp msgid "End" @@ -1745,9 +1720,8 @@ msgid "Insert" msgstr "Insert" #: src/client/keycode.cpp -#, fuzzy msgid "Left Arrow" -msgstr "Lewy Control" +msgstr "Strzałka w lewo" #: src/client/keycode.cpp msgid "Left Button" @@ -1771,7 +1745,6 @@ msgstr "Lewy Windows" #. ~ Key name, common on Windows keyboards #: src/client/keycode.cpp -#, fuzzy msgid "Menu Key" msgstr "Menu" @@ -1848,18 +1821,15 @@ msgid "OEM Clear" msgstr "OEM Clear" #: 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 -#, fuzzy msgid "Pause Key" msgstr "Pause" @@ -1873,14 +1843,12 @@ msgid "Print" msgstr "Drukuj" #: src/client/keycode.cpp -#, fuzzy msgid "Return Key" msgstr "Enter" #: src/client/keycode.cpp -#, fuzzy msgid "Right Arrow" -msgstr "Prawy Control" +msgstr "Strzałka w prawo" #: src/client/keycode.cpp msgid "Right Button" @@ -1912,7 +1880,6 @@ msgid "Select" msgstr "Wybierz" #: src/client/keycode.cpp -#, fuzzy msgid "Shift Key" msgstr "Shift" @@ -1934,7 +1901,7 @@ msgstr "Tab" #: src/client/keycode.cpp msgid "Up Arrow" -msgstr "" +msgstr "Strzałka w górę" #: src/client/keycode.cpp msgid "X Button 1" @@ -1945,9 +1912,8 @@ msgid "X Button 2" msgstr "Przycisk X 2" #: src/client/keycode.cpp -#, fuzzy msgid "Zoom Key" -msgstr "Zoom" +msgstr "Klawisz Zoom" #: src/client/minimap.cpp msgid "Minimap hidden" @@ -1967,6 +1933,15 @@ msgstr "Minimapa w trybie powierzchniowym, powiększenie x%d" msgid "Minimap in texture mode" msgstr "Minimapa w trybie teksturowym" +#: src/client/shader.cpp +#, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "Nie udało się skompilować shadera \"%s\"" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "Shadery są włączone, ale GLSL nie jest wspierany przez sterownik." + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2160,6 +2135,18 @@ msgstr "Zoom" msgid "press key" msgstr "naciśnij klawisz" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "Otwórz" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "Otworzyć URL?" + +#: src/gui/guiOpenURL.cpp +msgid "Unable to open URL" +msgstr "Nie udało się otworzyć adresu URL" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "Zmień" @@ -2193,6 +2180,7 @@ msgstr "Głośność: %d%%" #. 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 "pl" @@ -2208,9 +2196,9 @@ msgid "Name is taken. Please choose another name" msgstr "Nazwa jest zajęta. Wybierz inną nazwę" #: src/server.cpp -#, fuzzy, c-format +#, c-format msgid "%s while shutting down: " -msgstr "Wyłączanie..." +msgstr "%s podczas wyłączania: " #: src/settings_translation_file.cpp msgid "" @@ -2282,7 +2270,7 @@ msgstr "Szum 2D lokalizuje doliny i kanały rzeczne." #: src/settings_translation_file.cpp msgid "3D" -msgstr "" +msgstr "3D" #: src/settings_translation_file.cpp msgid "3D clouds" @@ -2315,7 +2303,7 @@ msgid "" "to be adjusted, as floatland tapering functions best when this noise has\n" "a value range of approximately -2.0 to 2.0." msgstr "" -"Szum 3D określający strukturę terenów pływających.\n" +"Szum 3D określający strukturę latających wysp.\n" "Jeśli wartość domyślna zostanie zmieniona, konieczne będzie dostosowanie " "\"skali\" szumu (domyślnie 0,7), \n" "ponieważ zwężanie terenów pływających działa najlepiej, \n" @@ -2338,7 +2326,6 @@ msgid "3D noise that determines number of dungeons per mapchunk." msgstr "Szum 3D, który wpływa na liczbę lochów na jeden mapchunk." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "3D support.\n" "Currently supported:\n" @@ -2353,10 +2340,11 @@ msgstr "" "Wsparcie 3D\n" "Aktualnie wspierane:\n" "- none: bez wyjścia 3d.\n" -"- anaglyph: Niebieski/karmazynowy kolor 3d.\n" -"- interlaced: bazujący na polaryzacji parzystej/nieparzystej linii.\n" +"- anaglyph: 3d poprzez kolory cyjan/magenta\n" +"- interlaced: wsparcie ekranów z parzystą/nieparzystą polaryzacją " +"liniową\n" "- topbottom: podzielony ekran góra/dół.\n" -"- sidebyside: podzielony obok siebie.\n" +"- sidebyside: podzielony ekran obok siebie.\n" "- crossview: obuoczne 3d\n" "Zauważ, że tryb interlaced wymaga włączenia shaderów." @@ -2419,14 +2407,6 @@ msgstr "Zasięg wysyłania aktywnego obiektu" msgid "Adds particles when digging a node." msgstr "Dodaje efekty cząstkowe podczas wykopywania bloków." -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" -"Ustaw konfiguracje DPI dla twojego ekranu (nie X11/Tylko Android) np. dla " -"ekranów 4k." - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2456,6 +2436,10 @@ msgstr "Nazwa administratora" msgid "Advanced" msgstr "Zaawansowane" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "Pozwala na przejrzyste płyny." + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2495,14 +2479,12 @@ msgid "Announce to this serverlist." msgstr "Rozgłoś listę serwerów." #: src/settings_translation_file.cpp -#, fuzzy msgid "Anti-aliasing scale" -msgstr "Antyaliasing:" +msgstr "Skala antyaliasingu" #: src/settings_translation_file.cpp -#, fuzzy msgid "Antialiasing method" -msgstr "Antyaliasing:" +msgstr "Metoda antyaliasingu" #: src/settings_translation_file.cpp msgid "Append item name" @@ -2516,6 +2498,24 @@ msgstr "Dołącz nazwę przedmiotu do jego opisu." msgid "Apple trees noise" msgstr "Szum jabłoni" +#: 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 "" +"Zastosuj dithering, żeby zmniejszyć artefakty bandingu.\n" +"Dithering znacząco zwiększa rozmiar bezstratnie skompresowanych\n" +"zrzutów ekranu i działa nieprawidłowo, jeśli system operacyjny\n" +"wykonuje dodatkowy dithering lub jeśli kanały kolorów\n" +"nie są skwantowane na 8 bitów.\n" +"Z OpenGL ES, dithering działa tylko jeśli shader wspiera wysoką precyzję\n" +"liczb zmiennoprzecinkowych i może mieć większy wpływ na wydajność." + #: src/settings_translation_file.cpp msgid "Arm inertia" msgstr "Bezwładność ramion" @@ -2539,24 +2539,38 @@ msgid "" "clients.\n" "Small values potentially improve performance a lot, at the expense of " "visible\n" -"rendering glitches (some blocks will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." msgstr "" "W tej odległości serwer agresywnie zoptymalizuje, które bloki są wysyłane " "do\n" "klientów.\n" "Małe wartości potencjalnie znacznie poprawiają wydajność, kosztem " "widocznych\n" -"trzaski renderowania (niektóre bloki nie będą renderowane pod wodą i w " -"jaskiniach,\n" -"jak również czasami na lądzie).\n" -"Ustawienie tego na wartość większą niż max_block_send_distance wyłącza to\n" -"optymalizacja.\n" -"Podane w mapblocks (16 węzłów)." +"błędów renderowania (niektóre bloki mogą nie być renderowane poprawnie w " +"jaskiniach).\n" +"Ustawienie tego na wartość większą niż max_block_send_distance wyłącza te\n" +"optymalizacje.\n" +"Wyrażone w MapBlocks (16 węzłów)." + +#: 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 "" +"W tej odległości serwer wykona prostsze i tańsze sprawdzenie przesłonięcia.\n" +"Mniejsze wartości potencjalnie poprawiają wydajność, kosztem tymczasowych\n" +"błędów renderowania (brakujące bloki).\n" +"To jest szczególnie użyteczne przy bardzo dużych zasięgach widoczności (" +"powyżej 500).\n" +"Wyrażone w MapBlocks (16 nodes)." #: src/settings_translation_file.cpp msgid "Audio" @@ -2587,9 +2601,8 @@ msgid "Base terrain height." msgstr "Bazowa wysokość terenu." #: src/settings_translation_file.cpp -#, fuzzy msgid "Base texture size" -msgstr "Minimalna wielkość tekstury dla filtrów" +msgstr "Podstawowy rozmiar tekstury" #: src/settings_translation_file.cpp msgid "Basic privileges" @@ -2612,14 +2625,17 @@ msgid "Bind address" msgstr "Sprawdzanie adresu" #: src/settings_translation_file.cpp -#, fuzzy msgid "Biome API" -msgstr "Biomy" +msgstr "API biomów" #: src/settings_translation_file.cpp msgid "Biome noise" msgstr "Szum biomu" +#: src/settings_translation_file.cpp +msgid "Block cull optimize distance" +msgstr "Dystans optymalizacji pomijania bloków" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "Dystans optymalizacji wysyłanych bloków" @@ -2786,7 +2802,7 @@ msgstr "Klient" #: src/settings_translation_file.cpp msgid "Client Mesh Chunksize" -msgstr "" +msgstr "Rozmiar modelu chunka na kliencie" #: src/settings_translation_file.cpp msgid "Client and Server" @@ -2805,9 +2821,8 @@ msgid "Client-side Modding" msgstr "Modyfikacje po stronie klienta" #: src/settings_translation_file.cpp -#, fuzzy msgid "Client-side node lookup range restriction" -msgstr "Ograniczenie zakresu wyszukiwania węzłów po stronie klienta" +msgstr "Ograniczenie zasięgu wyszukiwania node'ów po stronie klienta" #: src/settings_translation_file.cpp msgid "Climbing speed" @@ -2822,7 +2837,6 @@ msgid "Clouds" msgstr "Chmury 3D" #: src/settings_translation_file.cpp -#, fuzzy msgid "Clouds are a client-side effect." msgstr "Chmury są efektem po stronie klienta." @@ -2838,6 +2852,15 @@ msgstr "Kolorowa mgła" msgid "Colored shadows" msgstr "Kolorowe cienie" +#: 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 "" +"Lista wymienionych po przecinku rozszerzeń AL i ALC, które nie powinny być " +"użyte.\n" +"Przydatne do testowania. Sprawdź al_extensions.[h,cpp] po szczegóły." + #: src/settings_translation_file.cpp msgid "" "Comma-separated list of flags to hide in the content repository.\n" @@ -3002,10 +3025,6 @@ msgstr "" "Kolor celownika (kanał czerwony, zielony, niebieski).\n" "Wpływa również na kolor obiektu celownika" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "DPI" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "Próg rozmiaru pliku dziennika debugowania" @@ -3061,6 +3080,28 @@ msgstr "" "Poissona,\n" "ale także zużywa więcej zasobów." +#: 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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" +"Wyznacz najstarsze klienty, które mogą połączyć się z serwerem.\n" +"Starsze klienty mogą być kompatybilne w tym sensie, że nie będą się " +"zawieszać,\n" +"kiedy łączą się z nowym serwerem, ale mogą nie wspierać wszystkich nowych " +"funkcjonalności., których się spodziewasz.\n" +"To pozwala na bardziej szczegółowe rozróżnianie niż " +"strict_protocol_version_checking.\n" +"Minetest i tak wymusza swoje własne, wewnętrzne minimum, a włączenie\n" +"strict_protocol_version_checking efektywnie nadpisze skutki tego ustawienia." + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "Określa obszary na których drzewa mają jabłka." @@ -3127,6 +3168,8 @@ msgid "" "methods.\n" "Value of 2 means taking 2x2 = 4 samples." msgstr "" +"Zdefiniuj rozmiar siatki próbkowania dla metod antyaliasingu FSAA i SSAA.\n" +"Wartość 2 oznacza branie 2x2 = 4 próbek." #: src/settings_translation_file.cpp msgid "Defines the width of the river channel." @@ -3252,7 +3295,7 @@ msgstr "Szum generowania lochów" #: src/settings_translation_file.cpp msgid "Enable Automatic Exposure" -msgstr "" +msgstr "Włącz automatyczną regulację ekspozycji" #: src/settings_translation_file.cpp msgid "Enable Bloom" @@ -3262,6 +3305,10 @@ msgstr "Włącz efekt bloom" msgid "Enable Bloom Debug" msgstr "Włącz debug efektu bloom" +#: src/settings_translation_file.cpp +msgid "Enable Debanding" +msgstr "Włącz Debanding" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3288,9 +3335,13 @@ msgstr "" "Jeśli włączone, używa dysku Poisson do \"miękkich cieni\", w przeciwnym " "razie używa filtrowania PCF." +#: src/settings_translation_file.cpp +msgid "Enable Post Processing" +msgstr "Włącz Post Processing" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" -msgstr "" +msgstr "Włącz culling oparty o śledzenie promieni" #: src/settings_translation_file.cpp msgid "" @@ -3299,6 +3350,10 @@ msgid "" "automatically adjust to the brightness of the scene,\n" "simulating the behavior of human eye." msgstr "" +"Włącz automatyczną poprawę ekspozycji.\n" +"Kiedy włączone, silnik post-processingu automatycznie\n" +"dostosuje jasność sceny, symulując zachowanie\n" +"oka ludzkiego." #: src/settings_translation_file.cpp msgid "" @@ -3331,7 +3386,11 @@ msgstr "Włącz tryb mod security" #: src/settings_translation_file.cpp msgid "Enable mouse wheel (scroll) for item selection in hotbar." -msgstr "" +msgstr "Włącz szybki wybór przedmiotów na hotbarze kółkiem myszy (scrollem)." + +#: src/settings_translation_file.cpp +msgid "Enable random mod loading (mainly used for testing)." +msgstr "Włącz losową kolejność ładowania modów (głównie do testowania)." #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." @@ -3363,6 +3422,10 @@ msgstr "" "kiedy łączą sę z nowym serwerem, ale mogą nie wspierać wszystkich nowych " "spodziewanych funkcjonalności." +#: src/settings_translation_file.cpp +msgid "Enable touchscreen" +msgstr "Włącz ekran dotykowy" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3375,14 +3438,6 @@ msgstr "" "tekstur)\n" "jeżeli następuje połączenie z serwerem." -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" -"Zezwala na korzystanie z VBO (obiektów bufora wierzchołków).\n" -"Powinno to znacznie polepszyć wydajność karty graficznej." - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3422,6 +3477,21 @@ msgstr "Włącz animację inwentarza przedmiotów." msgid "Enables caching of facedir rotated meshes." msgstr "Włącza cachowanie facedir obracanych meshów." +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +msgstr "Włącza debug i sprawdzanie błędów w sterowniku OpenGL." + +#: src/settings_translation_file.cpp +msgid "Enables the post processing pipeline." +msgstr "Włącza potok post-processimgu." + +#: src/settings_translation_file.cpp +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." + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -3432,7 +3502,6 @@ msgstr "" "kosztem drobnych usterek wizualnych, które nie wpływają na grywalność gry." #: src/settings_translation_file.cpp -#, fuzzy msgid "Engine Profiler" msgstr "Profiler silnika" @@ -3453,18 +3522,17 @@ msgid "" "Values < 1.0 (for example 0.25) create a more defined surface level with\n" "flatter lowlands, suitable for a solid floatland layer." msgstr "" -"Wykładnik zwężenia pływającej wyspy. Zmienia zachowanie zwężenia.\n" +"Wykładnik zwężenia latającej wyspy. Zmienia zachowanie zwężenia.\n" "Wartość = 1.0 tworzy jednolite, liniowe zwężenie.\n" "Wartości > 1.0 tworzą gładkie zwężenie odpowiednie dla domyślnie " "odseparowanych\n" -"floatlands.\n" +"latających wysp.\n" "Wartości < 1.0 (np. 0.25) tworzą bardziej zdefiniowany poziom powierzchni z\n" -"płaskimi nizinami, odpowiednimi dla jednolitej warstwy pływających wysp." +"płaskimi nizinami, odpowiednimi dla jednolitej warstwy latającego lądu." #: src/settings_translation_file.cpp -#, fuzzy msgid "Exposure compensation" -msgstr "Współczynnik naświetlenia" +msgstr "Kompensacja ekspozycji" #: src/settings_translation_file.cpp msgid "FPS" @@ -3546,12 +3614,11 @@ msgid "Fixed virtual joystick" msgstr "Ustaw wirtualny joystick" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Fixes the position of virtual joystick.\n" "If disabled, virtual joystick will center to first-touch's position." msgstr "" -"(Android) Mocuje pozycję wirtualnego joysticka.\n" +"Mocuje pozycję wirtualnego joysticka.\n" "Gdy jest wyłączona, wirtualny joystick przestawi się do miejsca pierwszego " "dotknięcia." @@ -3741,9 +3808,8 @@ msgid "Fullscreen mode." msgstr "Tryb pełnoekranowy." #: src/settings_translation_file.cpp -#, fuzzy msgid "GUI" -msgstr "Interfejsy użytkownika" +msgstr "Interfejs graficzny" #: src/settings_translation_file.cpp msgid "GUI scaling" @@ -3850,10 +3916,10 @@ msgid "" "call).\n" "* Instrument the sampler being used to update the statistics." msgstr "" -"Spraw by profiler instruował się samoczynnie:\n" -"*instruowanie pustych funkcji.\n" -"To estymuje narzut, który instrumentacja dodaje (+1 wywołanie funkcji).\n" -"*instruowanie samplera będącego w użyciu do zaktualizowania statystyk." +"Spraw by profiler zmierzył się sam:\n" +"* Zmierz pustą funkcję.\n" +"To szacuje narzut, który pomiar dodaje (+1 wywołanie funkcji).\n" +"* Zmierz samplera będącego w użyciu do aktualizowania statystyk." #: src/settings_translation_file.cpp msgid "Heat blend noise" @@ -3864,10 +3930,8 @@ msgid "Heat noise" msgstr "Szum gorąca" #: src/settings_translation_file.cpp -#, fuzzy msgid "Height component of the initial window size." -msgstr "" -"Wysokość początkowego rozmiaru okna. Ignorowana w trybie pełnoekranowym." +msgstr "Komponent wysokościowy początkowego rozmiaru okna." #: src/settings_translation_file.cpp msgid "Height noise" @@ -3931,25 +3995,23 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Hotbar: Enable mouse wheel for selection" -msgstr "" +msgstr "Hotbar: Włącz użycie kółka myszy do wyboru" #: src/settings_translation_file.cpp msgid "Hotbar: Invert mouse wheel direction" -msgstr "" +msgstr "Hotbar: Odwróć kierunek kółka myszy" #: src/settings_translation_file.cpp msgid "How deep to make rivers." msgstr "Jak głębokie tworzyć rzeki." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "How fast liquid waves will move. Higher = faster.\n" "If negative, liquid waves will move backwards." msgstr "" "Jak szybko fale cieczy będą się poruszać. Wyższa = szybciej.\n" -"Wartość ujemna, fale cieczy będą poruszać się do tyłu.\n" -"Wymaga włączenia falowania cieczy." +"Wartość ujemna, fale cieczy będą poruszać się do tyłu." #: src/settings_translation_file.cpp msgid "" @@ -4057,32 +4119,29 @@ msgstr "" "swojego hasła na puste." #: 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 "" -"Jeśli opcja jest włączona, serwer przeprowadzi usuwanie bloków mapy na " -"podstawie\n" -"pozycji gracza. Zredukuje to o 50-80% liczbę bloków\n" -"wysyłanych na serwer. Klient nie będzie już widział większości ukrytych " -"bloków,\n" +"Jeśli opcja jest włączona, serwer przeprowadzi pomijanie przesłoniętych " +"bloków mapy\n" +"na podstawie pozycji gracza. To może zredukować o 50-80% liczbę bloków " +"wysyłanych\n" +"do klienta. Klient nie będzie już widział większości zakrytych bloków,\n" "więc przydatność trybu noclip zostanie ograniczona." #: src/settings_translation_file.cpp -#, fuzzy 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 "" -"Jeżeli włączone, możesz położyć bloki w pozycji gdzie stoisz.\n" +"Jeżeli włączone, możesz stawiać bloki w pozycji, gdzie stoisz.\n" "Pomocne gdy pracujesz na małych powierzchniach." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "If the CSM restriction for node range is enabled, get_node calls are " "limited\n" @@ -4101,7 +4160,6 @@ msgstr "" "informacja o czasie zostanie dodana do komunikatu polecenia czatu" #: src/settings_translation_file.cpp -#, fuzzy 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" @@ -4109,9 +4167,10 @@ msgid "" "debug.txt is only moved if this setting is positive." msgstr "" "Jeśli rozmiar pliku debug.txt przekroczy liczbę megabajtów określoną w tym " -"ustawieniu, plik zostanie przeniesiony do pliku debug.txt.1.\n" -"w tym ustawieniu, plik jest przenoszony do debug.txt.1,\n" -"usuwając starszy debug.txt.1, jeśli taki istnieje.\n" +"ustawieniu\n" +"podczas otwierania, plik zostanie przeniesiony do pliku debug.txt.1, w tym " +"usuwając\n" +"starszy debug.txt.1, jeśli taki istnieje.\n" "debug.txt jest przenoszony tylko wtedy, gdy wartość tego ustawienia jest " "dodatnia." @@ -4136,58 +4195,54 @@ msgid "In-game chat console height, between 0.1 (10%) and 1.0 (100%)." msgstr "Przeźroczystość konsoli w grze (od 0.0 do 1.0)." #: src/settings_translation_file.cpp -#, fuzzy msgid "Initial vertical speed when jumping, in nodes per second." -msgstr "" -"Początkowa prędkość pionowa podczas skoku, w blokach na sekundę do kwadratu." +msgstr "Początkowa prędkość pionowa podczas skoku, w blokach na sekundę." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Instrument builtin.\n" "This is usually only needed by core/builtin contributors" msgstr "" -"Instrument wbudowany.\n" -"Najczęściej potrzebny tylko dla osób pracujących nad jądrem" +"Mierz kod wbudowany.\n" +"Najczęściej potrzebny tylko dla osób pracujących nad silnikiem" #: src/settings_translation_file.cpp -#, fuzzy msgid "Instrument chat commands on registration." -msgstr "Instrument poleceń czatu przy rejestracji." +msgstr "Mierz polecenia czatu przy rejestracji." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Instrument global callback functions on registration.\n" "(anything you pass to a minetest.register_*() function)" msgstr "" -"Poinstruuj globalne funkcje zwrotne przy rejestracji \n" +"Mierz globalne funkcje zwrotne przy rejestracji.\n" "(wszystko co prześlesz do funkcji minetest.register_*() )" #: src/settings_translation_file.cpp msgid "" "Instrument the action function of Active Block Modifiers on registration." msgstr "" -"Poinstruuj działanie funkcji aktywnych modyfikatorów bloków przy rejestracji." +"Mierz działanie funkcji modyfikatorów aktywnych bloków (ABM) przy " +"rejestracji." #: src/settings_translation_file.cpp msgid "" "Instrument the action function of Loading Block Modifiers on registration." msgstr "" -"Poinstruuj działanie funkcji ładowania modyfikatorów bloków przy rejestracji." +"Mierz działanie funkcji modyfikatorów ładowania bloków (LBM) przy " +"rejestracji." #: src/settings_translation_file.cpp msgid "Instrument the methods of entities on registration." -msgstr "Poinstruuj metody jednostkowe przy rejestracji." +msgstr "Mierz metody bytów przy rejestracji." #: src/settings_translation_file.cpp msgid "Interval of saving important changes in the world, stated in seconds." msgstr "Interwał zapisywania ważnych zmian w świecie, w sekundach." #: src/settings_translation_file.cpp -#, fuzzy msgid "Interval of sending time of day to clients, stated in seconds." -msgstr "Interwał wysyłania czasu gry do klientów." +msgstr "Interwał wysyłania czasu gry do klientów, w sekundach." #: src/settings_translation_file.cpp msgid "Inventory items animations" @@ -4200,20 +4255,20 @@ msgstr "Odwróć mysz" #: src/settings_translation_file.cpp msgid "Invert mouse wheel (scroll) direction for item selection in hotbar." msgstr "" +"Odwróć kierunek kółka myszy (przewijania) przy wyborze przedmiotów w " +"hotbarze." #: src/settings_translation_file.cpp msgid "Invert vertical mouse movement." msgstr "Odwróć pionowy ruch myszy." #: src/settings_translation_file.cpp -#, fuzzy msgid "Italic font path" -msgstr "Ścieżka czcionki typu Monospace" +msgstr "Ścieżka czcionki kursywnej" #: src/settings_translation_file.cpp -#, fuzzy msgid "Italic monospace font path" -msgstr "Ścieżka czcionki typu Monospace" +msgstr "Ścieżka czcionki kursywnej typu Monospace" #: src/settings_translation_file.cpp msgid "Item entity TTL" @@ -4224,7 +4279,6 @@ msgid "Iterations" msgstr "Iteracje" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Iterations of the recursive function.\n" "Increasing this increases the amount of fine detail, but also\n" @@ -4245,21 +4299,18 @@ msgid "Joystick button repetition interval" msgstr "Interwał powtarzania przycisku joysticka" #: src/settings_translation_file.cpp -#, fuzzy msgid "Joystick dead zone" -msgstr "Typ Joysticka" +msgstr "Strefa martwa joysticka" #: src/settings_translation_file.cpp msgid "Joystick frustum sensitivity" msgstr "Czułość drgania joysticka" #: src/settings_translation_file.cpp -#, fuzzy msgid "Joystick type" msgstr "Typ Joysticka" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Julia set only.\n" "W component of hypercomplex constant.\n" @@ -4269,12 +4320,11 @@ msgid "" msgstr "" "Wyłącznie dla Zbioru Julii: \n" "komponent W stałej hiperzespolonej, \n" -"która determinuje fraktali.\n" +"która determinuje kształt fraktali.\n" "Nie ma wpływu na fraktale trójwymiarowe.\n" "Zakres to w przybliżeniu -2 do 2." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Julia set only.\n" "X component of hypercomplex constant.\n" @@ -4287,7 +4337,6 @@ msgstr "" "Zakres to w przybliżeniu -2 do 2." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Julia set only.\n" "Y component of hypercomplex constant.\n" @@ -4299,7 +4348,6 @@ msgstr "" "Zakres to w przybliżeniu -2 do 2." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Julia set only.\n" "Z component of hypercomplex constant.\n" @@ -4336,7 +4384,6 @@ msgid "Keyboard and Mouse" msgstr "Klawiatura i mysz" #: src/settings_translation_file.cpp -#, fuzzy msgid "Kick players who sent more than X messages per 10 seconds." msgstr "" "Wyrzuca graczy, którzy wysłali więcej niż X wiadomości w ciągu 10 sekund." @@ -4358,19 +4405,16 @@ msgid "Large cave depth" msgstr "Głębia dużej jaskini" #: src/settings_translation_file.cpp -#, fuzzy msgid "Large cave maximum number" msgstr "Maksymalna liczba dużych jaskiń" #: src/settings_translation_file.cpp -#, fuzzy msgid "Large cave minimum number" msgstr "Minimalna liczba dużych jaskiń" #: src/settings_translation_file.cpp -#, fuzzy msgid "Large cave proportion flooded" -msgstr "Duża część jaskini zalana" +msgstr "Zalana część dużej jaskini" #: src/settings_translation_file.cpp msgid "Leaves style" @@ -4389,32 +4433,34 @@ msgstr "" "- Opaque: wyłącza przeźroczystość" #: src/settings_translation_file.cpp -#, fuzzy msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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ługość interwału czasowego serwera w trakcie którego obiekty są ogólnie " -"aktualizowane \n" -"przez sieć." +"Długość interwału czasowego serwera (w trakcie którego wszystko jest na " +"ogół\n" +"aktualizowane), wyrażony w sekundach.\n" +"Nie ma zastosowania w sesjach hostowanych z menu klienta." #: src/settings_translation_file.cpp -#, fuzzy msgid "Length of liquid waves." -msgstr "Szybkość fal wodnych" +msgstr "Szybkość fal płynów." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Length of time between Active Block Modifier (ABM) execution cycles, stated " "in seconds." -msgstr "Długość czasu pomiędzy wykonywanymi cyklami ABM" +msgstr "" +"Długość czasu pomiędzy cyklami wykonywania modyfikatorów aktywnych bloków " +"(ABM), wyrażona w sekundach." #: src/settings_translation_file.cpp -#, fuzzy msgid "Length of time between NodeTimer execution cycles, stated in seconds." -msgstr "Długość czasu pomiędzy wykonywanymi cyklami NodeTimer" +msgstr "" +"Długość czasu pomiędzy cyklami wykonywania NodeTimer'ów, wyrażona w " +"sekundach." #: src/settings_translation_file.cpp msgid "" @@ -4423,7 +4469,6 @@ msgstr "" "Czas pomiędzy cyklami zarządzania aktywnymi blokami, podany w sekundach." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Level of logging to be written to debug.txt:\n" "- (no logging)\n" @@ -4442,31 +4487,28 @@ msgstr "" "- warning\n" "- action\n" "- info\n" -"- verbose" +"- verbose\n" +"- trace" #: src/settings_translation_file.cpp -#, fuzzy msgid "Light curve boost" -msgstr "Przyśpieszenie środkowe krzywej światła" +msgstr "Wzmocnienie krzywej światła" #: src/settings_translation_file.cpp msgid "Light curve boost center" msgstr "Centrum środkowego przyśpieszenia krzywej światła" #: src/settings_translation_file.cpp -#, fuzzy msgid "Light curve boost spread" -msgstr "Rozrzut przyśpieszenia środkowego krzywej światła" +msgstr "Rozrzut wzmocnienia krzywej światła" #: src/settings_translation_file.cpp -#, fuzzy msgid "Light curve gamma" -msgstr "Przyśpieszenie środkowe krzywej światła" +msgstr "Gamma krzywej światła" #: src/settings_translation_file.cpp -#, fuzzy msgid "Light curve high gradient" -msgstr "Przyśpieszenie środkowe krzywej światła" +msgstr "Górny gradient krzywej światła" #: src/settings_translation_file.cpp msgid "Light curve low gradient" @@ -4517,7 +4559,6 @@ msgid "Liquid queue purge time" msgstr "Czas kolejki czyszczenia cieczy" #: src/settings_translation_file.cpp -#, fuzzy msgid "Liquid sinking" msgstr "Zanurzanie w cieczy" @@ -4544,9 +4585,8 @@ msgstr "" " Przydatne dla twórców modów i operatorów serwerów." #: src/settings_translation_file.cpp -#, fuzzy msgid "Loading Block Modifiers" -msgstr "Interwał modyfikatora aktywnego bloku" +msgstr "Modyfikatory Ładowania Bloków (LBM)" #: src/settings_translation_file.cpp msgid "" @@ -4563,9 +4603,8 @@ msgid "Lower Y limit of dungeons." msgstr "Zmniejsz limit Y dla lochów." #: src/settings_translation_file.cpp -#, fuzzy msgid "Lower Y limit of floatlands." -msgstr "Zmniejsz limit Y dla lochów." +msgstr "Dolny limit Y dla latających wysp." #: src/settings_translation_file.cpp msgid "Main menu script" @@ -4579,27 +4618,20 @@ msgstr "" "kierunku patrzenia." #: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "Zmienia ciecze w nieprzeźroczyste" - -#: src/settings_translation_file.cpp -#, fuzzy msgid "Map Compression Level for Disk Storage" -msgstr "Poziom kompresji mapy dla pamięci masowej dysku" +msgstr "Poziom kompresji mapy dla pamięci masowej na dysku" #: src/settings_translation_file.cpp -#, fuzzy msgid "Map Compression Level for Network Transfer" -msgstr "Poziom kompresji map dla transferu sieciowego" +msgstr "Poziom kompresji mapy dla transferu sieciowego" #: src/settings_translation_file.cpp msgid "Map directory" msgstr "Katalog map" #: src/settings_translation_file.cpp -#, fuzzy msgid "Map generation attributes specific to Mapgen Carpathian." -msgstr "Właściwości generowania mapy określające Mapgen Carpathian." +msgstr "Właściwości generowania mapy specyficzne dla generatora Carpathian." #: src/settings_translation_file.cpp msgid "" @@ -4610,18 +4642,16 @@ msgstr "" "Do płaskiego świata mogą być dodane przypadkowe jeziora i wzgórza." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Map generation attributes specific to Mapgen Fractal.\n" "'terrain' enables the generation of non-fractal terrain:\n" "ocean, islands and underground." msgstr "" -"Właściwości generowania mapy określające Mapgen v7.\n" -"\"grzbiety\" aktywują tworzenie niefraktalnego terenu:\n" +"Właściwości generowania mapy specyficzne dla generatora Fractal.\n" +"\"terrain\" aktywuje tworzenie niefraktalnego terenu:\n" "oceanu, wysp oraz podziemi." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Map generation attributes specific to Mapgen Valleys.\n" "'altitude_chill': Reduces heat with altitude.\n" @@ -4630,7 +4660,7 @@ msgid "" "to become shallower and occasionally dry.\n" "'altitude_dry': Reduces humidity with altitude." msgstr "" -"Atrybuty generowania mapy specyficzne dla dolin Mapgen.\n" +"Atrybuty generowania mapy specyficzne dla generatora Valleys.\n" "'altitude_chill': Zmniejsza ciepło wraz z wysokością nad poziomem morza.\n" "'humid_rivers': Zwiększa wilgotność wokół rzek.\n" "'vary_river_depth': Jeżeli włączone, niska wilgotność i wysoka temperatura " @@ -4639,22 +4669,24 @@ msgstr "" "'altitude_dry': Zmniejsza wilgotność wraz z wysokością." #: src/settings_translation_file.cpp -#, fuzzy msgid "Map generation attributes specific to Mapgen v5." -msgstr "Właściwości generowania mapy określające Mapgen v5." +msgstr "Właściwości generowania mapy specyficzne dla generatora v5." #: 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." +"the 'jungles' flag is ignored.\n" +"The 'temples' flag disables generation of desert temples. Normal dungeons " +"will appear instead." msgstr "" -"Atrybuty generowania map specyficzne dla Generatora map v6.\n" -"Flaga „biomów śnieżnych” włącza nowy system 5 biomów.\n" -"Gdy flaga „biomy śnieżne” jest włączona, dżungle są automatycznie włączane " -"i\n" -"flaga „dżungli” jest ignorowana." +"Właściwości generowania map specyficzne dla generatora v6.\n" +"Flaga 'snowbiomes' włącza nowy system 5 biomów.\n" +"Gdy flaga 'snowbiomes' jest włączona, dżungle są automatycznie włączane i\n" +"flaga 'jungles' jest ignorowana.\n" +"Flaga 'temples' wyłącza generowanie świątyń pustynnych. Zwykłe lochy będą " +"pojawiać się zamiast tego." #: src/settings_translation_file.cpp msgid "" @@ -4677,9 +4709,8 @@ msgid "Map save interval" msgstr "Interwał zapisu mapy" #: src/settings_translation_file.cpp -#, fuzzy msgid "Map shadows update frames" -msgstr "Interwał czasowy aktualizacji cieczy" +msgstr "Klatki aktualizacji cieni mapy" #: src/settings_translation_file.cpp msgid "Mapblock limit" @@ -4690,87 +4721,68 @@ msgid "Mapblock mesh generation delay" msgstr "Opóźnienie generacji siatki bloków Mapblock" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapblock mesh generation threads" -msgstr "Opóźnienie generacji siatki bloków Mapblock" - -#: src/settings_translation_file.cpp -#, fuzzy -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "Wielkość pamięci podręcznej generatora siatki bloków Mapblock w MB" +msgstr "Wątki generowania modelu bloku mapy" #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "Przekroczenie czasu wyładowania bloków mapy" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen Carpathian" -msgstr "Generator mapy fractal" +msgstr "Generator mapy Carpathian" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen Carpathian specific flags" -msgstr "Specyficzne flagi dla generatora Mapgen flat" +msgstr "Specyficzne flagi dla generatora Carpathian" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen Flat" -msgstr "Generator mapy flat" +msgstr "Generator mapy Płaski" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen Flat specific flags" -msgstr "Specyficzne flagi dla generatora Mapgen flat" +msgstr "Specyficzne flagi dla generatora Płaskiego" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen Fractal" -msgstr "Generator mapy fractal" +msgstr "Generator mapy Fractal" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen Fractal specific flags" -msgstr "Specyficzne flagi dla generatora Mapgen flat" +msgstr "Specyficzne flagi dla generatora Fractal" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen V5" -msgstr "Generator mapy v5" +msgstr "Generator mapy V5" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen V5 specific flags" -msgstr "Generator mapy flat flagi" +msgstr "Flagi specyficzne dla generatora mapy V5" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen V6" -msgstr "Generator mapy v6" +msgstr "Generator mapy V6" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen V6 specific flags" -msgstr "Generator mapy flat flagi" +msgstr "Flagi specyficzne dla generatora mapy V6" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen V7" -msgstr "Generator mapy v7" +msgstr "Generator mapy V7" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen V7 specific flags" -msgstr "Specyficzne flagi Mapgen v7" +msgstr "Flagi specyficzne dla generatora mapy V7" #: src/settings_translation_file.cpp msgid "Mapgen Valleys" msgstr "Generator mapy Valleys" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen Valleys specific flags" -msgstr "Specyficzne flagi dla generatora Mapgen flat" +msgstr "Specyficzne flagi dla generatora Valleys" #: src/settings_translation_file.cpp msgid "Mapgen debug" @@ -4805,51 +4817,45 @@ msgid "Maximum FPS" msgstr "Maksymalny FPS" #: src/settings_translation_file.cpp -#, fuzzy msgid "Maximum FPS when the window is not focused, or when the game is paused." -msgstr "Maksymalny FPS gdy gra spauzowana." +msgstr "Maksymalny FPS gdy przełączono poza okno gry lub gra jest zapauzowana." #: src/settings_translation_file.cpp -#, fuzzy msgid "Maximum distance to render shadows." -msgstr "Maksymalna odległość do renderowania cieni." +msgstr "Maksymalna odległość dla renderowania cieni." #: src/settings_translation_file.cpp msgid "Maximum forceloaded blocks" msgstr "Maksymalna ilość bloków załadowanych w sposób wymuszony" #: src/settings_translation_file.cpp -#, fuzzy msgid "Maximum hotbar width" -msgstr "Maksymalna długość hotbar" +msgstr "Maksymalna długość hotbara" #: src/settings_translation_file.cpp -#, fuzzy msgid "Maximum limit of random number of large caves per mapchunk." -msgstr "Maksymalny limit losowej liczby dużych jaskiń na mapchunk." +msgstr "Górna granica losowej liczby dużych jaskiń na mapchunk." #: src/settings_translation_file.cpp -#, fuzzy msgid "Maximum limit of random number of small caves per mapchunk." -msgstr "Maksymalny limit losowej liczby małych jaskiń na mapchunk." +msgstr "Górna granica losowej liczby małych jaskiń na mapchunk." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Maximum liquid resistance. Controls deceleration when entering liquid at\n" "high speed." msgstr "" -"Maksymalny opór cieczy. Wpływa na spowolnienie przy wejściu w ciecz \n" +"Maksymalny opór cieczy. Wpływa na spowolnienie przy wejściu w ciecz\n" "z dużą prędkością." #: src/settings_translation_file.cpp -#, fuzzy 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 "" -"Maksymalna ilość bloków, które są jednocześnie wysyłane na jednego klienta.\n" +"Maksymalna liczba bloków, które są jednocześnie wysyłane na jednego klienta." +"\n" "Maksymalna łączna liczba jest obliczana dynamicznie:\n" "max_total = ceil((#clients + max_users) * per_client / 4)" @@ -4859,25 +4865,22 @@ msgstr "" "Maksymalna liczba bloków, które mogą być skolejkowane podczas wczytywania." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Maximum number of blocks to be queued that are to be generated.\n" "This limit is enforced per player." msgstr "" "Maksymalna liczba bloków do skolejkowania, które mają być wygenerowane.\n" -"Pozostaw puste a odpowiednia liczba zostanie dobrana automatycznie." +"Ten limit jest egzekwowany na gracza." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Maximum number of blocks to be queued that are to be loaded from file.\n" "This limit is enforced per player." msgstr "" "Maksymalna liczba bloków do skolejkowania które mają być wczytane z pliku.\n" -"Pozostaw puste a odpowiednia liczba zostanie dobrana automatycznie." +"Ten limit jest egzekwowany na gracza." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Maximum number of concurrent downloads. Downloads exceeding this limit will " "be queued.\n" @@ -4885,7 +4888,7 @@ msgid "" msgstr "" "Maksymalna liczba jednocześnie pobieranych plików. Pobieranie przekraczające " "ten limit zostanie umieszczone w kolejce.\n" -"Powinien być niższy niż curl_parallel_limit." +"To powinno być niższe niż curl_parallel_limit." #: src/settings_translation_file.cpp msgid "" @@ -4908,7 +4911,6 @@ msgstr "" "numer klienta." #: src/settings_translation_file.cpp -#, fuzzy msgid "Maximum number of players that can be connected simultaneously." msgstr "Maksymalna liczba graczy, która może się jednocześnie połączyć." @@ -4937,34 +4939,30 @@ msgid "Maximum simultaneous block sends per client" msgstr "Maksymalny jednoczesny blok wysłany, na każdego klienta" #: src/settings_translation_file.cpp -#, fuzzy msgid "Maximum size of the outgoing chat queue" -msgstr "Maksymalny rozmiar kolejki wiadomości czatu" +msgstr "Maksymalny rozmiar kolejki wychodzących wiadomości czatu" #: 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 "" -"Maksymalny rozmiar kolejki wiadomości czatu\n" -"Wartość 0, wyłącza kolejkę, -1 to nieograniczony rozmiar kolejki." +"Maksymalny rozmiar kolejki wychodzących wiadomości czatu\n" +"Wartość 0 wyłącza kolejkę, -1 to nieograniczony rozmiar kolejki." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Maximum time a file download (e.g. a mod download) may take, stated in " "milliseconds." -msgstr "Maksymalny czas na pobranie pliku (np.: moda) w ms." +msgstr "Maksymalny czas na pobranie pliku (np. moda) w milisekundach." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Maximum time an interactive request (e.g. server list fetch) may take, " "stated in milliseconds." msgstr "" -"Maksymalny czas, jaki może zająć interaktywne żądanie (np. pobranie listy z " -"serwera), podany w milisekundach." +"Maksymalny czas, jaki może zająć interaktywne żądanie (np. pobranie listy " +"serwerów), podany w milisekundach." #: src/settings_translation_file.cpp msgid "Maximum users" @@ -4987,7 +4985,6 @@ msgid "Method used to highlight selected object." msgstr "Metoda użyta do podświetlenia wybranego obiektu." #: src/settings_translation_file.cpp -#, fuzzy msgid "Minimal level of logging to be written to chat." msgstr "Minimalny poziom logowania, który ma być zapisywany na czacie." @@ -4996,14 +4993,16 @@ msgid "Minimap scan height" msgstr "Wysokość skanowania minimapy" #: src/settings_translation_file.cpp -#, fuzzy -msgid "Minimum limit of random number of large caves per mapchunk." -msgstr "Szum 3D, który wpływa na liczbę lochów na jeden mapchunk." +msgid "Minimum dig repetition interval" +msgstr "Minimalna przerwa pomiędzy powtórzeniem kopania" + +#: src/settings_translation_file.cpp +msgid "Minimum limit of random number of large caves per mapchunk." +msgstr "Dolna granica losowej liczby dużych jaskiń na mapchunk." #: src/settings_translation_file.cpp -#, fuzzy msgid "Minimum limit of random number of small caves per mapchunk." -msgstr "Minimalny limit losowej liczby małych jaskiń na mapchunk." +msgstr "Dolna granica losowej liczby małych jaskiń na mapchunk." #: src/settings_translation_file.cpp msgid "Mipmapping" @@ -5011,26 +5010,23 @@ msgstr "Mip-Mappowanie" #: src/settings_translation_file.cpp msgid "Miscellaneous" -msgstr "" +msgstr "Różne" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mod Profiler" -msgstr "Profiler" +msgstr "Profiler modów" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mod Security" -msgstr "Bezpieczeństwo" +msgstr "Bezpieczeństwo modów" #: src/settings_translation_file.cpp msgid "Mod channels" msgstr "Kanały modów" #: src/settings_translation_file.cpp -#, fuzzy msgid "Modifies the size of the HUD elements." -msgstr "Modyfikuje rozmiar elementów paska HUD." +msgstr "Modyfikuje rozmiar elementów HUD." #: src/settings_translation_file.cpp msgid "Monospace font path" @@ -5041,9 +5037,8 @@ msgid "Monospace font size" msgstr "Rozmiar czcionki Monospace" #: src/settings_translation_file.cpp -#, fuzzy msgid "Monospace font size divisible by" -msgstr "Rozmiar czcionki Monospace" +msgstr "Rozmiar czcionki Monospace podzielny przez" #: src/settings_translation_file.cpp msgid "Mountain height noise" @@ -5054,14 +5049,12 @@ msgid "Mountain noise" msgstr "Szum góry" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mountain variation noise" -msgstr "Szum wysokości góry" +msgstr "Szum zróżnicowania gór" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mountain zero level" -msgstr "Szum góry" +msgstr "Poziom zerowy gór" #: src/settings_translation_file.cpp msgid "Mouse sensitivity" @@ -5071,6 +5064,10 @@ msgstr "Czułość myszy" msgid "Mouse sensitivity multiplier." msgstr "Mnożnik czułości myszy." +#: src/settings_translation_file.cpp +msgid "Movement threshold" +msgstr "Próg ruchu" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "Szum błota" @@ -5088,7 +5085,6 @@ msgid "Mute sound" msgstr "Wycisz dźwięk" #: src/settings_translation_file.cpp -#, fuzzy 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" @@ -5097,8 +5093,8 @@ msgid "" msgstr "" "Nazwa generatora map, który ma być użyty podczas tworzenia nowego świata.\n" "Tworzenie świata w menu głównym nadpisze tę wartość.\n" -"Obecne mapgeny są w bardzo niestabilnym stanie:\n" -"- Opcjonalne floatlands z v7 (domyślnie wyłączone)." +"Obecne mapgeny w bardzo niestabilnym stanie:\n" +"- Opcjonalne latające wyspy z v7 (domyślnie wyłączone)." #: src/settings_translation_file.cpp msgid "" @@ -5153,7 +5149,6 @@ msgid "Number of emerge threads" msgstr "Liczba powstających wątków" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Number of emerge threads to use.\n" "Value 0:\n" @@ -5175,7 +5170,7 @@ msgstr "" "OSTRZEŻENIE: Zwiększenie liczby wątków emerge zwiększa szybkość mapgena " "silnika,\n" "ale może to wpłynąć na wydajność gry przez zakłócanie innych\n" -"procesami, szczególnie w grze dla pojedynczego gracza i/lub podczas " +"procesów, szczególnie w grze dla pojedynczego gracza i/lub podczas " "uruchamiania kodu Lua w\n" "'on_generated'. Dla wielu użytkowników optymalnym ustawieniem może być '1'." @@ -5191,7 +5186,6 @@ msgstr "" "konsumpcją pamięci (4096=100MB, praktyczna zasada)." #: src/settings_translation_file.cpp -#, fuzzy msgid "Number of messages a player may send per 10 seconds." msgstr "Dozwolona liczba wiadomości wysłanych przez gracza w ciągu 10 sekund." @@ -5201,22 +5195,19 @@ msgid "" "Value of 0 (default) will let Minetest autodetect the number of available " "threads." msgstr "" +"Liczba wątków do użycia do generacji modeli.\n" +"Wartość 0 (domyślna) sprawi, że Minetest automatycznie wykryje liczbę " +"dostępnych wątków." #: src/settings_translation_file.cpp msgid "Occlusion Culler" -msgstr "" +msgstr "Occlusion Culler" #: src/settings_translation_file.cpp -#, fuzzy msgid "Occlusion Culling" -msgstr "Occulusion culling po stronie serwera" +msgstr "Pomijanie przesłoniętych modeli po stronie serwera" #: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "Nieprzeźroczyste ciecze" - -#: src/settings_translation_file.cpp -#, fuzzy msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." msgstr "" @@ -5234,9 +5225,12 @@ msgstr "" "otwarty." #: src/settings_translation_file.cpp -#, fuzzy +msgid "OpenGL debug" +msgstr "Debug OpenGL" + +#: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." -msgstr "Opcjonalna zmiana koloru łącza internetowego czatu." +msgstr "Opcjonalna zmiana koloru łącza internetowego na czacie." #: src/settings_translation_file.cpp msgid "" @@ -5249,12 +5243,11 @@ msgstr "" "jest niedostępna." #: src/settings_translation_file.cpp -#, fuzzy 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 "" -"Ścieżka w której zapisywane są zrzuty ekranu. Może być bezwzględna lub " +"Ścieżka, w której zapisywane są zrzuty ekranu. Może być bezwzględna lub " "względna.\n" "Folder zostanie utworzony, jeśli jeszcze nie istnieje." @@ -5287,40 +5280,34 @@ msgid "Pause on lost window focus" msgstr "Pauza, gdy okno jest nieaktywne" #: src/settings_translation_file.cpp -#, fuzzy msgid "Per-player limit of queued blocks load from disk" -msgstr "Limit załadowanych bloków z dysku na jednego gracza" +msgstr "Limit bloków zakolejkowanych do załadowania z dysku na jednego gracza" #: src/settings_translation_file.cpp -#, fuzzy msgid "Per-player limit of queued blocks to generate" -msgstr "Limit kolejek oczekujących do wytworzenia" +msgstr "Limit bloków zakolejkowanych do wygenerowania na jednego gracza" #: src/settings_translation_file.cpp msgid "Physics" msgstr "Fizyka" #: src/settings_translation_file.cpp -#, fuzzy msgid "Place repetition interval" -msgstr "Interwał powtórzenia prawego kliknięcia myszy" +msgstr "Interwał powtórzenia stawiania" #: src/settings_translation_file.cpp msgid "Player transfer distance" msgstr "Odległość przesyłania graczy" #: src/settings_translation_file.cpp -#, fuzzy msgid "Poisson filtering" -msgstr "Filtrowanie dwuliniowe" +msgstr "Filtrowanie Poissona" #: src/settings_translation_file.cpp -#, fuzzy msgid "Post Processing" -msgstr "Przetwarzanie końcowe" +msgstr "Post Processing" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Prevent digging and placing from repeating when holding the respective " "buttons.\n" @@ -5329,7 +5316,8 @@ msgid "" msgstr "" "Zapobiegaj powtarzaniu kopania i stawiania bloków podczas przytrzymania " "przycisków myszy.\n" -"Włącz to jeśli zbyt często kopiesz lub stawiasz obiekty przez przypadek." +"Włącz to jeśli zbyt często kopiesz lub stawiasz obiekty przez przypadek.\n" +"Na ekranach dotykowych, to wpływa tylko na kopanie." #: src/settings_translation_file.cpp msgid "Prevent mods from doing insecure things like running shell commands." @@ -5356,25 +5344,31 @@ msgstr "Profiler" #: src/settings_translation_file.cpp #, fuzzy msgid "Prometheus listener address" -msgstr "Adres słuchacza Prometheusa" +msgstr "Adres nasłuchiwacza Prometheusa" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Prometheus listener address.\n" "If Minetest 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 "" -"Adres listenera Prometheus.\n" +"Adres listenera Prometheusa.\n" "Jeśli Minetest jest skompilowany z włączoną opcją ENABLE_PROMETHEUS,\n" -"włącz słuchanie metryk dla Prometheusa na tym adresie.\n" -"Metryki mogą być pobierane na stronie http://127.0.0.1:30000/metrics" +"włącz listener metryk dla Prometheusa na tym adresie.\n" +"Metryki mogą być ładowane na http://127.0.0.1:30000/metrics" #: src/settings_translation_file.cpp -#, fuzzy msgid "Proportion of large caves that contain liquid." -msgstr "Proporcja dużych jaskiń, które zawierają ciecz." +msgstr "Część dużych jaskiń, która zawiera ciecz." + +#: src/settings_translation_file.cpp +msgid "Protocol version minimum" +msgstr "Minimalna wersja protokołu" + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "Gest uderzenia" #: src/settings_translation_file.cpp msgid "" @@ -5393,6 +5387,10 @@ msgstr "Podwyższa teren by stworzyć doliny wokół rzek." msgid "Random input" msgstr "Losowe wejście" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "Losowa kolejność ładowania modów" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "Najnowsze wiadomości czatu" @@ -5619,8 +5617,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5768,8 +5766,9 @@ msgstr "" "Zakres: od 0.1 do 10.0" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" "Ustaw język. Zostaw puste pole, aby użyć języka systemowego.\n" @@ -5820,6 +5819,10 @@ msgstr "" "Ustaw na prawda aby włączyć efekt bloom.\n" "Jasne kolory będą rozmywać się na sąsiednich obiektach." +#: src/settings_translation_file.cpp +msgid "Set to true to enable volumetric lighting effect (a.k.a. \"Godrays\")." +msgstr "" + #: src/settings_translation_file.cpp #, fuzzy msgid "Set to true to enable waving leaves." @@ -5869,11 +5872,11 @@ 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.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" "Shadery pozwalają na zaawansowane efekty wizualne, mogą również zwiększyć " "wydajność niektórych kart\n" @@ -5965,16 +5968,6 @@ msgstr "" "Zmiana tej wartości ma specjalne zastosowanie, zalecane jest pozostawienie\n" "jej nietkniętą." -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" -"Rozmiar pamięci bloków mapy generatora siatki. Zwiększenie\n" -"zmieni rozmiar % pamięci, ograniczając dane kopiowane z głównego wątku\n" -"oraz ilość drgań." - #: src/settings_translation_file.cpp #, fuzzy msgid "Sky Body Orbit Tilt" @@ -6015,7 +6008,7 @@ msgstr "Płynne oświetlenie" #, fuzzy msgid "" "Smooths rotation of camera when in cinematic mode, 0 to disable. Enter " -"cinematic mode by using the key set in Change Keys." +"cinematic mode by using the key set in Controls." msgstr "" "Wygładza obracanie widoku kamery w trybie kinowym. Wartość 0 wyłącza tą " "funkcję." @@ -6043,6 +6036,15 @@ msgstr "Prędkość skradania, w blokach na sekundę." msgid "Soft shadow radius" msgstr "Przeźroczystość cienia czcionki" +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "Dźwięk" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sound Extensions Blacklist" +msgstr "Flaga czarnej listy ContentDB" + #: src/settings_translation_file.cpp msgid "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -6132,7 +6134,6 @@ msgid "Strip color codes" msgstr "Usuń kody kolorów" #: src/settings_translation_file.cpp -#, fuzzy 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" @@ -6151,12 +6152,12 @@ msgstr "" "wartość ta jest ustawiona\n" "powyżej 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (początek\n" "górnego zwężenia).\n" -"***OSTRZEŻENIE, POTENCJALNE ZAGROŻENIE DLA ŚWIATÓW I WYDAJNOŚCI " -"SERWERÓW***:\n" -"Przy włączonym umieszczaniu wody, tereny pływające muszą być ustawione i " +"***OSTRZEŻENIE, POTENCJALNE ZAGROŻENIE DLA ŚWIATÓW I WYDAJNOŚCI SERWERÓW***:" +"\n" +"Przy włączonym umieszczaniu wody, latające wyspy muszą być skonfigurowane i " "przetestowane\n" -"oraz być warstwą stałą poprzez ustawienie 'mgv7_floatland_density' na 2.0 " -"(lub innej\n" +"oraz być warstwą stałą poprzez ustawienie 'mgv7_floatland_density' na 2.0 (" +"lub innej\n" "wymaganej wartości w zależności od 'mgv7_np_floatland'), \n" "aby uniknąć intensywnego przepływu wody na serwerze oraz ogromnego zalania\n" "powierzchni świata poniżej." @@ -6263,6 +6264,12 @@ msgstr "" "Domyślny format w jakim są zapisywane profile,\n" "gdy wpisujemy `/ profiler save [format]` bez określonego formatu." +#: 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 #, fuzzy msgid "" @@ -6271,13 +6278,27 @@ msgstr "" "Ścieżka pliku zbliżona ścieżce twojego świata, w której zapisywane będą " "profile." +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "Identyfikator użycia joysticka" #: src/settings_translation_file.cpp #, fuzzy -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" "Długość w pikselach wymagana do wejścia w interakcję z ekranem dotykowym." @@ -6295,6 +6316,15 @@ msgstr "" "Wartość domyślna to 1.0 (1/2 węzła).\n" "Wymaga włączenia falujących cieczy." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"The minimum time in seconds it takes between digging nodes when holding\n" +"the dig button." +msgstr "" +"Czas w sekundach między kolejnymi położeniem węzłów po przytrzymaniu\n" +"przycisku umieszczania.." + #: src/settings_translation_file.cpp msgid "The network interface that the server listens on." msgstr "Interfejs sieciowy używany na serwerze." @@ -6330,7 +6360,7 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" "Zaplecze renderowania.\n" "Po zmianie wymagane jest ponowne uruchomienie.\n" @@ -6420,6 +6450,10 @@ msgstr "" "Pierwsze z czterech szumów 2D, które razem określają wysokość gór/łańcuchów " "górskich." +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -6475,15 +6509,15 @@ msgstr "Czułość myszy" msgid "Touchscreen sensitivity multiplier." msgstr "Mnożnik czułości myszy." -#: src/settings_translation_file.cpp -#, fuzzy -msgid "Touchscreen threshold" -msgstr "Próg ekranu dotykowego" - #: src/settings_translation_file.cpp msgid "Tradeoffs for performance" msgstr "Kompromisy dla wydajności" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Translucent liquids" +msgstr "Nieprzeźroczyste ciecze" + #: src/settings_translation_file.cpp msgid "Transparency Sorting Distance" msgstr "Odległość sortowania przezroczystości" @@ -6522,9 +6556,13 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 "" +"Link do pliku JSON zawierającego informacje o najnowszym wydaniu Minetest" #: src/settings_translation_file.cpp msgid "URL to the server list displayed in the Multiplayer Tab." @@ -6558,16 +6596,15 @@ msgstr "Usuń nieużywane dane serwera" #: src/settings_translation_file.cpp msgid "Update information URL" -msgstr "" +msgstr "Zaktualizuj adres URL informacji" #: src/settings_translation_file.cpp msgid "Upper Y limit of dungeons." msgstr "Górna granica Y lochów." #: src/settings_translation_file.cpp -#, fuzzy msgid "Upper Y limit of floatlands." -msgstr "Górna granica Y lochów." +msgstr "Górna granica Y latających wysp." #: src/settings_translation_file.cpp msgid "Use 3D cloud look instead of flat." @@ -6589,7 +6626,7 @@ msgstr "Użyj filtrowania tri-linearnego podczas skalowania tekstur." #: src/settings_translation_file.cpp msgid "Use crosshair for touch screen" -msgstr "" +msgstr "Użyj celownika do ekranu dotykowego" #: src/settings_translation_file.cpp msgid "" @@ -6638,10 +6675,6 @@ msgstr "" msgid "User Interfaces" msgstr "Interfejsy użytkownika" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "VBO" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "Synchronizacja pionowa" @@ -6734,6 +6767,10 @@ msgstr "Joystick wirtualny aktywuje przycisk aux" msgid "Volume" msgstr "Głośność" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +msgstr "" + #: src/settings_translation_file.cpp #, fuzzy msgid "" @@ -6743,6 +6780,16 @@ msgstr "" "Włącza mapowanie paralaksy.\n" "Wymaga włączenia shaderów." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volume when unfocused" +msgstr "Maksymalna ilość klatek na sekundę gdy gra zapauzowana bądź nieaktywna" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volumetric lighting" +msgstr "Płynne oświetlenie" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6888,7 +6935,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Whether the window is maximized." -msgstr "" +msgstr "Kiedy okno jest zmaksymalizowane" #: src/settings_translation_file.cpp msgid "" @@ -6933,7 +6980,7 @@ msgstr "Szerokość linii zaznaczenia bloków." #: src/settings_translation_file.cpp msgid "Window maximized" -msgstr "" +msgstr "Okno zmaksymalizowane" #: src/settings_translation_file.cpp msgid "" @@ -7006,10 +7053,10 @@ 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 "" -"Odległość Y, na której pływające tereny zwężają się od pełnej gęstości do " -"zera.\n" +"Odległość Y, na której latające wyspy zwężają się od pełnej gęstości do zera." +"\n" "Zbieżność rozpoczyna się w tej odległości od granicy Y.\n" -"W przypadku litej warstwy pływów kontroluje wysokość wzgórz/gór.\n" +"W przypadku litej warstwy latającego lądu kontroluje wysokość wzgórz/gór.\n" "Musi być mniejsza lub równa połowie odległości między granicami Y." #: src/settings_translation_file.cpp @@ -7052,12 +7099,18 @@ msgstr "Limit żądań równoległych cURL" #~ msgid "(game support required)" #~ msgstr "(wymagana obsługa gry)" +#~ msgid "- Address: " +#~ msgstr "Adres " + #~ msgid "- Creative Mode: " #~ msgstr "Tryb kreatywny " #~ msgid "- Damage: " #~ msgstr "- Obrażenia: " +#~ msgid "- Port: " +#~ msgstr "- Port: " + #~ msgid "" #~ "0 = parallax occlusion with slope information (faster).\n" #~ "1 = relief mapping (slower, more accurate)." @@ -7095,6 +7148,13 @@ msgstr "Limit żądań równoległych cURL" #~ "Pozostaw pusty aby utworzyć lokalny serwer.\n" #~ "Zauważ że pole adresu w głównym menu nadpisuje te ustawienie." +#~ msgid "" +#~ "Adjust dpi configuration to your screen (non X11/Android only) e.g. for " +#~ "4k screens." +#~ msgstr "" +#~ "Ustaw konfiguracje DPI dla twojego ekranu (nie X11/Tylko Android) np. dla " +#~ "ekranów 4k." + #~ msgid "" #~ "Adjust the gamma encoding for the light tables. Higher numbers are " #~ "brighter.\n" @@ -7169,6 +7229,9 @@ msgstr "Limit żądań równoległych cURL" #~ msgid "Bits per pixel (aka color depth) in fullscreen mode." #~ msgstr "Bity na piksel (głębia koloru) w trybie pełnoekranowym." +#~ msgid "Block bounds shown for all blocks" +#~ msgstr "Granice bloków pokazane dla wszystkich bloków" + #~ msgid "Bump Mapping" #~ msgstr "Mapowanie wypukłości" @@ -7195,6 +7258,9 @@ msgstr "Limit żądań równoległych cURL" #~ msgid "Center of light curve mid-boost." #~ msgstr "Centrum przyśpieszenia środkowego krzywej światła." +#~ msgid "Change Keys" +#~ msgstr "Zmień klawisze" + #, fuzzy #~ msgid "Change keys" #~ msgstr "Zmień klawisze" @@ -7268,6 +7334,38 @@ msgstr "Limit żądań równoległych cURL" #~ msgstr "" #~ "Kontroluje szerokość tuneli, mniejsze wartości tworzą szersze tunele." +#, fuzzy, c-format +#~ msgid "" +#~ "Controls:\n" +#~ "- %s: move forwards\n" +#~ "- %s: move backwards\n" +#~ "- %s: move left\n" +#~ "- %s: move right\n" +#~ "- %s: jump/climb up\n" +#~ "- %s: dig/punch/use\n" +#~ "- %s: place/use\n" +#~ "- %s: sneak/climb down\n" +#~ "- %s: drop item\n" +#~ "- %s: inventory\n" +#~ "- Mouse: turn/look\n" +#~ "- Mouse wheel: select item\n" +#~ "- %s: chat\n" +#~ msgstr "" +#~ "Sterowanie:\n" +#~ "- %s: idź do przodu\n" +#~ "- %s: przesuń się do tyłu\n" +#~ "- %s: przesuń się w lewo\n" +#~ "- %s: przesuń w prawo\n" +#~ "- %s: skok/wspinaj się\n" +#~ "- %s: kopanie/cios\n" +#~ "- %s: połóż/użyj\n" +#~ "- %s: skradanie się/schodzenie w dół\n" +#~ "- %s: upuść przedmiot\n" +#~ "- %s: ekwipunek\n" +#~ "- Mysz: obróć / spójrz\n" +#~ "- Kółko myszy: wybierz element\n" +#~ "- %s: czat\n" + #~ msgid "Creative" #~ msgstr "Kreatywny" @@ -7277,6 +7375,9 @@ msgstr "Limit żądań równoległych cURL" #~ msgid "Crosshair color (R,G,B)." #~ msgstr "Kolor celownika (R,G,B)." +#~ msgid "DPI" +#~ msgstr "DPI" + #~ msgid "Damage" #~ msgstr "Włącz obrażenia" @@ -7364,6 +7465,13 @@ msgstr "Limit żądań równoległych cURL" #~ msgid "Enable register confirmation" #~ msgstr "Włącz potwierdzanie rejestracji" +#~ msgid "" +#~ "Enable vertex buffer objects.\n" +#~ "This should greatly improve graphics performance." +#~ msgstr "" +#~ "Zezwala na korzystanie z VBO (obiektów bufora wierzchołków).\n" +#~ "Powinno to znacznie polepszyć wydajność karty graficznej." + #~ msgid "Enabled" #~ msgstr "Włączone" @@ -7703,6 +7811,9 @@ msgstr "Limit żądań równoległych cURL" #~ msgid "Instrumentation" #~ msgstr "Instrukcja" +#~ msgid "Invalid gamespec." +#~ msgstr "Nieprawidłowa specyfikacja trybu gry." + #~ msgid "Inventory key" #~ msgstr "Ekwipunek" @@ -8444,6 +8555,13 @@ msgstr "Limit żądań równoległych cURL" #~ msgstr "" #~ "Sprawia, że DirectX działa z LuaJIT. Wyłącz jeśli występują kłopoty." +#~ msgid "Makes all liquids opaque" +#~ msgstr "Zmienia ciecze w nieprzeźroczyste" + +#, fuzzy +#~ msgid "Mapblock mesh generator's MapBlock cache size in MB" +#~ msgstr "Wielkość pamięci podręcznej generatora siatki bloków Mapblock w MB" + #~ msgid "Menus" #~ msgstr "Menu" @@ -8677,15 +8795,21 @@ msgstr "Limit żądań równoległych cURL" #~ msgid "Simple Leaves" #~ msgstr "Proste liście" +#~ msgid "" +#~ "Size of the MapBlock cache of the mesh generator. Increasing this will\n" +#~ "increase the cache hit %, reducing the data being copied from the main\n" +#~ "thread, thus reducing jitter." +#~ msgstr "" +#~ "Rozmiar pamięci bloków mapy generatora siatki. Zwiększenie\n" +#~ "zmieni rozmiar % pamięci, ograniczając dane kopiowane z głównego wątku\n" +#~ "oraz ilość drgań." + #~ msgid "Smooth Lighting" #~ msgstr "Płynne oświetlenie" #~ msgid "Smooths rotation of camera. 0 to disable." #~ msgstr "Wygładza obracanie widoku kamery. Wartość 0 wyłącza tą funkcję." -#~ msgid "Sound" -#~ msgstr "Dźwięk" - #~ msgid "Special" #~ msgstr "Specialne" @@ -8745,6 +8869,10 @@ 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" @@ -8790,6 +8918,9 @@ msgstr "Limit żądań równoległych cURL" #~ "Jeśli jest ustawiony na 0, MSAA jest wyłączone.\n" #~ "Po zmianie tej opcji wymagane jest ponowne uruchomienie." +#~ msgid "VBO" +#~ msgstr "VBO" + #~ msgid "Variation of hill height and lake depth on floatland smooth terrain." #~ msgstr "" #~ "Zmienność wysokości wzgórz oraz głębokości jezior na gładkim terenie " @@ -8879,8 +9010,14 @@ msgstr "Limit żądań równoległych cURL" #~ msgid "You died." #~ msgstr "Umarłeś." +#~ msgid "You have no games installed." +#~ msgstr "Nie zainstalowano żadnych trybów gry." + #~ msgid "Z" #~ msgstr "Z" #~ msgid "needs_fallback_font" #~ msgstr "no" + +#~ msgid "ok" +#~ msgstr "ok" diff --git a/po/pt/minetest.po b/po/pt/minetest.po index e119a1c3d..287b89825 100644 --- a/po/pt/minetest.po +++ b/po/pt/minetest.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: Portuguese (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" -"PO-Revision-Date: 2023-08-15 22:23+0000\n" -"Last-Translator: Hugo Carvalho \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" "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.0-dev\n" +"X-Generator: Weblate 5.4-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -36,7 +36,7 @@ msgstr "Comando emitido: " #: builtin/client/chatcommands.lua msgid "List online players" -msgstr "Liste os jogadores online" +msgstr "Listar os jogadores online" #: builtin/client/chatcommands.lua msgid "Online players: " @@ -71,7 +71,8 @@ msgid "Command not available: " msgstr "Comando não disponível: " #: builtin/common/chatcommands.lua -msgid "Get help for commands" +#, fuzzy +msgid "Get help for commands (-t: output in chat)" msgstr "Obtenha ajuda para comandos" #: builtin/common/chatcommands.lua @@ -82,13 +83,10 @@ msgstr "" "tudo." #: builtin/common/chatcommands.lua -msgid "[all | ]" +#, fuzzy +msgid "[all | ] [-t]" msgstr "[all| ]" -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" -msgstr "OK" - #: builtin/fstk/ui.lua msgid "" msgstr "" @@ -105,6 +103,10 @@ msgstr "Ocorreu um erro:" msgid "Main menu" msgstr "Menu principal" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "OK" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Reconectar" @@ -133,19 +135,26 @@ msgstr "Nós suportamos apenas o protocolo versão $1." msgid "We support protocol versions between version $1 and $2." msgstr "Nós suportamos as versões de protocolo entre $1 e $2." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "\"$1\" já existe. Gostaria de sobrescrevê-lo?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" +msgstr "Erro na instalação \"$1\": $2" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." -msgstr "As dependências de $1 e $2 serão instaladas." +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download \"$1\"" +msgstr "Erro ao baixar $1" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" -msgstr "$1 por $2" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr "Falhou em descarregar $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "Erro na extração: \"$1\" (Tipo de arquivo não suportado ou corrompido)" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" @@ -153,156 +162,157 @@ msgstr "" "A descarregar $1,\n" "$2 na fila" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." msgstr "A descarregar $1..." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "$1 dependências necessárias não foram encontradas." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "$1 serão instalados e $2 dependências serão ignoradas." - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "Todos os pacotes" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "Já instalado" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "Voltar ao menu principal" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "ContentDB não está disponível quando Minetest é compilado sem cURL" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "A descarregar..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "Jogos" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +msgstr "Instalar" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp +msgid "Loading..." +msgstr "A carregar..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Mods" +msgstr "Mods" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "Nenhum pacote pode ser recuperado" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "Sem resultados" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "Sem atualizações" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "Enfileirado" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "Pacotes de texturas" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "O pacote $1 não foi encontrado." + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "Desinstalar" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "Atualizar" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "Atualizar tudo [$1]" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "View more information in a web browser" +msgstr "Exibir mais informações num navegador da Web" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "You need to install a game before you can install a mod" +msgstr "Você precisa instalar um jogo antes de poder instalar um mod" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 and $2 dependencies will be installed." +msgstr "As dependências de $1 e $2 serão instaladas." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "$1 por $2" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "$1 dependências necessárias não foram encontradas." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "$1 serão instalados e $2 dependências serão ignoradas." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "Já instalado" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "Jogo base:" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "Cancelar" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "ContentDB não está disponível quando Minetest é compilado sem cURL" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "Dependências:" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "A descarregar..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "Erro na instalação \"$1\": $2" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download \"$1\"" -msgstr "Erro ao baixar $1" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "Falhou em descarregar $1" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "Erro na extração: \"$1\" (Tipo de arquivo não suportado ou corrompido)" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "Jogos" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "Instalar" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "Instalar $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "Instalar dependências ausentes" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "A carregar..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "Mods" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "Nenhum pacote pode ser recuperado" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "Sem resultados" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "Sem atualizações" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "Não encontrado" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "Sobrescrever" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "Verifique se o jogo base está correto." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" -msgstr "Enfileirado" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" +msgstr "\"$1\" já existe. Gostaria de sobrescrevê-lo?" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "Pacotes de texturas" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "Desinstalar" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "Atualizar" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "Atualizar tudo [$1]" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "Exibir mais informações num navegador da Web" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" -msgstr "" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" +msgstr "Sobrescrever" #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" @@ -452,10 +462,20 @@ msgstr "Criar" msgid "Decorations" msgstr "Decorações" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." msgstr "O Development Test destina-se apenas a programadores." +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "Masmorras" @@ -650,7 +670,7 @@ msgstr "Registe-se" #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "Dismiss" -msgstr "" +msgstr "Ignorar" #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "" @@ -658,21 +678,25 @@ msgid "" "\"Minetest Game\". Since Minetest 5.8.0, Minetest ships without a default " "game." msgstr "" +"Por muito tempo, a engine Minetest foi publicada com um jogo padrão chamado " +"\"Minetest Game\". Desde o Minetest 5.8.0, Minetest agora é publicado sem um " +"jogo padrão." #: 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 "" +"Se quiser continuar jogando em seus mundos de Minetest Game, você precisa " +"reinstalar o Minetest Game." #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "Minetest Game is no longer installed by default" -msgstr "" +msgstr "Minetest Game não vem mais instalado por padrão" #: builtin/mainmenu/dlg_reinstall_mtg.lua -#, fuzzy msgid "Reinstall Minetest Game" -msgstr "Instalar outro jogo" +msgstr "Reinstalar Minetest Game" #: builtin/mainmenu/dlg_rename_modpack.lua msgid "Accept" @@ -749,9 +773,8 @@ msgid "Select file" msgstr "Selecione o ficheiro" #: builtin/mainmenu/settings/components.lua -#, fuzzy msgid "Set" -msgstr "Seleccionar" +msgstr "Selecionar" #: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua msgid "(No description of setting given)" @@ -820,20 +843,16 @@ msgstr "amenizado" #: builtin/mainmenu/settings/dlg_settings.lua msgid "(Use system language)" -msgstr "" +msgstr "(Usar idioma do sistema)" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Accessibility" -msgstr "" +msgstr "Acessibilidade" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Back" msgstr "Voltar" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "Mudar teclas" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -843,7 +862,8 @@ msgstr "Chat" msgid "Clear" msgstr "Limpar" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "Controles" @@ -852,18 +872,16 @@ msgid "General" msgstr "Em geral" #: builtin/mainmenu/settings/dlg_settings.lua -#, fuzzy msgid "Movement" -msgstr "Modo rápido" +msgstr "Movimento" #: builtin/mainmenu/settings/dlg_settings.lua -#, fuzzy msgid "Reset setting to default" -msgstr "Restaurar valores por defeito" +msgstr "Restaurar valores padrão" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Reset setting to default ($1)" -msgstr "" +msgstr "Restaurar valores padrão ($1)" #: builtin/mainmenu/settings/dlg_settings.lua builtin/mainmenu/tab_online.lua msgid "Search" @@ -871,7 +889,7 @@ msgstr "Procurar" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Show advanced settings" -msgstr "" +msgstr "Exibir configurações avançadas" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Show technical names" @@ -890,12 +908,14 @@ msgid "Content: Mods" msgstr "Conteúdo: Mods" #: builtin/mainmenu/settings/shadows_component.lua +#, fuzzy msgid "(The game will need to enable shadows as well)" -msgstr "" +msgstr "(O jogo precisará habilitar sombras também)" #: builtin/mainmenu/settings/shadows_component.lua +#, fuzzy msgid "Custom" -msgstr "" +msgstr "Personalizado" #: builtin/mainmenu/settings/shadows_component.lua msgid "Disabled" @@ -979,18 +999,16 @@ msgid "Browse online content" msgstr "Procurar conteúdo online" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Browse online content [$1]" -msgstr "Procurar conteúdo online" +msgstr "Procurar conteúdo online [$1]" #: builtin/mainmenu/tab_content.lua msgid "Content" msgstr "Conteúdo" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Content [$1]" -msgstr "Conteúdo" +msgstr "Conteúdo [$1]" #: builtin/mainmenu/tab_content.lua msgid "Disable Texture Pack" @@ -1013,9 +1031,8 @@ msgid "Rename" msgstr "Renomear" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Update available?" -msgstr "" +msgstr "Atualização disponível?" #: builtin/mainmenu/tab_content.lua msgid "Use Texture Pack" @@ -1053,6 +1070,17 @@ msgstr "Instalar um jogo" msgid "Install games from ContentDB" msgstr "Instalar jogos do ContentDB" +#: builtin/mainmenu/tab_local.lua +#, fuzzy +msgid "Minetest doesn't come with a game by default." +msgstr "Minetest Game não vem mais instalado por padrão" + +#: builtin/mainmenu/tab_local.lua +msgid "" +"Minetest is a game-creation platform that allows you to play many different " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "Novo" @@ -1086,8 +1114,9 @@ msgid "Start Game" msgstr "Iniciar o jogo" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." -msgstr "Você não possui jogos instalados." +#, fuzzy +msgid "You need to install a game before you can create a world." +msgstr "Você precisa instalar um jogo antes de poder instalar um mod" #: builtin/mainmenu/tab_online.lua msgid "Address" @@ -1166,18 +1195,10 @@ msgstr "A carregar texturas..." msgid "Rebuilding shaders..." msgstr "A reconstruir sombras..." -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "Erro de ligação (excedeu tempo?)" - #: src/client/clientlauncher.cpp msgid "Could not find or load game: " msgstr "Não foi possível localizar ou carregar jogo " -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "Especificação de jogo inválida." - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "Menu Principal" @@ -1202,7 +1223,11 @@ msgstr "Ficheiro de palavra-passe fornecido falhou em abrir : " msgid "Provided world path doesn't exist: " msgstr "O caminho fornecido do mundo não existe: " -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "Media..." + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp msgid "" "\n" "Check debug.txt for details." @@ -1210,18 +1235,10 @@ msgstr "" "\n" "Consulte debug.txt para mais detalhes." -#: src/client/game.cpp -msgid "- Address: " -msgstr "- Endereço: " - #: src/client/game.cpp msgid "- Mode: " msgstr "- Modo: " -#: src/client/game.cpp -msgid "- Port: " -msgstr "-Porta: " - #: src/client/game.cpp msgid "- Public: " msgstr "- Público: " @@ -1256,10 +1273,6 @@ msgstr "Avanço automático para frente ativado" msgid "Block bounds hidden" msgstr "Limites de bloco ocultos" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "Limites de bloco mostrados para todos os blocos" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "Limites de bloco mostrados para o bloco atual" @@ -1277,13 +1290,12 @@ msgid "Camera update enabled" msgstr "Atualização da camera habilitada" #: src/client/game.cpp -#, fuzzy msgid "Can't show block bounds (disabled by game or mod)" msgstr "Não é possível mostrar limites de bloco (desativado por mod ou jogo)" #: src/client/game.cpp msgid "Change Password" -msgstr "Mudar palavra-passe" +msgstr "Mudar Senha" #: src/client/game.cpp msgid "Cinematic mode disabled" @@ -1305,6 +1317,10 @@ msgstr "O scripting de cliente está desativado" msgid "Connecting to server..." msgstr "A conectar ao servidor..." +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "Erro de ligação (excedeu tempo?)" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "A conexão falhou por motivo desconhecido" @@ -1313,47 +1329,14 @@ msgstr "A conexão falhou por motivo desconhecido" msgid "Continue" msgstr "Continuar" -#: src/client/game.cpp -#, fuzzy, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" -"Controles:\n" -"- %s: mover para a frente\n" -"- %s: mover para trás\n" -"- %s: mover para a esquerda\n" -"- %s: mover para a direita\n" -"- %s: saltar/escalar\n" -"- %s: cavar/socar\n" -"- %s: colocar/usar\n" -"- %s: esgueirar/descer\n" -"- %s: soltar item\n" -"- %s: inventário\n" -"- Rato: virar/ver\n" -"- Roda do rato: selecionar item\n" -"- %s: bate-papo\n" - #: src/client/game.cpp #, fuzzy msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1445,6 +1428,11 @@ msgstr "Névoa desativada" msgid "Fog enabled" msgstr "Névoa habilitada" +#: src/client/game.cpp +#, fuzzy +msgid "Fog enabled by game or mod" +msgstr "Zoom atualmente desativado por jogo ou mod" + #: src/client/game.cpp msgid "Game info:" msgstr "Info do jogo:" @@ -1465,10 +1453,6 @@ msgstr "Definições dos Itens..." msgid "KiB/s" msgstr "KiB/s" -#: src/client/game.cpp -msgid "Media..." -msgstr "Media..." - #: src/client/game.cpp msgid "MiB/s" msgstr "MiB/s" @@ -1626,10 +1610,6 @@ msgstr "Mostrar wireframe" msgid "Zoom currently disabled by game or mod" msgstr "Zoom atualmente desativado por jogo ou mod" -#: src/client/game.cpp -msgid "ok" -msgstr "ok" - #: src/client/gameui.cpp msgid "Chat currently disabled by game or mod" msgstr "Conversa atualmente desativada por jogo ou mod" @@ -1963,6 +1943,15 @@ msgstr "Minimapa em modo de superfície, ampliação %dx" msgid "Minimap in texture mode" msgstr "Minimapa em modo de textura" +#: src/client/shader.cpp +#, fuzzy, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "Falha ao abrir página da web" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2156,6 +2145,19 @@ msgstr "Zoom" msgid "press key" msgstr "pressione a tecla" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +#, fuzzy +msgid "Unable to open URL" +msgstr "Falha ao abrir página da web" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "Mudar" @@ -2189,6 +2191,7 @@ msgstr "Volume do som: %d%%" #. 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 "pt" @@ -2204,9 +2207,9 @@ msgid "Name is taken. Please choose another name" msgstr "Este nome já foi escolhido. Por favor, escolha outro nome" #: src/server.cpp -#, fuzzy, c-format +#, c-format msgid "%s while shutting down: " -msgstr "A desligar..." +msgstr "%s enquanto fechava: " #: src/settings_translation_file.cpp msgid "" @@ -2418,14 +2421,6 @@ msgstr "Distância de envio de objetos ativos" msgid "Adds particles when digging a node." msgstr "Adiciona partículas quando escava um node." -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" -"Ajustar configuração de dpi ao seu ecrã (não aplicável a X11/Android) ex: " -"para ecrãs 4K." - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2455,6 +2450,10 @@ msgstr "Nome do administrador" msgid "Advanced" msgstr "Avançado" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2494,14 +2493,12 @@ msgid "Announce to this serverlist." msgstr "Anuncie para esta lista de servidor." #: src/settings_translation_file.cpp -#, fuzzy msgid "Anti-aliasing scale" -msgstr "Antialiasing:" +msgstr "Escala de antiserrilhamento" #: src/settings_translation_file.cpp -#, fuzzy msgid "Antialiasing method" -msgstr "Antialiasing:" +msgstr "Método de antiserrilhamento" #: src/settings_translation_file.cpp msgid "Append item name" @@ -2515,6 +2512,17 @@ msgstr "Concatenar nome do item a descrição." msgid "Apple trees noise" msgstr "Ruído de Macieiras" +#: 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 "Arm inertia" msgstr "Inercia dos braços" @@ -2532,18 +2540,40 @@ msgid "Ask to reconnect after crash" msgstr "Pedir para reconectar após de bloqueio de sistema" #: src/settings_translation_file.cpp +#, fuzzy 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 will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +msgstr "" +"Nesta distância, o servidor otimizará agressivamente quais blocos são " +"enviados aos \n" +"clientes.\n" +"Pequenos valores potencialmente melhoram muito o desempenho, à custa de \n" +"falhas de renderização visíveis (alguns blocos não serão processados debaixo " +"da \n" +"água e nas cavernas, bem como às vezes em terra).\n" +"Configure isso como um valor maior do que a " +"distância_máxima_de_envio_do_bloco \n" +"para desativar essa otimização.\n" +"Especificado em barreiras do mapa (16 nós)." + +#: src/settings_translation_file.cpp +#, fuzzy +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 "" "Nesta distância, o servidor otimizará agressivamente quais blocos são " "enviados aos \n" @@ -2619,6 +2649,11 @@ msgstr "Biomas" msgid "Biome noise" msgstr "Ruído da Biome" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Block cull optimize distance" +msgstr "Distância otimizada de envio de bloco" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "Distância otimizada de envio de bloco" @@ -2632,9 +2667,8 @@ msgid "Bloom Intensity" msgstr "Intensidade da floração" #: src/settings_translation_file.cpp -#, fuzzy msgid "Bloom Radius" -msgstr "Bloom Radius" +msgstr "Raio de Bloom" #: src/settings_translation_file.cpp msgid "Bloom Strength Factor" @@ -2838,6 +2872,12 @@ msgstr "Névoa colorida" msgid "Colored shadows" msgstr "Sombra colorida" +#: 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -3007,10 +3047,6 @@ msgstr "" "Cor da cruz (R, G, B).\n" "Também controla a cor da cruz do objeto" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "DPI" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "Limite do tamanho do ficheiro de log de depuração" @@ -3065,6 +3101,25 @@ msgstr "" "Isso simula um efeito de sombras suaves aplicando um PCF ou um Poisson disk\n" "mas também usa mais 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 " +"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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" +"Ativar para impedir a conexão de clientes antigos.\n" +"Clientes antigos são compatíveis no sentido em que não bloquearão quando " +"conectam \n" +"a servidores recentes, mas poderão não suportar todos as funcionalidades " +"esperadas." + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "Define áreas onde árvores têm maçãs." @@ -3271,6 +3326,11 @@ msgstr "Ativar Bloom" msgid "Enable Bloom Debug" msgstr "Ativar Bloom Debug" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Debanding" +msgstr "Ativar Dano" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3297,6 +3357,11 @@ msgstr "" "Quando em true usa o Poisson disk para fazer \"sombras suaves\". Caso " "contrário, usa filtragem PCF." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Post Processing" +msgstr "Pós-processamento" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "" @@ -3342,6 +3407,11 @@ msgstr "Ativar segurança de extras" 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 "Ativa a entrada de comandos aleatória (apenas usado para testes)." + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "Ativa a entrada de comandos aleatória (apenas usado para testes)." @@ -3372,6 +3442,11 @@ msgstr "" "a servidores recentes, mas poderão não suportar todos as funcionalidades " "esperadas." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable touchscreen" +msgstr "Tela sensível ao toque" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3384,14 +3459,6 @@ msgstr "" "Servidores remotos oferecem uma maneira mais rápida de descarregar media\n" "(ex. texturas) quando se estiver a conectar ao servidor." -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" -"Ativar os objectos buffer de vértice.\n" -"Isto deve melhorar muito o desempenho gráfico." - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3432,6 +3499,19 @@ msgstr "Ativa animação de itens no inventário." msgid "Enables caching of facedir rotated meshes." msgstr "Ativar armazenamento em cache para os meshes das faces." +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -3955,14 +4035,12 @@ msgid "How deep to make rivers." msgstr "Quão profundo serão os rios." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "How fast liquid waves will move. Higher = faster.\n" "If negative, liquid waves will move backwards." msgstr "" "A velocidade com que as ondas líquidas se movem. Maior = mais rápido.\n" -"Se negativo, as ondas líquidas se moverão para trás.\n" -"Requer que a ondulação de líquidos esteja ativada." +"Se negativo, as ondas líquidas se moverão para trás." #: src/settings_translation_file.cpp msgid "" @@ -4394,19 +4472,20 @@ msgstr "" "- Opaque: desativa transparência" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" "Duração de um tick do servidor e o intervalo no qual os objetos são " "geralmente atualizados ao longo\n" "rede, declarada em segundos." #: src/settings_translation_file.cpp -#, fuzzy msgid "Length of liquid waves." -msgstr "Velocidade de balanço da água" +msgstr "Tamanho das ondas na água." #: src/settings_translation_file.cpp msgid "" @@ -4577,10 +4656,6 @@ msgstr "" "Fazer cores de névoa e céu dependerem do dia (amanhecer/pôr do sol) e exibir " "a direção." -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "Torna todos os líquidos opacos" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "Nível de Compressão de Mapa no Armazenamento em Disco" @@ -4636,11 +4711,14 @@ msgid "Map generation attributes specific to Mapgen v5." msgstr "Atributos de geração de mapa específicos ao gerador 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" "When the 'snowbiomes' flag is enabled jungles are automatically enabled and\n" -"the 'jungles' flag is ignored." +"the 'jungles' flag is ignored.\n" +"The 'temples' flag disables generation of desert temples. Normal dungeons " +"will appear instead." msgstr "" "Atributos de geração de mapas específicos do Mapgen v6.\n" "A marcação \"snowbiomes\" ativa o novo sistema de 5 biomas.\n" @@ -4685,12 +4763,6 @@ msgstr "Limite de geração de mapa" msgid "Mapblock mesh generation threads" msgstr "Limite de geração de mapa" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "" -"Tamanho em MB da memória cache de MapBlock para o gerador de Malha de " -"Mapblock" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "Tempo limite de descarregamento do mapblock" @@ -4966,6 +5038,11 @@ msgstr "Nível mínimo de registo a ser impresso no chat." msgid "Minimap scan height" msgstr "Altura de varredura do mini-mapa" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Minimum dig repetition interval" +msgstr "Intervalo de repetição da ação pôr" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "" @@ -5036,6 +5113,11 @@ msgstr "Sensibilidade do rato" msgid "Mouse sensitivity multiplier." msgstr "Multiplicador de sensibilidade do rato." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Movement threshold" +msgstr "Limite da caverna" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "Ruído de Lama" @@ -5178,10 +5260,6 @@ msgstr "" msgid "Occlusion Culling" msgstr "Separação de oclusão no lado do servidor" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "Líquidos Opacos" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -5197,6 +5275,11 @@ msgstr "" "formspec está\n" "aberto." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "OpenGL debug" +msgstr "Depuração do gerador de mapa" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "Substituição opcional da cor de ligações do bate-papo." @@ -5330,6 +5413,15 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "Proporção de cavernas grandes que contém líquido." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Protocol version minimum" +msgstr "A versão do protocolo não coincide. " + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -5347,6 +5439,10 @@ msgstr "Eleva o terreno para fazer vales em torno dos rios." msgid "Random input" msgstr "Entrada aleatória" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "Mensagens de chat recentes" @@ -5557,8 +5653,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5681,15 +5777,14 @@ msgid "Serverlist file" msgstr "Ficheiro da lista de servidores" #: src/settings_translation_file.cpp -#, fuzzy 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 "" -"Defina a inclinação da órbita do Sol/Lua em graus\n" -"Valor 0 significa sem inclinação/ órbita vertical.\n" -"Valor mínimo de 0.0 e máximo de 60.0" +"Defina a inclinação da órbita do Sol/Lua em graus.\n" +"Jogos podem mudar a órbita por API.\n" +"Valor 0 significa sem inclinação / órbita vertical." #: src/settings_translation_file.cpp #, fuzzy @@ -5705,8 +5800,9 @@ msgstr "" "Faixa: de 0,1 a 10,0" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" "Defina o idioma. Deixe vazio para usar a linguagem do sistema.\n" @@ -5756,6 +5852,10 @@ msgstr "" "Defina como true para ativar o efeito bloom.\n" "Cores brilhantes vão sangrar sobre os objetos vizinhos." +#: src/settings_translation_file.cpp +msgid "Set to true to enable volumetric lighting effect (a.k.a. \"Godrays\")." +msgstr "" + #: src/settings_translation_file.cpp #, fuzzy msgid "Set to true to enable waving leaves." @@ -5810,11 +5910,11 @@ msgid "Shaders" msgstr "Sombras" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" "Sombreadores permitem efeitos visuais avançados e podem aumentar a " "performance em algumas placas de\n" @@ -5899,18 +5999,6 @@ msgstr "" "Alterar este valor é para uso especial, é recomendado deixar\n" "inalterado." -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" -"Tamanho da memória cache do MapBlock do gerador de malha. Aumentar isso " -"aumentará\n" -"o percentual de hit do cache %, a reduzir os dados que são copiados do " -"encadeamento principal,\n" -"e assim reduz o jitter." - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "Inclinação Da Órbita Do Céu" @@ -5949,7 +6037,7 @@ msgstr "Iluminação suave" #, fuzzy msgid "" "Smooths rotation of camera when in cinematic mode, 0 to disable. Enter " -"cinematic mode by using the key set in Change Keys." +"cinematic mode by using the key set in Controls." msgstr "Suaviza a rotação da câmara no modo cinemático. 0 para desativar." #: src/settings_translation_file.cpp @@ -5971,6 +6059,15 @@ msgstr "Velocidade furtiva, em nós por segundo." msgid "Soft shadow radius" msgstr "Raio das sombras suaves" +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "Som" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sound Extensions Blacklist" +msgstr "Lista negra de flags do ContentDB" + #: src/settings_translation_file.cpp msgid "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -6181,6 +6278,12 @@ msgstr "" "O formato padrão no qual as análises estão a ser gravadas,\n" "Quando chamado `/profiler save [formato]` sem formato." +#: 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 #, fuzzy msgid "" @@ -6189,13 +6292,27 @@ msgstr "" "O caminho de ficheiro relativo ao sua pasta do mundo no qual as analises " "serão salvas." +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "O identificador do joystick para usar" #: src/settings_translation_file.cpp #, fuzzy -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" "A largura em pixels necessária para a interação de ecrã de toque começar." @@ -6213,6 +6330,15 @@ msgstr "" "O padrão é 1.0 (meio nó).\n" "Requer ondas em líquidos ativada." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"The minimum time in seconds it takes between digging nodes when holding\n" +"the dig button." +msgstr "" +"O tempo em segundos que leva entre as colocações de nó repetidas ao segurar\n" +"o botão de pôr." + #: src/settings_translation_file.cpp msgid "The network interface that the server listens on." msgstr "A interface de rede no qual o servidor escuta (aguarda conexão)." @@ -6249,14 +6375,12 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" "O back-end de renderização.\n" -"É necessário reiniciar após alterar isso.\n" -"Nota: No Android, use OGLES1 se não tiver certeza! A app pode falhar ao " -"iniciar de outra forma.\n" -"Em outras plataformas, OpenGL é recomendado.\n" -"Shaders são suportados por OpenGL (somente desktop) e OGLES2 (experimental)" +"Nota: É necessário reiniciar após mudar isso!\n" +"OpenGL é o padrão para desktop, e OGLES2 para Android.\n" +"Shaders são suportados por OpenGL e OGLES2 (experimental)." #: src/settings_translation_file.cpp msgid "" @@ -6335,6 +6459,10 @@ msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "" "Terceiro de 4 ruídos 2D que juntos definem a altura de colinas/montanhas." +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -6390,15 +6518,15 @@ msgstr "Sensibilidade do rato" msgid "Touchscreen sensitivity multiplier." msgstr "Multiplicador de sensibilidade do rato." -#: src/settings_translation_file.cpp -#, fuzzy -msgid "Touchscreen threshold" -msgstr "Limiar o ecrã de toque" - #: src/settings_translation_file.cpp msgid "Tradeoffs for performance" msgstr "Trocas por desempenho" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Translucent liquids" +msgstr "Líquidos Opacos" + #: src/settings_translation_file.cpp msgid "Transparency Sorting Distance" msgstr "Distância de classificação de transparência" @@ -6436,8 +6564,11 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 para o arquivo JSON que fornece informações sobre a versão mais recente " "do Minetest" @@ -6556,10 +6687,6 @@ msgstr "" msgid "User Interfaces" msgstr "Interfaces de Usuário" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "VBO" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "Sincronização Vertical" @@ -6651,6 +6778,10 @@ msgstr "Joystick virtual ativa botão especial" msgid "Volume" msgstr "Volume do som" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Volume of all sounds.\n" @@ -6659,6 +6790,16 @@ msgstr "" "Volume de todos os sons.\n" "Requer que o sistema de som esteja ativado." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volume when unfocused" +msgstr "FPS quando desfocado ou pausado" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volumetric lighting" +msgstr "Iluminação suave" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6963,12 +7104,18 @@ msgstr "limite paralelo de cURL" #~ msgid "(game support required)" #~ msgstr "(Suporte de jogo necessário)" +#~ msgid "- Address: " +#~ msgstr "- Endereço: " + #~ msgid "- Creative Mode: " #~ msgstr "Modo Criativo: " #~ msgid "- Damage: " #~ msgstr "-Dano: " +#~ msgid "- Port: " +#~ msgstr "-Porta: " + #~ msgid "" #~ "0 = parallax occlusion with slope information (faster).\n" #~ "1 = relief mapping (slower, more accurate)." @@ -7007,6 +7154,13 @@ msgstr "limite paralelo de cURL" #~ "Note que o campo de endereço no menu principal sobrescreve esta " #~ "configuração." +#~ msgid "" +#~ "Adjust dpi configuration to your screen (non X11/Android only) e.g. for " +#~ "4k screens." +#~ msgstr "" +#~ "Ajustar configuração de dpi ao seu ecrã (não aplicável a X11/Android) ex: " +#~ "para ecrãs 4K." + #~ msgid "" #~ "Adjust the gamma encoding for the light tables. Higher numbers are " #~ "brighter.\n" @@ -7081,6 +7235,9 @@ msgstr "limite paralelo de cURL" #~ msgid "Bits per pixel (aka color depth) in fullscreen mode." #~ msgstr "Bits por pixel (profundidade de cor) no modo de ecrã inteiro." +#~ msgid "Block bounds shown for all blocks" +#~ msgstr "Limites de bloco mostrados para todos os blocos" + #~ msgid "Bump Mapping" #~ msgstr "Bump mapping" @@ -7104,6 +7261,9 @@ msgstr "limite paralelo de cURL" #~ msgid "Center of light curve mid-boost." #~ msgstr "Centro do aumento da curva de luz." +#~ msgid "Change Keys" +#~ msgstr "Mudar teclas" + #, fuzzy #~ msgid "Change keys" #~ msgstr "Mudar teclas" @@ -7177,6 +7337,38 @@ msgstr "limite paralelo de cURL" #~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." #~ msgstr "Controla a largura dos túneis, um valor menor cria túneis maiores." +#, c-format +#~ msgid "" +#~ "Controls:\n" +#~ "- %s: move forwards\n" +#~ "- %s: move backwards\n" +#~ "- %s: move left\n" +#~ "- %s: move right\n" +#~ "- %s: jump/climb up\n" +#~ "- %s: dig/punch/use\n" +#~ "- %s: place/use\n" +#~ "- %s: sneak/climb down\n" +#~ "- %s: drop item\n" +#~ "- %s: inventory\n" +#~ "- Mouse: turn/look\n" +#~ "- Mouse wheel: select item\n" +#~ "- %s: chat\n" +#~ msgstr "" +#~ "Controles:\n" +#~ "- %s: mover para a frente\n" +#~ "- %s: mover para trás\n" +#~ "- %s: mover para a esquerda\n" +#~ "- %s: mover para a direita\n" +#~ "- %s: saltar/escalar\n" +#~ "- %s: cavar/socar/usar\n" +#~ "- %s: colocar/usar\n" +#~ "- %s: esgueirar/descer\n" +#~ "- %s: soltar item\n" +#~ "- %s: inventário\n" +#~ "- Rato: virar/ver\n" +#~ "- Roda do rato: selecionar item\n" +#~ "- %s: bate-papo\n" + #~ msgid "Creative" #~ msgstr "Criar" @@ -7186,6 +7378,9 @@ msgstr "limite paralelo de cURL" #~ msgid "Crosshair color (R,G,B)." #~ msgstr "Cor do cursor (R,G,B)." +#~ msgid "DPI" +#~ msgstr "DPI" + #~ msgid "Damage" #~ msgstr "Ativar dano" @@ -7280,6 +7475,13 @@ msgstr "limite paralelo de cURL" #~ msgid "Enable register confirmation" #~ msgstr "Ativar registo de confirmação" +#~ msgid "" +#~ "Enable vertex buffer objects.\n" +#~ "This should greatly improve graphics performance." +#~ msgstr "" +#~ "Ativar os objectos buffer de vértice.\n" +#~ "Isto deve melhorar muito o desempenho gráfico." + #~ msgid "Enabled" #~ msgstr "Ativado" @@ -7590,6 +7792,9 @@ msgstr "limite paralelo de cURL" #~ msgid "Instrumentation" #~ msgstr "Monitorização" +#~ msgid "Invalid gamespec." +#~ msgstr "Especificação de jogo inválida." + #~ msgid "Inventory key" #~ msgstr "Tecla de inventário" @@ -8284,6 +8489,14 @@ msgstr "limite paralelo de cURL" #~ msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles." #~ msgstr "Faz o DirectX trabalhar com LuaJIT. Desative se causa problemas." +#~ msgid "Makes all liquids opaque" +#~ msgstr "Torna todos os líquidos opacos" + +#~ msgid "Mapblock mesh generator's MapBlock cache size in MB" +#~ msgstr "" +#~ "Tamanho em MB da memória cache de MapBlock para o gerador de Malha de " +#~ "Mapblock" + #~ msgid "Menus" #~ msgstr "Opções para menus" @@ -8516,15 +8729,23 @@ msgstr "limite paralelo de cURL" #~ msgid "Simple Leaves" #~ msgstr "Folhas simples" +#~ msgid "" +#~ "Size of the MapBlock cache of the mesh generator. Increasing this will\n" +#~ "increase the cache hit %, reducing the data being copied from the main\n" +#~ "thread, thus reducing jitter." +#~ msgstr "" +#~ "Tamanho da memória cache do MapBlock do gerador de malha. Aumentar isso " +#~ "aumentará\n" +#~ "o percentual de hit do cache %, a reduzir os dados que são copiados do " +#~ "encadeamento principal,\n" +#~ "e assim reduz o jitter." + #~ msgid "Smooth Lighting" #~ msgstr "Iluminação Suave" #~ msgid "Smooths rotation of camera. 0 to disable." #~ msgstr "Suaviza a rotação da câmara. 0 para desativar." -#~ msgid "Sound" -#~ msgstr "Som" - #~ msgid "Special" #~ msgstr "Especial" @@ -8584,6 +8805,10 @@ msgstr "limite paralelo de cURL" #~ msgid "Touch threshold (px):" #~ msgstr "Nível de sensibilidade ao toque (px):" +#, fuzzy +#~ msgid "Touchscreen threshold" +#~ msgstr "Limiar o ecrã de toque" + #~ msgid "Trilinear Filter" #~ msgstr "Filtro trilinear" @@ -8639,6 +8864,9 @@ msgstr "limite paralelo de cURL" #~ "Se definido como 0, MSAA é desativado.\n" #~ "É necessário reiniciar após alterar esta opção." +#~ msgid "VBO" +#~ msgstr "VBO" + #~ msgid "Variation of hill height and lake depth on floatland smooth terrain." #~ msgstr "" #~ "Variação da altura da colina e profundidade do lago no terreno liso da " @@ -8746,8 +8974,14 @@ msgstr "limite paralelo de cURL" #~ msgid "You died." #~ msgstr "Você morreu" +#~ msgid "You have no games installed." +#~ msgstr "Você não possui jogos instalados." + #~ msgid "Z" #~ msgstr "Z" #~ msgid "needs_fallback_font" #~ msgstr "no" + +#~ msgid "ok" +#~ msgstr "ok" diff --git a/po/pt_BR/minetest.po b/po/pt_BR/minetest.po index 93ef3de25..5e8c4974c 100644 --- a/po/pt_BR/minetest.po +++ b/po/pt_BR/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Portuguese (Brazil) (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\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" "Language-Team: Portuguese (Brazil) ]" +#, fuzzy +msgid "[all | ] [-t]" msgstr "[all| ]" -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" -msgstr "Ok" - #: builtin/fstk/ui.lua msgid "" msgstr "" @@ -105,6 +103,10 @@ msgstr "Ocorreu um erro:" msgid "Main menu" msgstr "Menu principal" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "Ok" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Reconectar" @@ -133,19 +135,28 @@ msgstr "Nós só suportamos a versão do protocolo $1." msgid "We support protocol versions between version $1 and $2." msgstr "Suportamos protocolos com versões entre $1 e $2." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "\"$1\" já existe. Gostaria de sobrescrevê-lo?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" +msgstr "Erro ao instalar \"$1\": $2" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." -msgstr "As dependências $1 e $2 serão instaladas." +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download \"$1\"" +msgstr "Falha ao baixar \"$1\"" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" -msgstr "$1 por $2" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr "Falha ao baixar $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "" +"Não foi possível extrair \"$1\" (tipo de arquivo não suportado ou arquivo " +"corrompido)" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" @@ -153,158 +164,157 @@ msgstr "" "$1 baixando,\n" "$2 na fila" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." msgstr "$1 baixando..." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "$1 dependências obrigatórias não puderam ser encontradas." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "$1 será instalado, e $2 dependências serão ignoradas." - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "Todos os pacotes" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "Já instalado" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "Voltar ao menu principal" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "ContentDB não está disponível quando Minetest é compilado sem cURL" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "Baixando..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "Jogos" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +msgstr "Instalar" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp +msgid "Loading..." +msgstr "Carregando..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Mods" +msgstr "Mods" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "Nenhum pacote pôde ser recuperado" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "Sem resultados" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "Sem atualizações" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "Na fila" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "Pacotes de texturas" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "Desinstalar" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "Atualização" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "Atualizar tudo [$1]" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "View more information in a web browser" +msgstr "Veja mais informações em um navegador da web" + +#: 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 "As dependências $1 e $2 serão instaladas." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "$1 por $2" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "$1 dependências obrigatórias não puderam ser encontradas." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "$1 será instalado, e $2 dependências serão ignoradas." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "Já instalado" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "Jogo Base:" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "Cancelar" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "ContentDB não está disponível quando Minetest é compilado sem cURL" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "Dependências:" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "Baixando..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "Erro ao instalar \"$1\": $2" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download \"$1\"" -msgstr "Falha ao baixar \"$1\"" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "Falha ao baixar $1" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "" -"Não foi possível extrair \"$1\" (tipo de arquivo não suportado ou arquivo " -"corrompido)" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "Jogos" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "Instalar" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "Instalar $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "Instalar dependências ausentes" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "Carregando..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "Mods" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "Nenhum pacote pôde ser recuperado" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "Sem resultados" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "Sem atualizações" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "Não encontrado" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "Sobrescrever" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "Verifique se o jogo base está correto." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" -msgstr "Na fila" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" +msgstr "\"$1\" já existe. Gostaria de sobrescrevê-lo?" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "Pacotes de texturas" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "Desinstalar" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "Atualização" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "Atualizar tudo [$1]" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "Veja mais informações em um navegador da web" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" -msgstr "" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" +msgstr "Sobrescrever" #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" @@ -454,10 +464,20 @@ msgstr "Criar" msgid "Decorations" msgstr "Decorações" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." msgstr "Development Test é para uso dos desenvolvedores." +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "Masmorras (Dungeons)" @@ -832,10 +852,6 @@ msgstr "" msgid "Back" msgstr "Backspace" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "Mudar teclas" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -845,7 +861,8 @@ msgstr "Bate-papo" msgid "Clear" msgstr "Limpar" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "Controles" @@ -1055,6 +1072,16 @@ msgstr "Instalar um jogo" msgid "Install games from ContentDB" msgstr "Instalar jogos do ContentDB" +#: builtin/mainmenu/tab_local.lua +msgid "Minetest 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 " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "Novo" @@ -1088,8 +1115,8 @@ msgid "Start Game" msgstr "Iniciar Jogo" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." -msgstr "Você não possui jogos instalados." +msgid "You need to install a game before you can create a world." +msgstr "" #: builtin/mainmenu/tab_online.lua msgid "Address" @@ -1168,18 +1195,10 @@ msgstr "Carregando texturas..." msgid "Rebuilding shaders..." msgstr "Reconstruindo sombreadores..." -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "Erro de conexão (tempo excedido?)" - #: src/client/clientlauncher.cpp msgid "Could not find or load game: " msgstr "Não foi possível localizar ou carregar jogo " -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "Especificação do jogo inválida." - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "Menu principal" @@ -1205,7 +1224,11 @@ msgstr "Arquivo de senha fornecido falhou em abrir : " msgid "Provided world path doesn't exist: " msgstr "Caminho informado para o mundo não existe: " -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "Mídia..." + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp msgid "" "\n" "Check debug.txt for details." @@ -1213,18 +1236,10 @@ msgstr "" "\n" "Verifique o debug.txt para mais detalhes." -#: src/client/game.cpp -msgid "- Address: " -msgstr "- Endereço: " - #: src/client/game.cpp msgid "- Mode: " msgstr "- Modo: " -#: src/client/game.cpp -msgid "- Port: " -msgstr "-Porta: " - #: src/client/game.cpp msgid "- Public: " msgstr "- Público: " @@ -1259,10 +1274,6 @@ msgstr "Avanço automático para frente habilitado" msgid "Block bounds hidden" msgstr "Limites de bloco ocultos" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "Limites de bloco mostrados para todos os blocos" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "Limites de bloco mostrados para o bloco atual" @@ -1310,6 +1321,10 @@ msgstr "Scripting de cliente está desabilitado" msgid "Connecting to server..." msgstr "Conectando ao servidor..." +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "Erro de conexão (tempo excedido?)" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "A conexão falhou por motivo desconhecido" @@ -1318,47 +1333,14 @@ msgstr "A conexão falhou por motivo desconhecido" msgid "Continue" msgstr "Continuar" -#: src/client/game.cpp -#, fuzzy, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" -"Controles:\n" -"- %s: mover para frente\n" -"- %s: mover para trás\n" -"- %s: mover para esquerda\n" -"- %s: mover para direita\n" -"- %s: pular/subir\n" -"- %s: cavar/socar\n" -"- %s: colocar/usar\n" -"- %s: andar furtivamente/descer\n" -"- %s: soltar item\n" -"- %s: inventário\n" -"- Mouse: virar/olhar\n" -"- Roda do mouse: selecionar item\n" -"- %s: bate-papo\n" - #: src/client/game.cpp #, fuzzy msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1450,6 +1432,11 @@ msgstr "Névoa desabilitada" msgid "Fog enabled" msgstr "Névoa habilitada" +#: src/client/game.cpp +#, fuzzy +msgid "Fog enabled by game or mod" +msgstr "Zoom atualmente desabilitado por jogo ou mod" + #: src/client/game.cpp msgid "Game info:" msgstr "Informação do jogo:" @@ -1470,10 +1457,6 @@ msgstr "Carregando itens..." msgid "KiB/s" msgstr "KB/s" -#: src/client/game.cpp -msgid "Media..." -msgstr "Mídia..." - #: src/client/game.cpp msgid "MiB/s" msgstr "MB/s" @@ -1631,10 +1614,6 @@ msgstr "Mostrar wireframe" msgid "Zoom currently disabled by game or mod" msgstr "Zoom atualmente desabilitado por jogo ou mod" -#: src/client/game.cpp -msgid "ok" -msgstr "Ok" - #: src/client/gameui.cpp msgid "Chat currently disabled by game or mod" msgstr "Bate-papo atualmente desativado por jogo ou mod" @@ -1968,6 +1947,15 @@ msgstr "Minimapa em modo de superfície, Zoom %dx" msgid "Minimap in texture mode" msgstr "Minimapa em modo de textura" +#: src/client/shader.cpp +#, fuzzy, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "Falha ao abrir página da web" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2160,6 +2148,19 @@ msgstr "Zoom" msgid "press key" msgstr "pressione uma tecla" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +#, fuzzy +msgid "Unable to open URL" +msgstr "Falha ao abrir página da web" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "Alterar" @@ -2193,6 +2194,7 @@ msgstr "Volume do som: %d%%" #. 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 "pt_BR" @@ -2426,14 +2428,6 @@ msgstr "Alcance para envio de objetos ativos" msgid "Adds particles when digging a node." msgstr "Adiciona partículas quando cavando um node." -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" -"Ajustar configuração de dpi (profundidade de cor) para sua tela (apenas para " -"quem não usa X11/Android) Ex para telas 4K." - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2463,6 +2457,10 @@ msgstr "Nome do Admin" msgid "Advanced" msgstr "Avançado" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2524,6 +2522,17 @@ msgstr "Concatenar nome do item a descrição." msgid "Apple trees noise" msgstr "Ruído de Árvores de Macieira" +#: 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 "Arm inertia" msgstr "Inercia dos braços" @@ -2541,18 +2550,41 @@ msgid "Ask to reconnect after crash" msgstr "Peça para reconectar depois de queda" #: src/settings_translation_file.cpp +#, fuzzy 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 will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +msgstr "" +"Nesta distância, o servidor otimizará agressivamente quais blocos serão " +"enviados\n" +"aos clientes.\n" +"Pequenos valores potencialmente melhoram muito o desempenho, à custa de " +"falhas\n" +"de renderização visíveis (alguns blocos não serão processados debaixo da " +"água e nas\n" +"cavernas, bem como às vezes em terra).\n" +"Configurando isso para um valor maior do que a " +"distância_máxima_de_envio_do_bloco\n" +"para desabilitar essa otimização.\n" +"Especificado em barreiras do mapa (16 nodes)." + +#: src/settings_translation_file.cpp +#, fuzzy +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 "" "Nesta distância, o servidor otimizará agressivamente quais blocos serão " "enviados\n" @@ -2629,6 +2661,11 @@ msgstr "Biomas" msgid "Biome noise" msgstr "Ruído do bioma" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Block cull optimize distance" +msgstr "Distância otimizada de envio de bloco" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "Distância otimizada de envio de bloco" @@ -2847,6 +2884,12 @@ msgstr "Névoa colorida" msgid "Colored shadows" msgstr "Sombra colorida" +#: 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -3012,10 +3055,6 @@ msgstr "" "Cor da cruz (R, G, B).\n" "Também controla a cor da cruz do objeto" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "dpi" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "Limite de tamanho do arquivo de log de depuração" @@ -3071,6 +3110,25 @@ msgstr "" "Isso simula um efeito de sombras suaves aplicando um PCF ou um Poisson disk\n" "mas também usa mais 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 " +"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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" +"Habilitar recurso de não permitir que jogadores usando versões antigas do " +"cliente possam se conectar.\n" +"Essas versões são compatíveis no sentido de não travar quando conectam a " +"servidores com versões mais atuais,\n" +"porém eles podem não suportar todos os recursos que você está esperando." + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "Define áreas onde na árvores têm maçãs." @@ -3275,6 +3333,11 @@ msgstr "Habilitar floração" msgid "Enable Bloom Debug" msgstr "Habilitar depuração da floração" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Debanding" +msgstr "Habilitar Dano" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3301,6 +3364,11 @@ msgstr "" "Quando em true usa o Poisson disk para fazer \"sombras suaves\". Caso " "contrário, usa filtragem PCF." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Post Processing" +msgstr "Pós-processamento" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "" @@ -3350,6 +3418,11 @@ msgstr "Habilitar Mod Security (Segurança nos mods)" 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 "Habilitar entrada de comandos aleatórios (apenas usado para testes)." + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "Habilitar entrada de comandos aleatórios (apenas usado para testes)." @@ -3380,6 +3453,11 @@ msgstr "" "servidores com versões mais atuais,\n" "porém eles podem não suportar todos os recursos que você está esperando." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable touchscreen" +msgstr "Tela sensível ao toque" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3392,14 +3470,6 @@ msgstr "" "para fazer o download de mídia (por exemplo texturas) ao se conectar ao " "servidor." -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" -"Ativa vertex buffer objects.\n" -"Isso deve melhorar muito a performance gráfica." - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3439,6 +3509,19 @@ msgstr "Habilita itens animados no inventário." msgid "Enables caching of facedir rotated meshes." msgstr "Ativar armazenamento em cache de direção de face girada das malhas." +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -4397,10 +4480,12 @@ msgstr "" "- Opaque: desativar transparência" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" "Tamanho do tick do servidor e o intervalo no qual os objetos geralmente são " "atualizados na\n" @@ -4581,10 +4666,6 @@ msgstr "" "Fazer cores de névoa e céu dependerem do dia (amanhecer/pôr do sol) e exibir " "a direção." -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "Torna todos os líquidos opacos" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "Nível de Compressão de Mapa no Armazenamento em Disco" @@ -4641,11 +4722,14 @@ msgid "Map generation attributes specific to Mapgen v5." msgstr "Atributos de geração de mapa específicos ao gerador 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" "When the 'snowbiomes' flag is enabled jungles are automatically enabled and\n" -"the 'jungles' flag is ignored." +"the 'jungles' flag is ignored.\n" +"The 'temples' flag disables generation of desert temples. Normal dungeons " +"will appear instead." msgstr "" "Atributos de geração de mapas específicos para Gerador de mapas v6.\n" "A opção 'snowbiomes' habilita o novo sistema de 5 biomas.\n" @@ -4690,12 +4774,6 @@ msgstr "Intervalo de geração de mapa" msgid "Mapblock mesh generation threads" msgstr "Intervalo de geração de mapa" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "" -"Tamanho em MB da memória cache de MapBlock para o gerador de Malha de " -"Mapblock" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "Tempo limite de descarregamento do mapblock" @@ -4968,6 +5046,11 @@ msgstr "Nível mínimo de registro a ser impresso no chat." msgid "Minimap scan height" msgstr "Altura de escaneamento do minimapa" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Minimum dig repetition interval" +msgstr "Intervalo de repetição da ação colocar" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "Limite mínimo do número aleatório de grandes cavernas por mapchunk." @@ -5036,6 +5119,11 @@ msgstr "Sensibilidade do mouse" msgid "Mouse sensitivity multiplier." msgstr "Multiplicador de sensibilidade do mouse." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Movement threshold" +msgstr "Limite da caverna" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "Ruído de Lama" @@ -5181,10 +5269,6 @@ msgstr "" msgid "Occlusion Culling" msgstr "Separação de oclusão no lado do servidor" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "Líquidos Opacos" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -5200,6 +5284,11 @@ msgstr "" "formspec está\n" "aberto." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "OpenGL debug" +msgstr "Debug do mapgen" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "Substituição opcional da cor do link do bate-papo." @@ -5333,6 +5422,15 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "Proporção de cavernas grandes que contém líquido." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Protocol version minimum" +msgstr "Versão do protocolo incompatível. " + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -5351,6 +5449,10 @@ msgstr "Eleva o terreno para fazer vales em torno dos rios." msgid "Random input" msgstr "Entrada aleatória" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "Mensagens de chat recentes" @@ -5563,8 +5665,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5708,8 +5810,9 @@ msgstr "" "Intervalo: de -1 até 1.0" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" "Defina o idioma. Deixe vazio para usar a linguagem do sistema.\n" @@ -5756,6 +5859,10 @@ msgid "" "Bright colors will bleed over the neighboring objects." 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 #, fuzzy msgid "Set to true to enable waving leaves." @@ -5804,11 +5911,11 @@ msgid "Shaders" msgstr "Sombreadores" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" "Sombreadores permitem efeitos visuais avançados e podem aumentar a " "performance em algumas\n" @@ -5893,18 +6000,6 @@ msgstr "" "Alterar este valor é para uso especial, é recomendado deixar\n" "inalterado." -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" -"Tamanho da memória cache do MapBlock do gerador de malha. Aumentar isso " -"aumentará\n" -"o percentual de hit do cache, reduzindo os dados sendo copiados do " -"encadeamento principal\n" -", reduzindo assim o jitter." - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "Inclinação Da Órbita Do Céu" @@ -5943,7 +6038,7 @@ msgstr "Iluminação suave" #, fuzzy msgid "" "Smooths rotation of camera when in cinematic mode, 0 to disable. Enter " -"cinematic mode by using the key set in Change Keys." +"cinematic mode by using the key set in Controls." msgstr "Suaviza a rotação da câmera no modo cinemático. 0 para desativar." #: src/settings_translation_file.cpp @@ -5965,6 +6060,15 @@ msgstr "Velocidade ao esgueirar-se, em nós (blocos) por segundo." msgid "Soft shadow radius" msgstr "Raio das sombras suaves" +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "Som" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sound Extensions Blacklist" +msgstr "Lista negra de flags do ContentDB" + #: src/settings_translation_file.cpp msgid "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -6176,6 +6280,12 @@ msgstr "" "O formato padrão no qual as analises estão sendo salvas,\n" "Quando chamado `/profiler save [formato]` sem formato." +#: 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 #, fuzzy msgid "" @@ -6184,13 +6294,27 @@ msgstr "" "O caminho de arquivo relativo ao sua pasta do mundo no qual as analises " "serão salvas." +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "O identificador do joystick para usar" #: src/settings_translation_file.cpp #, fuzzy -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" "A largura em pixels necessária para interação de tela de toque começar." @@ -6208,6 +6332,15 @@ msgstr "" "O padrão é 1.0 (meio nó).\n" "Requer ondas em líquidos habilitada." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"The minimum time in seconds it takes between digging nodes when holding\n" +"the dig button." +msgstr "" +"O tempo em segundos que leva entre as colocações de nó repetidas ao segurar\n" +"o botão de colocar." + #: src/settings_translation_file.cpp msgid "The network interface that the server listens on." msgstr "A interface de rede no qual o servidor escuta (aguarda conexão)." @@ -6239,11 +6372,12 @@ msgstr "" "Isso deve ser configurado junto com 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" "O back-end de renderização.\n" "Nota: É necessário reiniciar depois de alterar.\n" @@ -6327,6 +6461,10 @@ msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "" "Terceiro de 4 ruídos 2D que juntos definem a altura de colinas/montanhas." +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -6383,15 +6521,15 @@ msgstr "Sensibilidade do mouse" msgid "Touchscreen sensitivity multiplier." msgstr "Multiplicador de sensibilidade do mouse." -#: src/settings_translation_file.cpp -#, fuzzy -msgid "Touchscreen threshold" -msgstr "Limiar a tela de toque" - #: src/settings_translation_file.cpp msgid "Tradeoffs for performance" msgstr "Compensações para o desempenho" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Translucent liquids" +msgstr "Líquidos Opacos" + #: src/settings_translation_file.cpp msgid "Transparency Sorting Distance" msgstr "Distância para o Ordenamento de Transparência" @@ -6429,8 +6567,11 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 do arquivo JSON que fornece informações sobre o mais novo lançamento do " "Minetest" @@ -6547,10 +6688,6 @@ msgstr "" msgid "User Interfaces" msgstr "Interfaces de Usuário" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "VBO" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "Sincronização Vertical" @@ -6642,6 +6779,10 @@ msgstr "Joystick virtual ativa botão especial" msgid "Volume" msgstr "Volume do som" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Volume of all sounds.\n" @@ -6650,6 +6791,16 @@ msgstr "" "Volume de todos os sons.\n" "Requer que o sistema de som esteja ativado." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volume when unfocused" +msgstr "FPS quando o jogo é pausado ou perde o foco" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volumetric lighting" +msgstr "Iluminação suave" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6952,12 +7103,18 @@ msgstr "limite paralelo de cURL" #~ msgid "(game support required)" #~ msgstr "(necessário suporte ao jogo)" +#~ msgid "- Address: " +#~ msgstr "- Endereço: " + #~ msgid "- Creative Mode: " #~ msgstr "- Modo Criativo: " #~ msgid "- Damage: " #~ msgstr "-Dano: " +#~ msgid "- Port: " +#~ msgstr "-Porta: " + #~ msgid "" #~ "0 = parallax occlusion with slope information (faster).\n" #~ "1 = relief mapping (slower, more accurate)." @@ -6996,6 +7153,13 @@ msgstr "limite paralelo de cURL" #~ "Note que o campo de endereço no menu principal sobrescreve essa " #~ "configuração." +#~ msgid "" +#~ "Adjust dpi configuration to your screen (non X11/Android only) e.g. for " +#~ "4k screens." +#~ msgstr "" +#~ "Ajustar configuração de dpi (profundidade de cor) para sua tela (apenas " +#~ "para quem não usa X11/Android) Ex para telas 4K." + #~ msgid "" #~ "Adjust the gamma encoding for the light tables. Higher numbers are " #~ "brighter.\n" @@ -7055,6 +7219,9 @@ msgstr "limite paralelo de cURL" #~ "Bits por pixel (Também conhecido como profundidade de cor) no modo de " #~ "tela cheia." +#~ msgid "Block bounds shown for all blocks" +#~ msgstr "Limites de bloco mostrados para todos os blocos" + #~ msgid "Bump Mapping" #~ msgstr "Bump mapping" @@ -7079,6 +7246,9 @@ msgstr "limite paralelo de cURL" #~ msgid "Center of light curve mid-boost." #~ msgstr "Centro do aumento da curva de luz." +#~ msgid "Change Keys" +#~ msgstr "Mudar teclas" + #, fuzzy #~ msgid "Change keys" #~ msgstr "Mudar teclas" @@ -7152,6 +7322,38 @@ msgstr "limite paralelo de cURL" #~ msgstr "" #~ "Controla a largura dos túneis, um valor menor cria túneis mais largos." +#, fuzzy, c-format +#~ msgid "" +#~ "Controls:\n" +#~ "- %s: move forwards\n" +#~ "- %s: move backwards\n" +#~ "- %s: move left\n" +#~ "- %s: move right\n" +#~ "- %s: jump/climb up\n" +#~ "- %s: dig/punch/use\n" +#~ "- %s: place/use\n" +#~ "- %s: sneak/climb down\n" +#~ "- %s: drop item\n" +#~ "- %s: inventory\n" +#~ "- Mouse: turn/look\n" +#~ "- Mouse wheel: select item\n" +#~ "- %s: chat\n" +#~ msgstr "" +#~ "Controles:\n" +#~ "- %s: mover para frente\n" +#~ "- %s: mover para trás\n" +#~ "- %s: mover para esquerda\n" +#~ "- %s: mover para direita\n" +#~ "- %s: pular/subir\n" +#~ "- %s: cavar/socar\n" +#~ "- %s: colocar/usar\n" +#~ "- %s: andar furtivamente/descer\n" +#~ "- %s: soltar item\n" +#~ "- %s: inventário\n" +#~ "- Mouse: virar/olhar\n" +#~ "- Roda do mouse: selecionar item\n" +#~ "- %s: bate-papo\n" + #~ msgid "Creative" #~ msgstr "Criativo" @@ -7161,6 +7363,9 @@ msgstr "limite paralelo de cURL" #~ msgid "Crosshair color (R,G,B)." #~ msgstr "Cor do cursor (R,G,B)." +#~ msgid "DPI" +#~ msgstr "dpi" + #~ msgid "Damage" #~ msgstr "Dano" @@ -7246,6 +7451,13 @@ msgstr "limite paralelo de cURL" #~ msgid "Enable register confirmation" #~ msgstr "Habilitar registro de confirmação" +#~ msgid "" +#~ "Enable vertex buffer objects.\n" +#~ "This should greatly improve graphics performance." +#~ msgstr "" +#~ "Ativa vertex buffer objects.\n" +#~ "Isso deve melhorar muito a performance gráfica." + #~ msgid "Enabled" #~ msgstr "Habilitado" @@ -7555,6 +7767,9 @@ msgstr "limite paralelo de cURL" #~ msgid "Instrumentation" #~ msgstr "Monitorização" +#~ msgid "Invalid gamespec." +#~ msgstr "Especificação do jogo inválida." + #~ msgid "Inventory key" #~ msgstr "Inventário" @@ -8253,6 +8468,14 @@ msgstr "limite paralelo de cURL" #~ msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles." #~ msgstr "Faz o DirectX trabalhar com LuaJIT. Desative se causa problemas." +#~ msgid "Makes all liquids opaque" +#~ msgstr "Torna todos os líquidos opacos" + +#~ msgid "Mapblock mesh generator's MapBlock cache size in MB" +#~ msgstr "" +#~ "Tamanho em MB da memória cache de MapBlock para o gerador de Malha de " +#~ "Mapblock" + #~ msgid "Menus" #~ msgstr "Opções para menus" @@ -8497,15 +8720,23 @@ msgstr "limite paralelo de cURL" #~ msgid "Simple Leaves" #~ msgstr "Folhas Simples" +#~ msgid "" +#~ "Size of the MapBlock cache of the mesh generator. Increasing this will\n" +#~ "increase the cache hit %, reducing the data being copied from the main\n" +#~ "thread, thus reducing jitter." +#~ msgstr "" +#~ "Tamanho da memória cache do MapBlock do gerador de malha. Aumentar isso " +#~ "aumentará\n" +#~ "o percentual de hit do cache, reduzindo os dados sendo copiados do " +#~ "encadeamento principal\n" +#~ ", reduzindo assim o jitter." + #~ msgid "Smooth Lighting" #~ msgstr "Iluminação suave" #~ msgid "Smooths rotation of camera. 0 to disable." #~ msgstr "Suaviza a rotação da câmera. 0 para desativar." -#~ msgid "Sound" -#~ msgstr "Som" - #~ msgid "Special" #~ msgstr "Especial" @@ -8565,6 +8796,10 @@ msgstr "limite paralelo de cURL" #~ msgid "Touch threshold (px):" #~ msgstr "Nível de sensibilidade ao toque (px):" +#, fuzzy +#~ msgid "Touchscreen threshold" +#~ msgstr "Limiar a tela de toque" + #~ msgid "Trilinear Filter" #~ msgstr "Filtragem tri-linear" @@ -8620,6 +8855,9 @@ msgstr "limite paralelo de cURL" #~ "Se definido como 0, MSAA é desativado.\n" #~ "É necessário reiniciar após alterar esta opção." +#~ msgid "VBO" +#~ msgstr "VBO" + #~ msgid "Variation of hill height and lake depth on floatland smooth terrain." #~ msgstr "" #~ "Variação da altura da colina e profundidade do lago no terreno liso da " @@ -8724,8 +8962,14 @@ msgstr "limite paralelo de cURL" #~ msgid "You died." #~ msgstr "Você morreu." +#~ msgid "You have no games installed." +#~ msgstr "Você não possui jogos instalados." + #~ msgid "Z" #~ msgstr "Z" #~ msgid "needs_fallback_font" #~ msgstr "no" + +#~ msgid "ok" +#~ msgstr "Ok" diff --git a/po/ro/minetest.po b/po/ro/minetest.po index c57e8a235..3421fb593 100644 --- a/po/ro/minetest.po +++ b/po/ro/minetest.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: Romanian (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" -"PO-Revision-Date: 2023-11-25 14:13+0000\n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" +"PO-Revision-Date: 2024-07-27 04:09+0000\n" "Last-Translator: AlexTECPlayz \n" "Language-Team: Romanian \n" @@ -13,7 +13,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " "20)) ? 1 : 2;\n" -"X-Generator: Weblate 5.2.1-rc\n" +"X-Generator: Weblate 5.7-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -72,8 +72,8 @@ msgid "Command not available: " msgstr "Comandă indisponibilă: " #: builtin/common/chatcommands.lua -msgid "Get help for commands" -msgstr "Obține ajutor pentru comenzi" +msgid "Get help for commands (-t: output in chat)" +msgstr "Obțineți ajutor pentru comenzi (-t: răspuns în chat)" #: builtin/common/chatcommands.lua msgid "" @@ -83,12 +83,8 @@ msgstr "" "complete." #: builtin/common/chatcommands.lua -msgid "[all | ]" -msgstr "[all | ]" - -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" -msgstr "OK" +msgid "[all | ] [-t]" +msgstr "[all | ] [-t]" #: builtin/fstk/ui.lua msgid "" @@ -106,6 +102,10 @@ msgstr "A apărut o eroare:" msgid "Main menu" msgstr "Meniul principal" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "OK" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Reconectare" @@ -134,19 +134,25 @@ msgstr "Permitem doar versiunea de protocol $1." msgid "We support protocol versions between version $1 and $2." msgstr "Acceptăm versiuni de protocol între versiunea 1$ și 2$." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "„$1” există deja. Doriți s-o suprascrieți?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" +msgstr "Eroare la instalarea \"$1\": $2" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." -msgstr "Dependențele $1 și $2 vor fi instalate." +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download \"$1\"" +msgstr "Nu s-a putut descărca \"$1\"" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" -msgstr "$1, de $2" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr "Nu s-a putut descărca $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "Eroare în extragerea „$1” (fișier incompatibil sau arhivă coruptă)" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" @@ -154,164 +160,165 @@ msgstr "" "$1 în descărcare,\n" "$2 în așteptare" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." msgstr "$1 se descarcă..." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "$1 are dependințe care nu sunt disponibile." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "$1 va fi instalat, iar $2 dependințe vor fi ignorate." - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "Toate pachetele" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "Deja instalată" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "Meniul principal" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "ContentDB nu este disponibil când Minetest e compilat fără cURL" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "Descărcare..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "Eroare la obținerea dependențelor pentru pachet" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "Jocuri" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +msgstr "Instalează" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp +msgid "Loading..." +msgstr "Se încarcă..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Mods" +msgstr "Modificări" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "Nu s-au putut prelua pachete" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "Fără rezultate" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "Nu există actualizări" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "În așteptare" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "Pachete de texturi" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "Pachetul $1 nu a fost găsit." + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "Dezinstalare" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "Actualizare" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "Actualizează tot [$1]" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "View more information in a web browser" +msgstr "Vezi detalii într-un navigator web" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "You need to install a game before you can install a mod" +msgstr "Trebuie să instalezi un joc înainte să poți instala un mod" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 and $2 dependencies will be installed." +msgstr "Dependențele $1 și $2 vor fi instalate." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "$1, de $2" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "$1 are dependințe care nu sunt disponibile." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "$1 va fi instalat, iar $2 dependințe vor fi ignorate." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "Deja instalată" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "Jocul de bază:" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" -msgstr "Anulează" +msgstr "Anulare" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "ContentDB nu este disponibilă când Minetest e compilat fără cURL" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "Dependențe:" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "Descărcare..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "Eroare la instalarea \"$1\": $2" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download \"$1\"" -msgstr "Nu s-a putut descărca \"$1\"" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "Nu s-a putut descărca $1" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "Eroare la despachetarea „$1” (fișier incompatibil sau arhivă defectă)" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "Jocuri" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "Instalează" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "Instalează $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "Instalează dependințele opționale" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "Se încarcă..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "Modificări" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "Nu s-au putut prelua pachete" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "Fără rezultate" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "Nu există actualizări" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "Indisponibile" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Please check that the base game is correct." +msgstr "Te rugăm să verifici dacă jocul de bază este corect." + +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" +msgstr "„$1” există deja. Dorești să o suprascrii?" + +#: builtin/mainmenu/content/dlg_overwrite.lua msgid "Overwrite" msgstr "Suprascrie" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Please check that the base game is correct." -msgstr "Verificați dacă jocul de bază este corect." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" -msgstr "În așteptare" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "Pachete de texturi" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "Dezinstalare" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "Actualizare" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "Actualizează tot [$1]" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "Vezi detalii într-un navigator web" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" -msgstr "" - #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" msgstr "$1 (Activat)" #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 mods" -msgstr "$1 moduri" +msgstr "$1 modificări" #: builtin/mainmenu/content/pkgmgr.lua msgid "Failed to install $1 to $2" @@ -319,7 +326,7 @@ msgstr "Eșuare la instalarea $1 în $2" #: builtin/mainmenu/content/pkgmgr.lua msgid "Install: Unable to find suitable folder name for $1" -msgstr "Instalare: Nu se găsește un nume de director potrivit pentru $1" +msgstr "Instalare: Nu se poate găsi un nume de folder adecvat pentru $1" #: builtin/mainmenu/content/pkgmgr.lua msgid "Unable to find a valid mod, modpack, or game" @@ -362,8 +369,8 @@ msgid "" "Failed to enable mod \"$1\" as it contains disallowed characters. Only " "characters [a-z0-9_] are allowed." msgstr "" -"Nu a reușit activarea modului „$ 1”, deoarece conține caractere " -"neautorizate. Doar caracterele [a-z0-9_] sunt permise." +"Nu a reușit activarea modului „$1”, deoarece conține caractere neautorizate. " +"Doar caracterele [a-z0-9_] sunt permise." #: builtin/mainmenu/dlg_config_world.lua msgid "Find More Mods" @@ -383,11 +390,11 @@ msgstr "Nu este oferită nicio descriere a jocului." #: builtin/mainmenu/dlg_config_world.lua msgid "No hard dependencies" -msgstr "Nu există dependențe dure" +msgstr "Nu există dependențe obligatorii" #: builtin/mainmenu/dlg_config_world.lua msgid "No modpack description provided." -msgstr "Nici o descriere a pachetului de moduri nu este furnizată." +msgstr "Nu este furnizată nicio descriere a pachetului de moduri." #: builtin/mainmenu/dlg_config_world.lua msgid "No optional dependencies" @@ -451,10 +458,20 @@ msgstr "Creează" msgid "Decorations" msgstr "Decorațiuni" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "Temple în deșert" + #: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." msgstr "„Development Test” este destinat dezvoltatorilor." +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "Variantă diferită de temniță generată în ecosisteme deșertice" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "Temnițe" @@ -650,7 +667,7 @@ msgstr "Înregistrează-te" #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "Dismiss" -msgstr "" +msgstr "Respinge" #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "" @@ -658,21 +675,24 @@ msgid "" "\"Minetest Game\". Since Minetest 5.8.0, Minetest ships without a default " "game." msgstr "" +"Pentru mult timp, motorul Minetest a venit cu un joc implicit pe nume " +"„Minetest Game”. Din Minetest 5.8.0, Minetest nu mai vine cu un joc implicit." #: 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 "" +"Dacă dorești să joci în continuare pe lumile tale Minetest Game, trebuie să " +"reinstalezi Minetest Game." #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "Minetest Game is no longer installed by default" -msgstr "" +msgstr "Minetest Game nu mai este instalat în mod implicit" #: builtin/mainmenu/dlg_reinstall_mtg.lua -#, fuzzy msgid "Reinstall Minetest Game" -msgstr "Instalează un alt joc" +msgstr "Reinstalați jocul Minetest" #: builtin/mainmenu/dlg_rename_modpack.lua msgid "Accept" @@ -749,9 +769,8 @@ msgid "Select file" msgstr "Selectează fila" #: builtin/mainmenu/settings/components.lua -#, fuzzy msgid "Set" -msgstr "Selectează" +msgstr "Selectați" #: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua msgid "(No description of setting given)" @@ -820,20 +839,16 @@ msgstr "uşura" #: builtin/mainmenu/settings/dlg_settings.lua msgid "(Use system language)" -msgstr "" +msgstr "(Folosește limba sistemului)" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Accessibility" -msgstr "" +msgstr "Accesibilitate" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Back" msgstr "Înapoi" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "Modifică tastele" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -843,26 +858,26 @@ msgstr "Chat" msgid "Clear" msgstr "Șterge" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "Comenzi" #: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp msgid "General" -msgstr "" +msgstr "General" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Movement" -msgstr "" +msgstr "Mișscare" #: builtin/mainmenu/settings/dlg_settings.lua -#, fuzzy msgid "Reset setting to default" -msgstr "Restabilește valori implicite" +msgstr "Restabiliți la valorile implicite" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Reset setting to default ($1)" -msgstr "" +msgstr "Resetează setarea la valoarea prestabilită ($1)" #: builtin/mainmenu/settings/dlg_settings.lua builtin/mainmenu/tab_online.lua msgid "Search" @@ -870,7 +885,7 @@ msgstr "Caută" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Show advanced settings" -msgstr "" +msgstr "Afișează setări avansate" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Show technical names" @@ -890,11 +905,11 @@ msgstr "Conținut: Modificări" #: builtin/mainmenu/settings/shadows_component.lua msgid "(The game will need to enable shadows as well)" -msgstr "" +msgstr "(Jocul va trebui să activeze și umbrele)" #: builtin/mainmenu/settings/shadows_component.lua msgid "Custom" -msgstr "" +msgstr "Personalizat" #: builtin/mainmenu/settings/shadows_component.lua msgid "Disabled" @@ -947,7 +962,7 @@ msgstr "Echipa principală" #: builtin/mainmenu/tab_about.lua msgid "Irrlicht device:" -msgstr "" +msgstr "Dispozitiv Irrlicht:" #: builtin/mainmenu/tab_about.lua msgid "Open User Data Directory" @@ -978,18 +993,16 @@ msgid "Browse online content" msgstr "Căutați conținut online" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Browse online content [$1]" -msgstr "Căutați conținut online" +msgstr "Explorați conținut online [$1]" #: builtin/mainmenu/tab_content.lua msgid "Content" msgstr "Conţinut" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Content [$1]" -msgstr "Conţinut" +msgstr "Conţinut [$1]" #: builtin/mainmenu/tab_content.lua msgid "Disable Texture Pack" @@ -1012,9 +1025,8 @@ msgid "Rename" msgstr "Redenumiți" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Update available?" -msgstr "" +msgstr "Actualizare disponibilă?" #: builtin/mainmenu/tab_content.lua msgid "Use Texture Pack" @@ -1052,6 +1064,18 @@ msgstr "Instalează un joc" msgid "Install games from ContentDB" msgstr "Instalarea jocurilor din ContentDB" +#: builtin/mainmenu/tab_local.lua +msgid "Minetest doesn't come with a game by default." +msgstr "Minetest nu vine cu un joc preinstalat." + +#: builtin/mainmenu/tab_local.lua +msgid "" +"Minetest is a game-creation platform that allows you to play many different " +"games." +msgstr "" +"Minetest este o platformă de creare de jocuri care vă permite să jucați " +"multe jocuri diferite." + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "Nou" @@ -1085,8 +1109,8 @@ msgid "Start Game" msgstr "Începe Jocul" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." -msgstr "Nu aveți jocuri instalate." +msgid "You need to install a game before you can create a world." +msgstr "Trebuie să instalați un joc înainte să puteți crea o lume." #: builtin/mainmenu/tab_online.lua msgid "Address" @@ -1165,18 +1189,10 @@ msgstr "Se încarcă texturi ..." msgid "Rebuilding shaders..." msgstr "Reconstruirea shaderelor..." -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "Eroare de conexiune (timeout?)" - #: src/client/clientlauncher.cpp msgid "Could not find or load game: " msgstr "Nu se poate găsi sau încărca jocul: " -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "Jocul este nevalid." - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "Meniul Principal" @@ -1201,7 +1217,11 @@ msgstr "Fișierul cu parolă nu a putut fi deschis: " msgid "Provided world path doesn't exist: " msgstr "Calea aprovizionată a lumii nu există: " -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "Media..." + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp msgid "" "\n" "Check debug.txt for details." @@ -1209,18 +1229,10 @@ msgstr "" "\n" "Verifică deug.txt pentru detalii." -#: src/client/game.cpp -msgid "- Address: " -msgstr "- Adresa: " - #: src/client/game.cpp msgid "- Mode: " msgstr "- Modul: " -#: src/client/game.cpp -msgid "- Port: " -msgstr "- Port: " - #: src/client/game.cpp msgid "- Public: " msgstr "- Public: " @@ -1255,10 +1267,6 @@ msgstr "Redirecționare automată activată" msgid "Block bounds hidden" msgstr "Limite blocuri ascunse" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "Limite blocuri afișate pentru toate blocurile" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "Limite blocuri afișate pentru blocul curent" @@ -1276,10 +1284,8 @@ msgid "Camera update enabled" msgstr "Actualizarea camerei este activată" #: src/client/game.cpp -#, fuzzy msgid "Can't show block bounds (disabled by game or mod)" -msgstr "" -"Nu se pot afișa limitele blocurilor (dezactivate de modificare sau joc)" +msgstr "Nu se pot afișa limitele blocurilor (dezactivate de mod sau joc)" #: src/client/game.cpp msgid "Change Password" @@ -1305,6 +1311,10 @@ msgstr "Scripturile din partea clientului sunt dezactivate" msgid "Connecting to server..." msgstr "Se conectează la server..." +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "Eroare de conexiune (timeout?)" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "Conexiune eșuată din motiv necunoscut" @@ -1314,46 +1324,12 @@ msgid "Continue" msgstr "Continuă" #: src/client/game.cpp -#, fuzzy, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" -"Controale:\n" -"- %s: deplasare înainte\n" -"- %s: deplasare înapoi\n" -"- %s: deplasare stânga\n" -"- %s: deplasare dreapta\n" -"- %s: salt/urcare\n" -"- %s: săpare/lovire\n" -"- %s: plasare/utilizare\n" -"- %s: furișare/coborâre\n" -"- %s: aruncare obiect\n" -"- %s: inventar\n" -"- Maus: rotire/privire\n" -"- Roata mausului: selectare obiect\n" -"- %s: chat\n" - -#: src/client/game.cpp -#, fuzzy msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1362,18 +1338,18 @@ msgid "" "- touch&drag, tap 2nd finger\n" " --> place single item to slot\n" msgstr "" -"Controale implicite:\n" -"Niciun meniu vizibil:\n" -"- apăsare unică: activare buton\n" -"- apăsare dublă: plasare / utilizare\n" -"- deget glisant: privește în jur\n" -"Meniu / Inventar vizibil:\n" -"- apăsare dublă (exterior):\n" -" -> close\n" -"- touch stack, slot pentru atingere:\n" -" -> mută stiva\n" -"- atingeți și trageți, atingeți al doilea deget\n" -" -> plasați un singur element în slot\n" +"Controale:\n" +"Niciun meniu deschis:\n" +"- glisați degetul: priviți în jur\n" +"- apăsați: plasați/perforați/utilizați (implicit)\n" +"- apăsați lung: săpați/utilizați (implicit)\n" +"Meniu/inventar deschis:\n" +"- dublă apăsare (în exterior):\n" +" --> închideți\n" +"- atingeți grămada, atingeți slotul:\n" +" --> mutați grămada\n" +"- atingeți și trageți, apăsați cu un al doilea deget\n" +" --> plasați un singur articol în slot\n" #: src/client/game.cpp #, c-format @@ -1445,6 +1421,10 @@ msgstr "Ceață dezactivată" msgid "Fog enabled" msgstr "Ceață activată" +#: src/client/game.cpp +msgid "Fog enabled by game or mod" +msgstr "Ceață activată de joc sau mod" + #: src/client/game.cpp msgid "Game info:" msgstr "Informatii despre joc:" @@ -1465,10 +1445,6 @@ msgstr "Definițiile obiectelor..." msgid "KiB/s" msgstr "KiB / s" -#: src/client/game.cpp -msgid "Media..." -msgstr "Media..." - #: src/client/game.cpp msgid "MiB/s" msgstr "MiB / s" @@ -1569,28 +1545,27 @@ msgid "Unable to listen on %s because IPv6 is disabled" msgstr "Ascultarea pe %s nu este posibilă pentru că IPv6 este dezactivat" #: src/client/game.cpp -#, fuzzy msgid "Unlimited viewing range disabled" -msgstr "Interval de vizualizare nelimitat activat" +msgstr "Distanță de vizibilitate nelimitată dezactivată" #: src/client/game.cpp -#, fuzzy msgid "Unlimited viewing range enabled" -msgstr "Interval de vizualizare nelimitat activat" +msgstr "Distanță de vizibilitate nelimitată activată" #: src/client/game.cpp msgid "Unlimited viewing range enabled, but forbidden by game or mod" -msgstr "" +msgstr "Rază infinită de vedere activată. dar interzisă de joc sau mod" #: src/client/game.cpp -#, fuzzy, c-format +#, c-format msgid "Viewing changed to %d (the minimum)" -msgstr "Intervalul de vizualizare este cel puțin: %d" +msgstr "Distanța de vizibilitate schimbată la %d (minimă)" #: src/client/game.cpp #, c-format msgid "Viewing changed to %d (the minimum), but limited to %d by game or mod" msgstr "" +"Vederea schimbată la %d (minimul), dar limitată la %d de către joc sau mod" #: src/client/game.cpp #, c-format @@ -1598,20 +1573,22 @@ msgid "Viewing range changed to %d" msgstr "Intervalul de vizualizare s-a modificat la %d" #: src/client/game.cpp -#, fuzzy, c-format +#, c-format msgid "Viewing range changed to %d (the maximum)" -msgstr "Intervalul de vizualizare s-a modificat la %d" +msgstr "Distanța de vizibilitate schimbată la %d (maximă)" #: src/client/game.cpp #, c-format msgid "" "Viewing range changed to %d (the maximum), but limited to %d by game or mod" msgstr "" +"Vederea schimbată la %d (maximul), dar limitată la %d de către joc sau mod" #: src/client/game.cpp -#, fuzzy, c-format +#, c-format msgid "Viewing range changed to %d, but limited to %d by game or mod" -msgstr "Intervalul de vizualizare s-a modificat la %d" +msgstr "" +"Distanța de vizibilitate schimbată la %d, dar limitată la %d de joc sau mod" #: src/client/game.cpp #, c-format @@ -1626,10 +1603,6 @@ msgstr "Cadru de sârmă afișat" msgid "Zoom currently disabled by game or mod" msgstr "Zoom dezactivat în prezent de joc sau mod" -#: src/client/game.cpp -msgid "ok" -msgstr "O.K" - #: src/client/gameui.cpp msgid "Chat currently disabled by game or mod" msgstr "Chatul este dezactivat de un joc sau o modificare" @@ -1669,32 +1642,28 @@ msgstr "Înapoi" #. ~ Usually paired with the Pause key #: src/client/keycode.cpp -#, fuzzy msgid "Break Key" -msgstr "Cheie pentru furiș" +msgstr "Tasta de pauză" #: src/client/keycode.cpp msgid "Caps Lock" msgstr "Majuscule" #: src/client/keycode.cpp -#, fuzzy msgid "Clear Key" -msgstr "Șterge" +msgstr "Tasta de eliminare" #: src/client/keycode.cpp -#, fuzzy msgid "Control Key" -msgstr "Control" +msgstr "Tasta Control" #: src/client/keycode.cpp -#, fuzzy msgid "Delete Key" -msgstr "Șterge" +msgstr "Tasta de ștergere" #: src/client/keycode.cpp msgid "Down Arrow" -msgstr "" +msgstr "Săgeată jos" #: src/client/keycode.cpp msgid "End" @@ -1741,9 +1710,8 @@ msgid "Insert" msgstr "Insert" #: src/client/keycode.cpp -#, fuzzy msgid "Left Arrow" -msgstr "Ctrl Stânga" +msgstr "Săgeată stânga" #: src/client/keycode.cpp msgid "Left Button" @@ -1767,9 +1735,8 @@ msgstr "Windows Stânga" #. ~ Key name, common on Windows keyboards #: src/client/keycode.cpp -#, fuzzy msgid "Menu Key" -msgstr "Meniu" +msgstr "Tastă Meniu" #: src/client/keycode.cpp msgid "Middle Button" @@ -1844,20 +1811,17 @@ msgid "OEM Clear" msgstr "Curățare OEM" #: src/client/keycode.cpp -#, fuzzy msgid "Page Down" -msgstr "Pagină în jos" +msgstr "Pagină jos" #: src/client/keycode.cpp -#, fuzzy msgid "Page Up" msgstr "Pagină sus" #. ~ Usually paired with the Break key #: src/client/keycode.cpp -#, fuzzy msgid "Pause Key" -msgstr "Pauză" +msgstr "Tasta Pauză" #: src/client/keycode.cpp msgid "Play" @@ -1869,14 +1833,12 @@ msgid "Print" msgstr "Imprimare" #: src/client/keycode.cpp -#, fuzzy msgid "Return Key" -msgstr "Înapoi" +msgstr "Tasta Retur" #: src/client/keycode.cpp -#, fuzzy msgid "Right Arrow" -msgstr "Ctrl Dreapta" +msgstr "Săgeată dreapta" #: src/client/keycode.cpp msgid "Right Button" @@ -1908,9 +1870,8 @@ msgid "Select" msgstr "Selectează" #: src/client/keycode.cpp -#, fuzzy msgid "Shift Key" -msgstr "Shift" +msgstr "Tasta Shift" #: src/client/keycode.cpp msgid "Sleep" @@ -1930,7 +1891,7 @@ msgstr "Tab" #: src/client/keycode.cpp msgid "Up Arrow" -msgstr "" +msgstr "Săgeată sus" #: src/client/keycode.cpp msgid "X Button 1" @@ -1941,9 +1902,8 @@ msgid "X Button 2" msgstr "X Butonul 2" #: src/client/keycode.cpp -#, fuzzy msgid "Zoom Key" -msgstr "Mărire" +msgstr "Tasta Mărire" #: src/client/minimap.cpp msgid "Minimap hidden" @@ -1963,6 +1923,15 @@ msgstr "Mini hartă în modul de suprafață, Zoom %dx" msgid "Minimap in texture mode" msgstr "Mini hartă în modul de textură" +#: src/client/shader.cpp +#, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "Eroare la compilarea shaderului \"%s\"." + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "Shaderele sunt activate dar GLSL nu este suportat de driver." + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2078,7 +2047,7 @@ msgstr "Tastă deja folosită" #: src/gui/guiKeyChangeMenu.cpp msgid "Keybindings." -msgstr "" +msgstr "Legături tastatură." #: src/gui/guiKeyChangeMenu.cpp msgid "Left" @@ -2156,6 +2125,18 @@ msgstr "Mărire" msgid "press key" msgstr "apasă o tastă" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "Deschideți" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "Deschideți URL?" + +#: src/gui/guiOpenURL.cpp +msgid "Unable to open URL" +msgstr "URL nu s-a putut deschide" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "Schimbă" @@ -2189,6 +2170,7 @@ msgstr "Volum sunet: %d%%" #. 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 "ro" @@ -2196,15 +2178,17 @@ msgstr "ro" msgid "" "Name is not registered. To create an account on this server, click 'Register'" msgstr "" +"Numele nu este înregistrat. Pentru a crea un cont pe acest server, dă click " +"pe „Înregistrare”" #: src/network/clientpackethandler.cpp msgid "Name is taken. Please choose another name" msgstr "Numele este folosit. Vă rugăm să alegeți altul" #: src/server.cpp -#, fuzzy, c-format +#, c-format msgid "%s while shutting down: " -msgstr "Se închide..." +msgstr "%s în timp ce se închide: " #: src/settings_translation_file.cpp msgid "" @@ -2278,7 +2262,7 @@ msgstr "Zgomot 2D, care localizează văile râurilor și canalelor." #: src/settings_translation_file.cpp msgid "3D" -msgstr "" +msgstr "3D" #: src/settings_translation_file.cpp msgid "3D clouds" @@ -2382,7 +2366,7 @@ msgstr "Interval ABM" #: src/settings_translation_file.cpp msgid "ABM time budget" -msgstr "" +msgstr "Buget de timp ABM" #: src/settings_translation_file.cpp msgid "Absolute limit of queued blocks to emerge" @@ -2416,17 +2400,11 @@ msgstr "Interval de trimitere obiect e activ" msgid "Adds particles when digging a node." msgstr "Adăuga particule atunci când săpați un nod." -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" -"Ajustați configurația dpi pe ecran (numai pentru x11/Android), de exemplu " -"pentru ecrane 4k." - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" +"Ajustează densitatea detectată a ecranului, folosită pentru scalarea " +"elementelor UI." #: src/settings_translation_file.cpp #, c-format @@ -2453,6 +2431,10 @@ msgstr "Nume administrator" msgid "Advanced" msgstr "Avansat" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "Permiteți lichidelor să fie transparente." + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2515,6 +2497,17 @@ msgstr "Adăugați numele articolului la sugestia de instrumente." msgid "Apple trees noise" msgstr "Zgomotul merilor" +#: 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 "Arm inertia" msgstr "Inerție braț" @@ -2532,18 +2525,40 @@ msgid "Ask to reconnect after crash" msgstr "Solicitați să vă reconectați după cădere" #: src/settings_translation_file.cpp +#, fuzzy 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 will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +msgstr "" +"La această distanță serverul va optimiza agresiv care blocuri sunt trimise " +"la\n" +"clienți.\n" +"Valorile mici pot îmbunătăți performanța foarte mult, cu costul afișării " +"unor\n" +"defecte de randare (unele blocuri nu vor fi redate sub apă și în peșteri,\n" +"precum și, uneori, pe teren).\n" +"Setarea acesteia la o valoare mai mare decât max_block_send_distance " +"dezactivează această\n" +"optimizare.\n" +"Menționate în mapblocks (16 noduri)." + +#: src/settings_translation_file.cpp +#, fuzzy +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 "" "La această distanță serverul va optimiza agresiv care blocuri sunt trimise " "la\n" @@ -2559,7 +2574,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Audio" -msgstr "" +msgstr "Sunet" #: src/settings_translation_file.cpp msgid "Automatically jump up single-node obstacles." @@ -2575,7 +2590,7 @@ msgstr "Mod scalare automată" #: src/settings_translation_file.cpp msgid "Aux1 key for climbing/descending" -msgstr "" +msgstr "Tasta Aux1 pentru urcare/coborâre" #: src/settings_translation_file.cpp msgid "Base ground level" @@ -2619,6 +2634,11 @@ msgstr "Biomuri" msgid "Biome noise" msgstr "Biome zgomot" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Block cull optimize distance" +msgstr "Distanță de optimizare trimitere bloc" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "Distanță de optimizare trimitere bloc" @@ -2629,7 +2649,7 @@ msgstr "Strălucire" #: src/settings_translation_file.cpp msgid "Bloom Intensity" -msgstr "" +msgstr "Intensitate Bloom" #: src/settings_translation_file.cpp msgid "Bloom Radius" @@ -2637,11 +2657,11 @@ msgstr "Raza strălucirii (bloom)" #: src/settings_translation_file.cpp msgid "Bloom Strength Factor" -msgstr "" +msgstr "Factor de putere Bloom" #: src/settings_translation_file.cpp msgid "Bobbing" -msgstr "" +msgstr "Mișcare" #: src/settings_translation_file.cpp msgid "Bold and italic font path" @@ -2776,6 +2796,8 @@ msgid "" "Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " "output." msgstr "" +"Activare link-uri care se pot deschide (click mijlociu sau Ctrl+click " +"stânga) în ieșirea consolei din chat." #: src/settings_translation_file.cpp msgid "Client" @@ -2783,7 +2805,7 @@ msgstr "Client" #: src/settings_translation_file.cpp msgid "Client Mesh Chunksize" -msgstr "" +msgstr "Dimensiune Mesh Chunk de client" #: src/settings_translation_file.cpp msgid "Client and Server" @@ -2835,6 +2857,12 @@ msgstr "Ceaţă colorată" msgid "Colored shadows" msgstr "Umbre colorate" +#: 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -2867,6 +2895,10 @@ 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 "" +"Listă de mod-uri de încredere, separate prin virgulă, cărora li se permite " +"accesul \n" +"la funcții nesigure chiar și atunci când securitatea modurilor este activată " +"(prin request_insecure_environment())." #: src/settings_translation_file.cpp msgid "" @@ -2875,6 +2907,10 @@ msgid "" "0 - least compression, fastest\n" "9 - best compression, slowest" msgstr "" +"Nivelul de compresie folosit la salvarea mapblock-urilor pe disk\n" +"-1 - utilizare nivel implicit de compresie\n" +"0 - compresie minimă, cea mai rapidă\n" +"9 - compresie maximă, cea mai lentă" #: src/settings_translation_file.cpp msgid "" @@ -2883,6 +2919,10 @@ msgid "" "0 - least compression, fastest\n" "9 - best compression, slowest" msgstr "" +"Nivelul de compresie folosit la trimiterea mapblock-urilor la client\n" +"-1 - utilizare nivel implicit de compresie\n" +"0 - compresie minimă, cea mai rapidă\n" +"9 - compresie maximă, cea mai lentă" #: src/settings_translation_file.cpp msgid "Connect glass" @@ -2910,11 +2950,11 @@ msgstr "Înalţime consolă" #: src/settings_translation_file.cpp msgid "Content Repository" -msgstr "" +msgstr "Depozit de conținut" #: src/settings_translation_file.cpp msgid "ContentDB Flag Blacklist" -msgstr "" +msgstr "Listă neagră a etichetelor pe ContentDB" #: src/settings_translation_file.cpp msgid "ContentDB Max Concurrent Downloads" @@ -2930,20 +2970,25 @@ msgid "" "Examples:\n" "72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged." msgstr "" +"Controlează lungimea ciclului de zi/noapte\n" +"Exemple:\n" +"72 = 20min, 360 = 4min, 1 = 24ore, 0 = zi/noapte/orice rămâne neschimbat." #: src/settings_translation_file.cpp msgid "" "Controls sinking speed in liquid when idling. Negative values will cause\n" "you to rise instead." msgstr "" +"Controlează viteza de scufundare în lichid la staționare. Valorile negative\n" +"te vor face să te ridici în schimb." #: src/settings_translation_file.cpp msgid "Controls steepness/depth of lake depressions." -msgstr "" +msgstr "Controlează abruptul/profunditatea depresiunilor lacurilor." #: src/settings_translation_file.cpp msgid "Controls steepness/height of hills." -msgstr "" +msgstr "Controlează abruptul/înălțimea dealurilor." #: src/settings_translation_file.cpp msgid "" @@ -2951,60 +2996,66 @@ msgid "" "Value >= 10.0 completely disables generation of tunnels and avoids the\n" "intensive noise calculations." msgstr "" +"Controlează lățimea tunelelor, o valoare mai scăzută va crea tunele mai " +"late.\n" +"Valorile >= dezactivează complet generarea tunelelor și evită calcule\n" +"de zgomot intensive." #: src/settings_translation_file.cpp msgid "Crash message" -msgstr "" +msgstr "Mesaj de eroare" #: src/settings_translation_file.cpp msgid "Crosshair alpha" -msgstr "" +msgstr "Transparență țintă" #: src/settings_translation_file.cpp msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" "This also applies to the object crosshair." msgstr "" +"Transparență țintă (între 0 și 255).\n" +"Aceasta se aplică și țintei obiectelor." #: src/settings_translation_file.cpp msgid "Crosshair color" -msgstr "" +msgstr "Culoarea țintei" #: 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 "DPI" -msgstr "" +"Culoare țintei (R,G,B)\n" +"Aceasta controlează și culoarea țintei obiectelor" #: src/settings_translation_file.cpp msgid "Debug log file size threshold" -msgstr "" +msgstr "Pragul dimensiunii fișierului de jurnal pentru depanare" #: src/settings_translation_file.cpp msgid "Debug log level" -msgstr "" +msgstr "Nivelul jurnalului de depanare" #: src/settings_translation_file.cpp msgid "Debugging" -msgstr "" +msgstr "Depanare" #: src/settings_translation_file.cpp msgid "Dedicated server step" -msgstr "" +msgstr "Pasul serverului dedicat" #: src/settings_translation_file.cpp msgid "Default acceleration" -msgstr "" +msgstr "Accelerare implicită" #: src/settings_translation_file.cpp msgid "" "Default maximum number of forceloaded mapblocks.\n" "Set this to -1 to disable the limit." msgstr "" +"Numărul maxim implicit de mapblock-uri încărcate forțat.\n" +"Setează la -1 pentru a dezactiva limita." #: src/settings_translation_file.cpp msgid "Default password" @@ -3012,11 +3063,11 @@ msgstr "Parolă implicită" #: src/settings_translation_file.cpp msgid "Default privileges" -msgstr "" +msgstr "Privilegii implicite" #: src/settings_translation_file.cpp msgid "Default report format" -msgstr "" +msgstr "Format de raport implicit" #: src/settings_translation_file.cpp msgid "Default stack size" @@ -3028,26 +3079,45 @@ msgid "" "This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" +"Definește calitatea filtrării umbrelor.\n" +"Aceasta simulează și umbre netede aplicând un filtru PCF sau un Poission " +"disk\n" +"dar utilizează mai multe resurse." + +#: 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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." -msgstr "" +msgstr "Definește zonele unde copacii pot avea mere." #: src/settings_translation_file.cpp msgid "Defines areas with sandy beaches." -msgstr "" +msgstr "Definește zone cu plaje nisipoase." #: src/settings_translation_file.cpp msgid "Defines distribution of higher terrain and steepness of cliffs." -msgstr "" +msgstr "Definește distribuția de teren înalt și înclinația stâncilor." #: src/settings_translation_file.cpp msgid "Defines distribution of higher terrain." -msgstr "" +msgstr "Definește distribuția de teren înalt." #: src/settings_translation_file.cpp msgid "Defines full size of caverns, smaller values create larger caverns." msgstr "" +"Definește mărimea totală a cavernelor, valori mai mici vor crea caverne mai " +"mari." #: src/settings_translation_file.cpp msgid "" @@ -3058,25 +3128,27 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Defines large-scale river channel structure." -msgstr "" +msgstr "Definește structura canalelor de scală mare." #: src/settings_translation_file.cpp msgid "Defines location and terrain of optional hills and lakes." -msgstr "" +msgstr "Definește locația și terenul dealurilor și lacurilor opționale." #: src/settings_translation_file.cpp msgid "Defines the base ground level." -msgstr "" +msgstr "Definește nivelul de bază al solului." #: src/settings_translation_file.cpp msgid "Defines the depth of the river channel." -msgstr "" +msgstr "Definește adâncimea canalul unui râu." #: src/settings_translation_file.cpp msgid "" "Defines the magnitude of bloom overexposure.\n" "Range: from 0.1 to 10.0, default: 1.0" msgstr "" +"Definește magnitudinea supraexpunerii la strălucire.\n" +"Interval: de la 0.1 la 10.0, implicit: 1.0" #: src/settings_translation_file.cpp msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)." @@ -3213,6 +3285,11 @@ msgstr "Activează strălucirea (bloom)" msgid "Enable Bloom Debug" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Debanding" +msgstr "Activează Daune" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3232,6 +3309,10 @@ msgid "" "filtering." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable Post Processing" +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "" @@ -3274,6 +3355,10 @@ msgstr "Activați securitatea modului" msgid "Enable mouse wheel (scroll) for item selection in hotbar." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable random mod loading (mainly used for testing)." +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3297,6 +3382,11 @@ msgid "" "expecting." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable touchscreen" +msgstr "Ecran tactil" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3305,12 +3395,6 @@ msgid "" "when connecting to the server." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3340,6 +3424,19 @@ msgstr "" msgid "Enables caching of facedir rotated meshes." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -4139,9 +4236,10 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" #: src/settings_translation_file.cpp @@ -4288,10 +4386,6 @@ msgid "" "Make fog and sky colors depend on daytime (dawn/sunset) and view direction." msgstr "" -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "" @@ -4340,7 +4434,9 @@ 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." +"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 @@ -4375,10 +4471,6 @@ msgstr "" msgid "Mapblock mesh generation threads" msgstr "" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "" @@ -4621,6 +4713,10 @@ msgstr "" msgid "Minimap scan height" msgstr "" +#: src/settings_translation_file.cpp +msgid "Minimum dig repetition interval" +msgstr "" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "" @@ -4689,6 +4785,11 @@ msgstr "" msgid "Mouse sensitivity multiplier." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Movement threshold" +msgstr "Pragul cavernelor" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "" @@ -4798,10 +4899,6 @@ msgstr "" msgid "Occlusion Culling" msgstr "" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -4814,6 +4911,11 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "OpenGL debug" +msgstr "Debug Mapgen" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "" @@ -4923,6 +5025,15 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Protocol version minimum" +msgstr "Nepotrivire versiune protocol. " + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -4938,6 +5049,10 @@ msgstr "" msgid "Random input" msgstr "" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "" @@ -5126,8 +5241,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5245,7 +5360,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" @@ -5278,6 +5393,10 @@ msgid "" "Bright colors will bleed over the neighboring objects." 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 "Set to true to enable waving leaves." msgstr "" @@ -5317,8 +5436,7 @@ msgstr "Shadere" msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" #: src/settings_translation_file.cpp @@ -5388,13 +5506,6 @@ msgid "" "recommended." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "" @@ -5430,7 +5541,7 @@ msgstr "Lumină fină" #: 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 Change Keys." +"cinematic mode by using the key set in Controls." msgstr "" #: src/settings_translation_file.cpp @@ -5451,6 +5562,16 @@ msgstr "" msgid "Soft shadow radius" msgstr "Raza umbrelor fine" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sound" +msgstr "Sunet dezactivat" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sound Extensions Blacklist" +msgstr "Listă neagră a etichetelor pe ContentDB" + #: src/settings_translation_file.cpp msgid "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -5607,17 +5728,37 @@ msgid "" "when calling `/profiler save [format]` without format." 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 "" "The file path relative to your world path in which profiles will be saved to." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "" #: src/settings_translation_file.cpp -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" #: src/settings_translation_file.cpp @@ -5628,6 +5769,12 @@ msgid "" "Default is 1.0 (1/2 node)." 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 "The network interface that the server listens on." msgstr "" @@ -5654,7 +5801,7 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" #: src/settings_translation_file.cpp @@ -5711,6 +5858,10 @@ msgstr "" msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "" +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -5758,15 +5909,15 @@ msgstr "Ecran tactil" msgid "Touchscreen sensitivity multiplier." msgstr "" -#: src/settings_translation_file.cpp -#, fuzzy -msgid "Touchscreen threshold" -msgstr "Prag ecran tactil" - #: src/settings_translation_file.cpp msgid "Tradeoffs for performance" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Translucent liquids" +msgstr "Fluturarea lichidelor" + #: src/settings_translation_file.cpp msgid "Transparency Sorting Distance" msgstr "" @@ -5802,7 +5953,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 "" #: src/settings_translation_file.cpp @@ -5904,10 +6057,6 @@ msgstr "" msgid "User Interfaces" msgstr "" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "" @@ -5994,12 +6143,25 @@ msgstr "" msgid "Volume" msgstr "Volum" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +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 +#, fuzzy +msgid "Volumetric lighting" +msgstr "Lumină fină" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6239,12 +6401,18 @@ msgstr "" #~ msgid "(game support required)" #~ msgstr "(necesită suportul jocului)" +#~ msgid "- Address: " +#~ msgstr "- Adresa: " + #~ msgid "- Creative Mode: " #~ msgstr "- Modul creativ: " #~ msgid "- Damage: " #~ msgstr "- Daune: " +#~ msgid "- Port: " +#~ msgstr "- Port: " + #~ msgid "" #~ "0 = parallax occlusion with slope information (faster).\n" #~ "1 = relief mapping (slower, more accurate)." @@ -6280,6 +6448,13 @@ msgstr "" #~ "Rețineți că, câmpul de adresă din meniul principal suprascrie această " #~ "setare." +#~ msgid "" +#~ "Adjust dpi configuration to your screen (non X11/Android only) e.g. for " +#~ "4k screens." +#~ msgstr "" +#~ "Ajustați configurația dpi pe ecran (numai pentru x11/Android), de exemplu " +#~ "pentru ecrane 4k." + #~ msgid "All Settings" #~ msgstr "Toate setările" @@ -6311,6 +6486,9 @@ msgstr "" #~ msgid "Bits per pixel (aka color depth) in fullscreen mode." #~ msgstr "Biți per pixel (aka adâncime de culoare) în modul ecran complet." +#~ msgid "Block bounds shown for all blocks" +#~ msgstr "Limite blocuri afișate pentru toate blocurile" + #~ msgid "Bump Mapping" #~ msgstr "Cartografiere cu denivelări" @@ -6333,6 +6511,9 @@ msgstr "" #~ msgid "Camera update toggle key" #~ msgstr "Tasta de comutare a actualizării camerei" +#~ msgid "Change Keys" +#~ msgstr "Modifică tastele" + #, fuzzy #~ msgid "Change keys" #~ msgstr "Modifică tastele" @@ -6385,12 +6566,47 @@ msgstr "" #~ msgid "Continuous forward" #~ msgstr "În continuare înainte" +#, fuzzy, c-format +#~ msgid "" +#~ "Controls:\n" +#~ "- %s: move forwards\n" +#~ "- %s: move backwards\n" +#~ "- %s: move left\n" +#~ "- %s: move right\n" +#~ "- %s: jump/climb up\n" +#~ "- %s: dig/punch/use\n" +#~ "- %s: place/use\n" +#~ "- %s: sneak/climb down\n" +#~ "- %s: drop item\n" +#~ "- %s: inventory\n" +#~ "- Mouse: turn/look\n" +#~ "- Mouse wheel: select item\n" +#~ "- %s: chat\n" +#~ msgstr "" +#~ "Controale:\n" +#~ "- %s: deplasare înainte\n" +#~ "- %s: deplasare înapoi\n" +#~ "- %s: deplasare stânga\n" +#~ "- %s: deplasare dreapta\n" +#~ "- %s: salt/urcare\n" +#~ "- %s: săpare/lovire\n" +#~ "- %s: plasare/utilizare\n" +#~ "- %s: furișare/coborâre\n" +#~ "- %s: aruncare obiect\n" +#~ "- %s: inventar\n" +#~ "- Maus: rotire/privire\n" +#~ "- Roata mausului: selectare obiect\n" +#~ "- %s: chat\n" + #~ msgid "Creative" #~ msgstr "Creativ" #~ msgid "Credits" #~ msgstr "Credite" +#~ msgid "DPI" +#~ msgstr "DPI" + #~ msgid "Damage" #~ msgstr "Daune" @@ -6476,6 +6692,9 @@ msgstr "" #~ msgid "Install: file: \"$1\"" #~ msgstr "Instalare: fișier: \"$1\"" +#~ msgid "Invalid gamespec." +#~ msgstr "Jocul este nevalid." + #~ msgid "Inventory key" #~ msgstr "Tasta pentru inventar" @@ -6642,6 +6861,10 @@ msgstr "" #~ msgid "Touch threshold (px):" #~ msgstr "Pragul atingerii (px):" +#, fuzzy +#~ msgid "Touchscreen threshold" +#~ msgstr "Prag ecran tactil" + #~ msgid "Trilinear Filter" #~ msgstr "Filtrare Triliniară" @@ -6702,8 +6925,14 @@ msgstr "" #~ msgid "You died." #~ msgstr "Ai murit." +#~ msgid "You have no games installed." +#~ msgstr "Nu aveți jocuri instalate." + #~ msgid "Z" #~ msgstr "Z" #~ msgid "needs_fallback_font" #~ msgstr "no" + +#~ msgid "ok" +#~ msgstr "O.K" diff --git a/po/ru/minetest.po b/po/ru/minetest.po index c72aa7407..047cd70fe 100644 --- a/po/ru/minetest.po +++ b/po/ru/minetest.po @@ -2,19 +2,18 @@ msgid "" msgstr "" "Project-Id-Version: Russian (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" -"PO-Revision-Date: 2023-11-12 13:14+0000\n" -"Last-Translator: Nanashi Mumei \n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" +"PO-Revision-Date: 2024-07-16 12:09+0000\n" +"Last-Translator: BlackImpostor \n" "Language-Team: Russian \n" "Language: ru\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%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.2-dev\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" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -73,8 +72,8 @@ msgid "Command not available: " msgstr "Команда недоступна: " #: builtin/common/chatcommands.lua -msgid "Get help for commands" -msgstr "Получить справку по командам" +msgid "Get help for commands (-t: output in chat)" +msgstr "Получить справку по командам (-t: вывод в чат)" #: builtin/common/chatcommands.lua msgid "" @@ -84,12 +83,8 @@ msgstr "" "help all» для вывода всего списка." #: builtin/common/chatcommands.lua -msgid "[all | ]" -msgstr "[all | <команда>]" - -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" -msgstr "ОК" +msgid "[all | ] [-t]" +msgstr "[all | <команда>] [-t]" #: builtin/fstk/ui.lua msgid "" @@ -107,6 +102,10 @@ msgstr "Произошла ошибка:" msgid "Main menu" msgstr "Главное меню" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "ОК" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Переподключиться" @@ -135,19 +134,27 @@ msgstr "Мы поддерживаем только протокол версии msgid "We support protocol versions between version $1 and $2." msgstr "Мы поддерживаем только протоколы версий с $1 по $2." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "«$1» уже существует. Перезаписать?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" +msgstr "Ошибка установки «$1»: $2" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." -msgstr "Зависимости $1 и $2 будут установлены." +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download \"$1\"" +msgstr "Не удалось загрузить «$1»" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" -msgstr "$1 из $2" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr "Не удалось загрузить $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "" +"Не удалось извлечь «$1» (недостаточно места на диске, неподдерживаемый тип " +"файла или поврежденный архив)" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" @@ -155,157 +162,157 @@ msgstr "" "$1 скачивается,\n" "$2 в очереди" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." msgstr "$1 скачивается…" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "Не удалось найти требуемые зависимости $1." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "Будет установлен $1, а зависимости $2 будут пропущены." - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "Все дополнения" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "Уже установлено" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "Назад в главное меню" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "ContentDB недоступен, когда Minetest скомпилирован без cURL" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "Загрузка…" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "Ошибка при получении зависимостей для дополнения" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "Игры" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +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 "Mods" +msgstr "Дополнения" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "Дополнения не могут быть получены" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "Нет результатов" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "Нет обновлений" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "В очереди" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "Наборы текстур" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "Дополнение $1 не найдено." + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "Удалить" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "Обновить" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "Обновить всё [$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 и $2 будут установлены." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "$1 из $2" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "Не удалось найти требуемые зависимости $1." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "Будет установлен $1, а зависимости $2 будут пропущены." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "Уже установленно" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "Основная игра:" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "Отмена" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "ContentDB недоступен, когда Minetest скомпилирован без cURL" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "Зависимости:" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "Загрузка…" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "Ошибка установки «$1»: $2" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download \"$1\"" -msgstr "Не удалось загрузить «$1»" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "Не удалось загрузить $1" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "" -"Не удалось извлечь «$1» (неподдерживаемый тип файла или повреждённый архив)" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "Игры" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "Установить" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "Установить $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "Установить недостающие зависимости" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "Загрузка…" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "Моды" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "Дополнения не могут быть получены" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "Нет результатов" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "Нет обновлений" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "Не найдено" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "Перезаписать" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "Убедитесь что основная игра корректна." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" -msgstr "В очереди" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" +msgstr "«$1» уже существует. Перезаписать?" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "Наборы текстур" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "Дополнение $1 не найдено." - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "Удалить" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "Обновить" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "Обновить всё [$1]" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "Посетить страницу в сети" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" -msgstr "Вам нужно установить игру, прежде чем вы сможете установить мод" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" +msgstr "Перезаписать" #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" @@ -453,10 +460,22 @@ msgstr "Создать" msgid "Decorations" msgstr "Декорации" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "Пустынные храмы" + #: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." msgstr "Development Test предназначен для разработчиков." +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" +"Другой вариант данжей, генерируемый в биомах пустыни (только если включены " +"сами данжи)" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "Подземелья" @@ -549,7 +568,7 @@ msgstr "Реки на уровне моря" #: builtin/mainmenu/dlg_create_world.lua #: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua msgid "Seed" -msgstr "Зерно" +msgstr "Сид" #: builtin/mainmenu/dlg_create_world.lua msgid "Smooth transition between biomes" @@ -755,7 +774,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)" @@ -834,10 +853,6 @@ msgstr "Доступность" msgid "Back" msgstr "Назад" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "Изменить управление" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -847,7 +862,8 @@ msgstr "Чат" msgid "Clear" msgstr "Очистить" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "Управление" @@ -885,11 +901,11 @@ msgstr "Клиентские моды" #: builtin/mainmenu/settings/settingtypes.lua msgid "Content: Games" -msgstr "Дополнения: игры" +msgstr "Контент: Игры" #: builtin/mainmenu/settings/settingtypes.lua msgid "Content: Mods" -msgstr "Дополнения: моды" +msgstr "Контент: Дополнения" #: builtin/mainmenu/settings/shadows_component.lua msgid "(The game will need to enable shadows as well)" @@ -930,7 +946,7 @@ msgstr "Очень низкие" #: builtin/mainmenu/tab_about.lua msgid "About" -msgstr "Об игре" +msgstr "Подробнее" #: builtin/mainmenu/tab_about.lua msgid "Active Contributors" @@ -938,7 +954,7 @@ msgstr "Активные участники" #: builtin/mainmenu/tab_about.lua msgid "Active renderer:" -msgstr "Используемый отрисовщик:" +msgstr "Активный рендер:" #: builtin/mainmenu/tab_about.lua msgid "Core Developers" @@ -978,19 +994,19 @@ msgstr "Поделиться журналом отладки" #: builtin/mainmenu/tab_content.lua msgid "Browse online content" -msgstr "Поиск дополнений в сети" +msgstr "Поиск онлайн контента" #: builtin/mainmenu/tab_content.lua msgid "Browse online content [$1]" -msgstr "Поиск дополнений в сети [$1]" +msgstr "Поиск онлайн контента [$1]" #: builtin/mainmenu/tab_content.lua msgid "Content" -msgstr "Дополнения" +msgstr "Контент" #: builtin/mainmenu/tab_content.lua msgid "Content [$1]" -msgstr "Дополнения [$1]" +msgstr "Контент [$1]" #: builtin/mainmenu/tab_content.lua msgid "Disable Texture Pack" @@ -1050,7 +1066,19 @@ msgstr "Установить игру" #: builtin/mainmenu/tab_local.lua msgid "Install games from ContentDB" -msgstr "Установить игры из ContentDB" +msgstr "Установить игры с ContentDB" + +#: builtin/mainmenu/tab_local.lua +msgid "Minetest doesn't come with a game by default." +msgstr "Minetest Game больше не стоит по умолчанию." + +#: builtin/mainmenu/tab_local.lua +msgid "" +"Minetest is a game-creation platform that allows you to play many different " +"games." +msgstr "" +"Minetest - это платформа для создания модификаций, которая позволяет вам " +"играть во множество различных игр и устанавливать дополнения." #: builtin/mainmenu/tab_local.lua msgid "New" @@ -1062,7 +1090,7 @@ msgstr "Мир не создан или не выбран!" #: builtin/mainmenu/tab_local.lua msgid "Play Game" -msgstr "Играть" +msgstr "Играть в Игру" #: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua msgid "Port" @@ -1085,8 +1113,8 @@ msgid "Start Game" msgstr "Начать игру" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." -msgstr "У вас не установлено ни одной игры." +msgid "You need to install a game before you can create a world." +msgstr "Вам требуется установить игру, прежде чем вы сможете создать мир." #: builtin/mainmenu/tab_online.lua msgid "Address" @@ -1165,18 +1193,10 @@ msgstr "Загрузка текстур…" msgid "Rebuilding shaders..." msgstr "Сборка шейдеров…" -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "Ошибка соединения (время вышло?)" - #: src/client/clientlauncher.cpp msgid "Could not find or load game: " msgstr "Не удалось найти или загрузить игру: " -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "Неправильная конфигурация игры." - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "Главное меню" @@ -1201,7 +1221,11 @@ msgstr "Не удалось открыть указанный файл с пар msgid "Provided world path doesn't exist: " msgstr "По этому пути мира нет: " -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "Медиафайлы…" + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp msgid "" "\n" "Check debug.txt for details." @@ -1209,18 +1233,10 @@ msgstr "" "\n" "Подробности в debug.txt." -#: src/client/game.cpp -msgid "- Address: " -msgstr "- Адрес: " - #: src/client/game.cpp msgid "- Mode: " msgstr "- Режим: " -#: src/client/game.cpp -msgid "- Port: " -msgstr "- Порт: " - #: src/client/game.cpp msgid "- Public: " msgstr "- Публичность: " @@ -1255,10 +1271,6 @@ msgstr "Автобег включён" msgid "Block bounds hidden" msgstr "Границы мапблока скрыты" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "Границы показаны для всех мапблоков" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "Границы показаны для текущего мапблока" @@ -1303,6 +1315,10 @@ msgstr "Пользовательские моды отключены" msgid "Connecting to server..." msgstr "Подключение к серверу…" +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "Ошибка соединения (время вышло?)" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "Сбой соединения по неизвестной причине" @@ -1311,46 +1327,13 @@ msgstr "Сбой соединения по неизвестной причине msgid "Continue" msgstr "Продолжить" -#: src/client/game.cpp -#, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" -"Управление:\n" -"- %s: вперёд\n" -"- %s: назад\n" -"- %s: влево\n" -"- %s: вправо\n" -"- %s: прыжок/подъём\n" -"- %s: копать/удар/применить\n" -"- %s: разместить/применить\n" -"- %s: красться/спуск\n" -"- %s: бросить предмет\n" -"- %s: инвентарь\n" -"- Мышь: поворот/обзор\n" -"- Колесо мыши: выбор предмета\n" -"- %s: чат\n" - #: src/client/game.cpp msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1359,17 +1342,17 @@ 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" #: src/client/game.cpp @@ -1408,7 +1391,7 @@ msgstr "Выйти в меню" #: src/client/game.cpp msgid "Exit to OS" -msgstr "Выйти в ОС" +msgstr "Выйти из игры" #: src/client/game.cpp msgid "Fast mode disabled" @@ -1442,6 +1425,10 @@ msgstr "Туман отключён" msgid "Fog enabled" msgstr "Туман включён" +#: src/client/game.cpp +msgid "Fog enabled by game or mod" +msgstr "Туман включён игрой или модом" + #: src/client/game.cpp msgid "Game info:" msgstr "Сведения об игре:" @@ -1462,10 +1449,6 @@ msgstr "Описания предметов…" msgid "KiB/s" msgstr "КиБ/с" -#: src/client/game.cpp -msgid "Media..." -msgstr "Медиафайлы…" - #: src/client/game.cpp msgid "MiB/s" msgstr "МиБ/с" @@ -1623,10 +1606,6 @@ msgstr "Отображение каркаса включено" msgid "Zoom currently disabled by game or mod" msgstr "Приближение на данный момент отключено игрой или модом" -#: src/client/game.cpp -msgid "ok" -msgstr "ок" - #: src/client/gameui.cpp msgid "Chat currently disabled by game or mod" msgstr "Чат на данный момент отключён игрой или модом" @@ -1658,7 +1637,7 @@ msgstr "Профилировщик (страница %d из %d)" #: src/client/keycode.cpp msgid "Apps" -msgstr "Apps" +msgstr "Приложения" #: src/client/keycode.cpp msgid "Backspace" @@ -1695,11 +1674,11 @@ msgstr "End" #: src/client/keycode.cpp msgid "Erase EOF" -msgstr "Erase EOF" +msgstr "Стереть EOF" #: src/client/keycode.cpp msgid "Execute" -msgstr "Execute" +msgstr "Выполнить" #: src/client/keycode.cpp msgid "Help" @@ -1711,23 +1690,23 @@ msgstr "Home" #: src/client/keycode.cpp msgid "IME Accept" -msgstr "IME Accept" +msgstr "Принять IME" #: src/client/keycode.cpp msgid "IME Convert" -msgstr "IME Convert" +msgstr "Конвертировать IME" #: src/client/keycode.cpp msgid "IME Escape" -msgstr "IME Escape" +msgstr "Выйти IME" #: src/client/keycode.cpp msgid "IME Mode Change" -msgstr "IME Mode Change" +msgstr "Режим изменения IME" #: src/client/keycode.cpp msgid "IME Nonconvert" -msgstr "IME Nonconvert" +msgstr "Несконвертуемый IME" #: src/client/keycode.cpp msgid "Insert" @@ -1772,67 +1751,67 @@ msgstr "Num Lock" #: src/client/keycode.cpp msgid "Numpad *" -msgstr "Numpad *" +msgstr "Номерная плитка *" #: src/client/keycode.cpp msgid "Numpad +" -msgstr "Numpad +" +msgstr "Номерная плитка +" #: src/client/keycode.cpp msgid "Numpad -" -msgstr "Numpad -" +msgstr "Номерная плитка -" #: src/client/keycode.cpp msgid "Numpad ." -msgstr "Numpad ." +msgstr "Номерная плитка ." #: src/client/keycode.cpp msgid "Numpad /" -msgstr "Numpad /" +msgstr "Номерная плитка /" #: src/client/keycode.cpp msgid "Numpad 0" -msgstr "Numpad 0" +msgstr "Номерная плитка 0" #: src/client/keycode.cpp msgid "Numpad 1" -msgstr "Numpad 1" +msgstr "Номерная плитка 1" #: src/client/keycode.cpp msgid "Numpad 2" -msgstr "Numpad 2" +msgstr "Номерная плитка 2" #: src/client/keycode.cpp msgid "Numpad 3" -msgstr "Numpad 3" +msgstr "Номерная плитка 3" #: src/client/keycode.cpp msgid "Numpad 4" -msgstr "Numpad 4" +msgstr "Номерная плитка 4" #: src/client/keycode.cpp msgid "Numpad 5" -msgstr "Numpad 5" +msgstr "Номерная плитка 5" #: src/client/keycode.cpp msgid "Numpad 6" -msgstr "Numpad 6" +msgstr "Номерная плитка 6" #: src/client/keycode.cpp msgid "Numpad 7" -msgstr "Numpad 7" +msgstr "Номерная плитка 7" #: src/client/keycode.cpp msgid "Numpad 8" -msgstr "Numpad 8" +msgstr "Номерная плитка 8" #: src/client/keycode.cpp msgid "Numpad 9" -msgstr "Numpad 9" +msgstr "Номерная плитка 9" #: src/client/keycode.cpp msgid "OEM Clear" -msgstr "OEM Clear" +msgstr "OEM Очистка" #: src/client/keycode.cpp msgid "Page Down" @@ -1849,7 +1828,7 @@ msgstr "Pause" #: src/client/keycode.cpp msgid "Play" -msgstr "Play" +msgstr "Играть" #. ~ "Print screen" key #: src/client/keycode.cpp @@ -1891,7 +1870,7 @@ msgstr "Scroll Lock" #. ~ Key name #: src/client/keycode.cpp msgid "Select" -msgstr "Select" +msgstr "Выбрать" #: src/client/keycode.cpp msgid "Shift Key" @@ -1899,7 +1878,7 @@ msgstr "Shift" #: src/client/keycode.cpp msgid "Sleep" -msgstr "Sleep" +msgstr "Спать" #: src/client/keycode.cpp msgid "Snapshot" @@ -1947,6 +1926,15 @@ msgstr "Миникарта в ландшафтном режиме, увелич msgid "Minimap in texture mode" msgstr "Миникарта в текстурном режиме" +#: src/client/shader.cpp +#, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "Не удалось скомпилировать шейдер «%s»." + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "Шейдеры включены, но GLSL не поддерживается драйвером." + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2139,6 +2127,18 @@ msgstr "Приближение" msgid "press key" msgstr "нажмите клавишу" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "Открыто" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "Открыть URL-адрес?" + +#: src/gui/guiOpenURL.cpp +msgid "Unable to open URL" +msgstr "Не удается открыть URL-адрес" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "Изменить" @@ -2172,6 +2172,7 @@ msgstr "Громкость звука: %d%%" #. 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 "ru" @@ -2345,7 +2346,7 @@ 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 "" -"Выбранное зерно для новой карты, оставьте пустым для случайного.\n" +"Выбранный сид для нового мира, оставьте пустым для случайного.\n" "Будет переопределено при создании нового мира в главном меню." #: src/settings_translation_file.cpp @@ -2396,14 +2397,6 @@ msgstr "Дальность отправляемого активного объ msgid "Adds particles when digging a node." msgstr "Добавляет частицы при копании ноды." -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" -"Настройка dpi (плотности точек на дюйм) для вашего экрана (не для X11, " -"только для Android). Например для мониторов с разрешением в 4k." - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2434,6 +2427,10 @@ msgstr "Имя админа" msgid "Advanced" msgstr "Дополнительно" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "Позволяет жидкостям быть прозрачными." + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2492,6 +2489,27 @@ msgstr "Добавлять названия предметов во всплыв msgid "Apple trees noise" 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 "" +"Примените сглаживание, чтобы уменьшить искажения цветовых полос.\n" +"Сглаживание значительно увеличивает размер\n" +"скриншотов, сжатых без потерь, и работает некорректно, если дисплей или " +"операционная система\n" +"выполняют дополнительное сглаживание или если цветовые каналы не квантованы\n" +"до 8 бит.\n" +"В OpenGL ES сглаживание работает только в том случае, если шейдер " +"поддерживает высокую\n" +"точность с плавающей запятой, и это может оказать более высокое влияние на " +"производительность." + #: src/settings_translation_file.cpp msgid "Arm inertia" msgstr "Покачивание руки" @@ -2515,21 +2533,40 @@ msgid "" "clients.\n" "Small values potentially improve performance a lot, at the expense of " "visible\n" -"rendering glitches (some blocks will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." msgstr "" -"На этом расстоянии сервер будет агрессивно оптимизировать то, какие\n" -"мапблоки будут отправлены клиентам.\n" -"Малые значения могут увеличить производительность за счёт заметных\n" -"проблем визуализации (некоторые фрагменты не будут отрисовываться\n" -"под водой, в пещерах, а иногда и на суше).\n" -"Установка этого значения больше, чем max_block_send_distance\n" -"отключит эту оптимизацию.\n" -"Указывается в мапблоках карты (16 нод)." +"На таком расстоянии сервер будет активно оптимизировать, какие блоки будут " +"отправляться\n" +"клиентам.\n" +"Небольшие значения потенциально значительно повышают производительность за " +"счет видимых\n" +"сбоев в рендеринге (некоторые блоки могут отображаться некорректно в шахтах)." +"\n" +"Установка значения, превышающего значение max_block_send_distance, отключает " +"эту\n" +"оптимизацию.\n" +"Указано в MapBlocks (16 нод)." + +#: 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 "" +"На таком расстоянии сервер выполнит более простую и дешевую проверку " +"окклюзии.\n" +"Меньшие значения потенциально повышают производительность за счет временно " +"заметных\n" +"сбоев в рендеринге (пропущенных блоков).\n" +"Это особенно полезно при очень большом диапазоне просмотра (более 500).\n" +"Указано в MapBlocks (16 узлов)." #: src/settings_translation_file.cpp msgid "Audio" @@ -2585,12 +2622,16 @@ msgstr "Адрес привязки" #: src/settings_translation_file.cpp msgid "Biome API" -msgstr "Biome API" +msgstr "API биомов" #: src/settings_translation_file.cpp msgid "Biome noise" msgstr "Шум биомов" +#: src/settings_translation_file.cpp +msgid "Block cull optimize distance" +msgstr "Отбраковка блоков оптимизирует расстояние" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "Дистанция оптимизирования отправки мапблока" @@ -2807,6 +2848,16 @@ msgstr "Цветной туман" msgid "Colored shadows" 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 "" +"Список разделенных запятыми расширений AL и ALC, которые не следует " +"использовать.\n" +"Полезно для тестирования. Подробности смотрите в разделе " +"al_extensions.[h,cpp]." + #: src/settings_translation_file.cpp msgid "" "Comma-separated list of flags to hide in the content repository.\n" @@ -2893,7 +2944,7 @@ msgstr "Высота консоли" #: src/settings_translation_file.cpp msgid "Content Repository" -msgstr "Репозиторий дополнений" +msgstr "Репозиторий Контента" #: src/settings_translation_file.cpp msgid "ContentDB Flag Blacklist" @@ -2901,11 +2952,11 @@ msgstr "Чёрный список меток ContentDB" #: src/settings_translation_file.cpp msgid "ContentDB Max Concurrent Downloads" -msgstr "Максимум одновременных загрузок ContentDB" +msgstr "Максимум Одновременных Скачиваний ContentDB" #: src/settings_translation_file.cpp msgid "ContentDB URL" -msgstr "Адрес ContentDB" +msgstr "Ссылка ContentDB" #: src/settings_translation_file.cpp msgid "" @@ -2973,10 +3024,6 @@ msgstr "" "Цвет прицела (R,G,B).\n" "Также контролирует цвет объекта прицела" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "DPI" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "Порог размера файла журнала отладки" @@ -3031,6 +3078,29 @@ msgstr "" "Это имитирует эффект мягких теней, применяя PCF или диск Пуассона,\n" "но также использует больше ресурсов." +#: 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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" +"Определите, к каким самым старым клиентам разрешено подключаться.\n" +"Старые клиенты совместимы в том смысле, что они не будут выходить из строя " +"при подключении\n" +"к новым серверам, но они могут поддерживать не все новые функции, которые вы " +"ожидаете.\n" +"Это позволяет осуществлять более детальный контроль, чем " +"strict_protocol_version_checking.\n" +"Minetest по-прежнему применяет свой собственный внутренний минимум, и " +"включение\n" +"strict_protocol_version_checking эффективно отменит это." + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "Определяет области, где у деревьев есть яблоки." @@ -3168,7 +3238,7 @@ msgstr "Рассинхронизация анимации нод" #: src/settings_translation_file.cpp msgid "Developer Options" -msgstr "Настройки для разработчиков" +msgstr "Для разработчиков" #: src/settings_translation_file.cpp msgid "Digging particles" @@ -3234,6 +3304,10 @@ msgstr "Включить эффект свечения (блум)" msgid "Enable Bloom Debug" msgstr "Включить отладку свечения" +#: src/settings_translation_file.cpp +msgid "Enable Debanding" +msgstr "Включить Дебандинг" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3260,6 +3334,10 @@ msgstr "" "Если включена использует диск Пуассона для создания «мягких теней». В " "противном случае используется фильтрация PCF." +#: src/settings_translation_file.cpp +msgid "Enable Post Processing" +msgstr "Включить Постобработку" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "Включить лучевое окклюзивное отсечение" @@ -3309,6 +3387,11 @@ msgstr "Включить безопасность модов" msgid "Enable mouse wheel (scroll) for item selection in hotbar." msgstr "Включает колёсико мыши (прокрутку) для выбора предмета в хотбаре." +#: src/settings_translation_file.cpp +msgid "Enable random mod loading (mainly used for testing)." +msgstr "" +"Включите случайную загрузку модов (в основном используемых для тестирования)." + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "Включить случайный ввод пользователя (только для тестов)." @@ -3339,6 +3422,10 @@ msgstr "" "к новым серверам, однако они могут не поддерживать всех новых функций, " "которые вы ожидаете." +#: src/settings_translation_file.cpp +msgid "Enable touchscreen" +msgstr "Включить сенсорный экран" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3352,14 +3439,6 @@ msgstr "" "текстуры)\n" "во время подключения к серверу." -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" -"Включить объекты буфера вершин.\n" -"Это должно значительно улучшить графическую производительность." - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3398,6 +3477,21 @@ msgstr "Включить анимацию предметов в инвентар msgid "Enables caching of facedir rotated meshes." msgstr "Включает кэширование повёрнутых мешей." +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +msgstr "Включает отладку и проверку ошибок в драйвере OpenGL." + +#: 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." +msgstr "" +"Включает сенсорный режим, позволяющий играть в игру с помощью сенсорного " +"экрана." + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -3482,7 +3576,7 @@ msgid "" "the\n" "Multiplayer Tab." msgstr "" -"Файл в папке client/serverlist/, содержащий ваши избранные серверы\n" +"Файл в папке client/serverlist/, содержащий ваши избранные сервера\n" "из вкладки Мультиплеер." #: src/settings_translation_file.cpp @@ -3511,7 +3605,7 @@ msgstr "Первый из двух 3D-шумов, которые вместе о #: src/settings_translation_file.cpp msgid "Fixed map seed" -msgstr "Фиксированное зерно мира" +msgstr "Почининный сид мира" #: src/settings_translation_file.cpp msgid "Fixed virtual joystick" @@ -4194,7 +4288,7 @@ msgstr "Чувствительность джойстика" #: src/settings_translation_file.cpp msgid "Joystick type" -msgstr "Тип контроллера" +msgstr "Тип Джойстика" #: src/settings_translation_file.cpp msgid "" @@ -4320,12 +4414,14 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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." @@ -4498,10 +4594,6 @@ msgstr "" "Включить зависимость цвета тумана и облаков от времени суток (рассвет/закат) " "и направления взгляда." -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "Сделать все жидкости непрозрачными" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "Уровень сжатия карты для дискового хранилища" @@ -4561,12 +4653,16 @@ 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." +"the 'jungles' flag is ignored.\n" +"The 'temples' flag disables generation of desert temples. Normal dungeons " +"will appear instead." msgstr "" -"Атрибуты генерации для мапгена v6.\n" -"Параметр «snowbiomes» (снежные биомы) включает новую систему с 5 биомами.\n" -"Если «snowbiomes» включён, то автоматически активируются джунгли,\n" -"а флаг «jungles» не учитывается." +"Атрибуты создания карт, специфичные для Mapgen v6.\n" +"Флаг «snowbiomes» включает новую систему 5 биомов.\n" +"При включенном флаге «snowbiomes» автоматически включаются джунгли, а\n" +"флаг «jungles» игнорируется.\n" +"Флаг «temples» отключает создание храмов в пустыне. Вместо них появятся " +"обычные данжи." #: src/settings_translation_file.cpp msgid "" @@ -4604,10 +4700,6 @@ msgstr "Задержка в генерации мешей мапблока" msgid "Mapblock mesh generation threads" msgstr "Потоки генерации мешей мапблоков" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "Размер кэша мапблоков в генераторе мешей мапблоков в мегабайтах" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "Время ожидания выгрузки мапблоков" @@ -4875,6 +4967,10 @@ msgstr "Минимальный уровень журналирования дл msgid "Minimap scan height" msgstr "Высота сканирования миникарты" +#: src/settings_translation_file.cpp +msgid "Minimum dig repetition interval" +msgstr "Минимальный интервал повторения раскопок" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "Минимум случайных больших пещер на мапчанк." @@ -4943,6 +5039,10 @@ msgstr "Чувствительность мыши" msgid "Mouse sensitivity multiplier." msgstr "Множитель чувствительности мыши." +#: src/settings_translation_file.cpp +msgid "Movement threshold" +msgstr "Порог перемещения" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "Шум грязи" @@ -5081,10 +5181,6 @@ msgstr "Метод окклюзивного отсечения" msgid "Occlusion Culling" msgstr "Окклюзивное отсечение" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "Непрозрачные жидкости" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -5099,6 +5195,10 @@ msgstr "" "Открыть меню паузы при потере окном фокуса.\n" "Не срабатывает, если какая-либо форма уже открыта." +#: src/settings_translation_file.cpp +msgid "OpenGL debug" +msgstr "Отладка OpenGL" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "Опциональное переопределение цвета ссылки в чате." @@ -5232,6 +5332,14 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "Соотношение больших пещер, которые содержат жидкости." +#: src/settings_translation_file.cpp +msgid "Protocol version minimum" +msgstr "Минимальная версия протокола" + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "Жест удара кулаком" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -5249,6 +5357,10 @@ msgstr "Поднимает ландшафт, чтобы образовывать msgid "Random input" msgstr "Случайный ввод" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "Случайный порядок загрузки мода" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "Недавние сообщения чата" @@ -5395,10 +5507,11 @@ msgid "" "pixels when scaling down, at the cost of blurring some\n" "edge pixels when images are scaled by non-integer sizes." msgstr "" -"Масштабировать интерфейс, используя заданное значение.\n" +"Масштабируйте интерфейс, используя заданное значение.\n" "Использует фильтр ближайшего сглаживания, чтобы масштабировать интерфейс.\n" -"Это сгладит острые углы и смешает пиксели при уменьшении масштаба,\n" -"за счёт размывания пикселей на гранях при масштабировании на нецелые размеры." +"Это сгладит острые углы и смешает пиксели при\n" +"уменьшении размера за счёт размывания пикселей на гранях\n" +"при масштабировании на нецелые размеры." #: src/settings_translation_file.cpp msgid "Screen" @@ -5436,7 +5549,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Screenshots" -msgstr "Скриншоты" +msgstr "Снимки экрана" #: src/settings_translation_file.cpp msgid "Seabed noise" @@ -5462,8 +5575,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5479,22 +5592,25 @@ msgid "" msgstr "" "Выберите метод сглаживания, который необходимо применить.\n" "\n" -"* None - сглаживание отсутствует (по умолчанию)\n" +"* * Нет - сглаживание отсутствует (по умолчанию).\n" "\n" -"* FSAA - аппаратное полноэкранное сглаживание (несовместимое с шейдерами)\n" -", известное как сглаживание с несколькими выборками (MSAA)\n" +"* FSAA - Аппаратное полноэкранное сглаживание\n" +"(несовместимое с постобработкой и недостаточной дискретизацией)\n" +", аналогичное сглаживанию с несколькими выборками (MSAA)\n" "Сглаживает края блоков, но не влияет на внутреннюю часть текстур.\n" "Для изменения этого параметра требуется перезагрузка.\n" "\n" -"* FXAA - быстрое приблизительное сглаживание (требуются шейдеры)\n" -"Применяет фильтр постобработки для обнаружения и сглаживания " +"* FXAA - Быстрое приблизительное сглаживание (требуется использование " +"шейдеров)\n" +"Применяется фильтр последующей обработки для обнаружения и сглаживания " "высококонтрастных краев.\n" "Обеспечивает баланс между скоростью и качеством изображения.\n" "\n" -"* SSAA - сглаживание с супер-выборкой (требуются шейдеры)\n" -"Рендерит изображение сцены с более высоким разрешением, затем уменьшает " -"масштаб,\n" -"чтобы уменьшить эффекты наложения. Это самый медленный и точный метод." +"* SSAA - сглаживание с использованием суперсэмплирования (требуются шейдеры)" +"\n" +"Визуализирует изображение сцены с более высоким разрешением, затем уменьшает " +"масштаб, чтобы уменьшить\n" +"эффекты наложения. Это самый медленный и точный метод." #: src/settings_translation_file.cpp msgid "Selection box border color (R,G,B)." @@ -5624,11 +5740,11 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" -"Устанавливает язык. Оставьте пустым, чтобы использовать системный язык.\n" -"Требует перезапуска после изменения." +"Установит язык. По умолчанию используется язык системы.\n" +"После изменения этого параметра требуется перезагрузка." #: src/settings_translation_file.cpp msgid "" @@ -5668,6 +5784,12 @@ msgstr "" "Включает эффект свечения.\n" "Яркие цвета будут переливаться через соседние предметы." +#: src/settings_translation_file.cpp +msgid "Set to true to enable volumetric lighting effect (a.k.a. \"Godrays\")." +msgstr "" +"Установите значение true, чтобы включить эффект объемного освещения (он же " +"\"Божественные лучи\")." + #: src/settings_translation_file.cpp msgid "Set to true to enable waving leaves." msgstr "Включает покачивание листвы." @@ -5716,13 +5838,11 @@ msgstr "Шейдеры" msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" -"Шейдеры позволяют использовать дополнительные визуальные эффекты и могут " -"увеличить\n" -"производительность некоторых видеоплат.\n" -"Работают только с движком отрисовки OpenGL." +"Шейдеры позволяют создавать расширенные визуальные эффекты и могут повысить " +"производительность некоторых\n" +"видеокарт." #: src/settings_translation_file.cpp msgid "Shadow filter quality" @@ -5810,16 +5930,6 @@ msgstr "" "Изменять его нужно только в особых ситуациях, рекомендуется\n" "оставить как есть." -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" -"Размер кэша мапблоков карты в генераторе мешей. Увеличение этого значения\n" -"увеличит процент попаданий в кэш, предотвращая копирование информации\n" -"из основного потока игры, тем самым уменьшая колебания кадровой частоты." - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "Наклон орбиты небесных тел" @@ -5855,11 +5965,11 @@ 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 Change Keys." +"cinematic mode by using the key set in Controls." msgstr "" -"Плавное вращение камеры в кинематографичном режиме, 0 для отключения. " -"Включите кинематографичный режим клавишей, определённой в настройках " -"управления." +"Сглаживает поворот камеры в кинематографическом режиме, 0 для отключения. " +"Войдите в кинематографический режим, используя клавишу, установленную в " +"элементах управления." #: src/settings_translation_file.cpp msgid "" @@ -5881,6 +5991,14 @@ msgstr "Скорость ходьбы украдкой, в нодах в сек msgid "Soft shadow radius" 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 "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -5982,8 +6100,8 @@ msgstr "" "островов.\n" "Вода по умолчанию отключена и будет размещена только в том случае, если это " "значение\n" -"будет установлено выше «mgv7_floatland_ymax» - " -"«mgv7_floatland_taper» (начало\n" +"будет установлено выше «mgv7_floatland_ymax» - «mgv7_floatland_taper» " +"(начало\n" "верхнего сужения).\n" "*** ПРЕДУПРЕЖДЕНИЕ, ВЕРОЯТНАЯ ОПАСНОСТЬ ДЛЯ МИРОВ И РАБОТЫ СЕРВЕРА ***:\n" "При включении размещения воды парящих островов должны быть сконфигурированы " @@ -6076,7 +6194,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "The URL for the content repository" -msgstr "Адрес сетевого хранилища" +msgstr "Адрес источника дополнения" #: src/settings_translation_file.cpp msgid "The dead zone of the joystick" @@ -6090,20 +6208,52 @@ msgstr "" "Формат по умолчанию, в котором профили будут сохранены,\n" "когда вызывают «/profiler save [формат]» без формата." +#: 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 "" "The file path relative to your world path in which profiles will be saved to." msgstr "" "Путь к файлу, куда будут сохранены профили, относительно пути к вашему миру." +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" +"Жест, обозначающий удар по игроку/объекту.\n" +"Его можно изменить в играх и модах.\n" +"\n" +"* короткий удар\n" +"Прост в использовании и хорошо известен по другим играм, названия которых не " +"указываются.\n" +"\n" +"* длинный удар\n" +"Известен по классическому мобильному элементу управления Minetest.\n" +"Сражение более или менее невозможно." + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "Идентификатор используемого контроллера" #: src/settings_translation_file.cpp -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" -"Расстояние в пикселях, с которого начинается действие от сенсорного экрана." +"Длина в пикселях, после которой сенсорное взаимодействие считается движением." #: src/settings_translation_file.cpp msgid "" @@ -6117,6 +6267,15 @@ msgstr "" "0.0 = волна не двигается вообще.\n" "Значение по умолчанию — 1.0 (1/2 ноды)." +#: src/settings_translation_file.cpp +msgid "" +"The minimum time in seconds it takes between digging nodes when holding\n" +"the dig button." +msgstr "" +"Минимальное время в секундах, которое требуется между копающими узлами при " +"удерживании\n" +"кнопки копать." + #: src/settings_translation_file.cpp msgid "The network interface that the server listens on." msgstr "Сетевой интерфейс который слушает сервер." @@ -6152,12 +6311,13 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" -"Движок отрисовки.\n" -"Примечение: после изменения этой настройки требуется перезапуск!\n" -"OpenGL по умолчанию для компьютеров и OGLES2 для Android.\n" -"Шейдеры поддерживаются OpenGL и OGLES2 (экспериментально)." +"Серверная часть рендеринга.\n" +"Примечание: После изменения этого параметра требуется перезагрузка!\n" +"По умолчанию для настольных компьютеров используется OpenGL, а для Android - " +"OGLES2.\n" +"Шейдеры поддерживаются всеми, кроме OGLES1." #: src/settings_translation_file.cpp msgid "" @@ -6235,6 +6395,10 @@ msgstr "" "Третий из четырёх 2D-шумов, которые вместе определяют диапазон высот холмов " "и гор." +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "Порог для длинных нажатий" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -6289,14 +6453,14 @@ msgstr "Чувствительность сенсорного экрана" msgid "Touchscreen sensitivity multiplier." msgstr "Множитель чувствительности сенсорного экрана." -#: src/settings_translation_file.cpp -msgid "Touchscreen threshold" -msgstr "Порог сенсорного экрана" - #: src/settings_translation_file.cpp msgid "Tradeoffs for performance" msgstr "Компромиссы для производительности" +#: src/settings_translation_file.cpp +msgid "Translucent liquids" +msgstr "Полупрозрачные жидкости" + #: src/settings_translation_file.cpp msgid "Transparency Sorting Distance" msgstr "Дальность сортировки по прозрачности" @@ -6343,10 +6507,13 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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, который предоставляет сведения о последнем выпуске " -"Minetest" +"URL-адрес файла JSON, который предоставляет информацию о последней версии " +"Minetest\n" +"Если поле не заполнено, движок никогда не будет проверять наличие обновлений." #: src/settings_translation_file.cpp msgid "URL to the server list displayed in the Multiplayer Tab." @@ -6405,9 +6572,8 @@ msgstr "" "Использовать анизотропную фильтрацию при взгляде на текстуры под углом." #: src/settings_translation_file.cpp -#, fuzzy msgid "Use bilinear filtering when scaling textures." -msgstr "Использовать трилинейную фильтрацию для масштабирования текстур." +msgstr "Использовать билинейную фильтрацию для масштабирования текстур." #: src/settings_translation_file.cpp msgid "Use crosshair for touch screen" @@ -6423,15 +6589,15 @@ msgstr "" "выбора предмета." #: src/settings_translation_file.cpp -#, fuzzy 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 "" -"Использовать MIP-текстурирование для текстур в уменьшенном масштабе.\n" -"Может немного увеличить производительность, особенно при использовании " -"набора текстур высокого разрешения.\n" +"Использовать MIP-текстурирование для масштабирования текстур. Может немного " +"увеличить\n" +"производительность, особенно при использовании пакета текстур высокого " +"разрешения.\n" "Гамма-коррекция при уменьшении масштаба не поддерживается." #: src/settings_translation_file.cpp @@ -6445,13 +6611,12 @@ msgstr "" "для клиентских мешей меньше чем 4x4x4 мапблоков." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Use trilinear filtering when scaling textures.\n" "If both bilinear and trilinear filtering are enabled, trilinear filtering\n" "is applied." msgstr "" -"Используйте трехлинейную фильтрацию при уменьшении масштаба текстур.\n" +"Использовать трилинейную фильтрацию при масштабировании текстур.\n" "Если включены как билинейная, так и трилинейная фильтрация,\n" "применяется трилинейная фильтрация." @@ -6467,11 +6632,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "User Interfaces" -msgstr "Пользовательские интерфейсы" - -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "Объекты буфера вершин (VBO)" +msgstr "Интерфейсы" #: src/settings_translation_file.cpp msgid "VSync" @@ -6565,6 +6726,10 @@ msgstr "Виртуальный джойстик нажимает кнопку Au msgid "Volume" msgstr "Громкость" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +msgstr "Увеличивается громкость, когда окно не сфокусировано." + #: src/settings_translation_file.cpp msgid "" "Volume of all sounds.\n" @@ -6573,6 +6738,14 @@ msgstr "" "Громкость всех звуков.\n" "Требует включенной звуковой системы." +#: src/settings_translation_file.cpp +msgid "Volume when unfocused" +msgstr "Громкость при расфокусировке" + +#: src/settings_translation_file.cpp +msgid "Volumetric lighting" +msgstr "Объемное освещение" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6680,7 +6853,7 @@ msgstr "" "интерполяцией для сохранения четкости пикселей. Это устанавливает " "минимальный размер текстуры\n" "для увеличенных текстур; большие значения выглядят чётче, но требуют больше\n" -"памяти. Рекомендуются степени числа 2. Эта настройки применяется только " +"памяти. Рекомендуются степени числа 2. Эта настройки применяется ТОЛЬКО " "если\n" "билинейный/трилинейный/анизотропный фильтр включен.\n" "Это также используется для автомасштабирования как основной размер для\n" @@ -6768,7 +6941,7 @@ msgid "" "World directory (everything in the world is stored here).\n" "Not needed if starting from the main menu." msgstr "" -"Папка мира (всё в мире хранится в ней).\n" +"Директория с миром (всё в мире хранится в ней).\n" "Не требуется при запуске из главного меню." #: src/settings_translation_file.cpp @@ -6852,15 +7025,15 @@ msgstr "Y-уровень морского дна." #: src/settings_translation_file.cpp msgid "cURL" -msgstr "cURL" +msgstr "URL" #: src/settings_translation_file.cpp msgid "cURL file download timeout" -msgstr "Таймаут загрузки файла с помощью cURL" +msgstr "Таймаут загрузки файла cURL" #: src/settings_translation_file.cpp msgid "cURL interactive timeout" -msgstr "Таймаут взаимодействия с cURL" +msgstr "Таймаут взаимодействия cURL" #: src/settings_translation_file.cpp msgid "cURL parallel limit" @@ -6869,12 +7042,18 @@ msgstr "Лимит одновременных соединений cURL" #~ msgid "(game support required)" #~ msgstr "(требуется поддержка игры)" +#~ msgid "- Address: " +#~ msgstr "- Адрес: " + #~ msgid "- Creative Mode: " #~ msgstr "- Режим творчества: " #~ msgid "- Damage: " #~ msgstr "- Урон: " +#~ msgid "- Port: " +#~ msgstr "- Порт: " + #~ msgid "" #~ "0 = parallax occlusion with slope information (faster).\n" #~ "1 = relief mapping (slower, more accurate)." @@ -6912,6 +7091,13 @@ msgstr "Лимит одновременных соединений cURL" #~ "Оставьте это поле пустым, чтобы запустить локальный сервер.\n" #~ "Заметьте, что поле адреса в главном меню перезапишет эту настройку." +#~ msgid "" +#~ "Adjust dpi configuration to your screen (non X11/Android only) e.g. for " +#~ "4k screens." +#~ msgstr "" +#~ "Настройка dpi (плотности точек на дюйм) для вашего экрана (не для X11, " +#~ "только для Android). Например для мониторов с разрешением в 4k." + #~ msgid "" #~ "Adjust the gamma encoding for the light tables. Higher numbers are " #~ "brighter.\n" @@ -6982,6 +7168,9 @@ msgstr "Лимит одновременных соединений cURL" #~ msgid "Bits per pixel (aka color depth) in fullscreen mode." #~ msgstr "Бит на пиксель (глубина цвета) в полноэкранном режиме." +#~ msgid "Block bounds shown for all blocks" +#~ msgstr "Границы показаны для всех мапблоков" + #~ msgid "Bump Mapping" #~ msgstr "Бампмаппинг" @@ -7007,6 +7196,9 @@ msgstr "Лимит одновременных соединений cURL" #~ msgid "Center of light curve mid-boost." #~ msgstr "Центр среднего подъёма кривой света." +#~ msgid "Change Keys" +#~ msgstr "Сменить клавиши" + #~ msgid "Change keys" #~ msgstr "Изменить управление" @@ -7082,6 +7274,38 @@ msgstr "Лимит одновременных соединений cURL" #~ "Контролирует ширину тоннелей. Меньшие значения создают более широкие " #~ "тоннели." +#, c-format +#~ msgid "" +#~ "Controls:\n" +#~ "- %s: move forwards\n" +#~ "- %s: move backwards\n" +#~ "- %s: move left\n" +#~ "- %s: move right\n" +#~ "- %s: jump/climb up\n" +#~ "- %s: dig/punch/use\n" +#~ "- %s: place/use\n" +#~ "- %s: sneak/climb down\n" +#~ "- %s: drop item\n" +#~ "- %s: inventory\n" +#~ "- Mouse: turn/look\n" +#~ "- Mouse wheel: select item\n" +#~ "- %s: chat\n" +#~ msgstr "" +#~ "Управление:\n" +#~ "- %s: вперёд\n" +#~ "- %s: назад\n" +#~ "- %s: влево\n" +#~ "- %s: вправо\n" +#~ "- %s: прыжок/подъём\n" +#~ "- %s: копать/удар/применить\n" +#~ "- %s: разместить/применить\n" +#~ "- %s: красться/спуск\n" +#~ "- %s: бросить предмет\n" +#~ "- %s: инвентарь\n" +#~ "- Мышь: поворот/обзор\n" +#~ "- Колесо мыши: выбор предмета\n" +#~ "- %s: чат\n" + #~ msgid "Creative" #~ msgstr "Творческий" @@ -7091,6 +7315,9 @@ msgstr "Лимит одновременных соединений cURL" #~ msgid "Crosshair color (R,G,B)." #~ msgstr "Цвет перекрестия (R,G,B)." +#~ msgid "DPI" +#~ msgstr "DPI" + #~ msgid "Damage" #~ msgstr "Урон" @@ -7190,6 +7417,13 @@ msgstr "Лимит одновременных соединений cURL" #~ msgid "Enable register confirmation" #~ msgstr "Включить подтверждение регистрации" +#~ msgid "" +#~ "Enable vertex buffer objects.\n" +#~ "This should greatly improve graphics performance." +#~ msgstr "" +#~ "Включить объекты буфера вершин.\n" +#~ "Это должно значительно улучшить графическую производительность." + #~ msgid "Enabled" #~ msgstr "Включено" @@ -7504,6 +7738,9 @@ msgstr "Лимит одновременных соединений cURL" #~ msgid "Instrumentation" #~ msgstr "Замеры" +#~ msgid "Invalid gamespec." +#~ msgstr "Неправильная конфигурация игры." + #~ msgid "Inventory key" #~ msgstr "Кнопка открытия инвентаря" @@ -8201,6 +8438,12 @@ msgstr "Лимит одновременных соединений cURL" #~ "Заставляет DirectX работать с LuaJIT. Отключите, если это вызывает " #~ "проблемы." +#~ msgid "Makes all liquids opaque" +#~ msgstr "Сделать все жидкости непрозрачными" + +#~ msgid "Mapblock mesh generator's MapBlock cache size in MB" +#~ msgstr "Размер кэша мапблоков в генераторе мешей мапблоков в мегабайтах" + #~ msgid "Menus" #~ msgstr "Меню" @@ -8441,15 +8684,22 @@ msgstr "Лимит одновременных соединений cURL" #~ msgid "Simple Leaves" #~ msgstr "Упрощённая листва" +#~ msgid "" +#~ "Size of the MapBlock cache of the mesh generator. Increasing this will\n" +#~ "increase the cache hit %, reducing the data being copied from the main\n" +#~ "thread, thus reducing jitter." +#~ msgstr "" +#~ "Размер кэша мапблоков карты в генераторе мешей. Увеличение этого " +#~ "значения\n" +#~ "увеличит процент попаданий в кэш, предотвращая копирование информации\n" +#~ "из основного потока игры, тем самым уменьшая колебания кадровой частоты." + #~ msgid "Smooth Lighting" #~ msgstr "Мягкое освещение" #~ msgid "Smooths rotation of camera. 0 to disable." #~ msgstr "Плавное вращение камеры. 0 для отключения." -#~ msgid "Sound" -#~ msgstr "Звук" - #~ msgid "Special" #~ msgstr "Особенный" @@ -8513,6 +8763,9 @@ msgstr "Лимит одновременных соединений cURL" #~ msgid "Touch threshold (px):" #~ msgstr "Чувствительность (в точках):" +#~ msgid "Touchscreen threshold" +#~ msgstr "Порог сенсорного экрана" + #~ msgid "Trilinear Filter" #~ msgstr "Трилинейный фильтр" @@ -8567,6 +8820,9 @@ msgstr "Лимит одновременных соединений cURL" #~ "Если установлено значение 0, MSAA отключено.\n" #~ "После изменения этой настройки требуется перезагрузка." +#~ msgid "VBO" +#~ msgstr "Объекты буфера вершин (VBO)" + #~ msgid "Variation of hill height and lake depth on floatland smooth terrain." #~ msgstr "" #~ "Вариация высоты холмов и глубин озёр на гладкой местности парящих " @@ -8668,8 +8924,14 @@ msgstr "Лимит одновременных соединений cURL" #~ msgid "You died." #~ msgstr "Ты умер." +#~ msgid "You have no games installed." +#~ msgstr "У вас не установлено ни одной игры." + #~ msgid "Z" #~ msgstr "Z" #~ msgid "needs_fallback_font" #~ msgstr "no" + +#~ msgid "ok" +#~ msgstr "ок" diff --git a/po/sk/minetest.po b/po/sk/minetest.po index a6663d806..b32577c18 100644 --- a/po/sk/minetest.po +++ b/po/sk/minetest.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" -"PO-Revision-Date: 2023-10-20 20:44+0000\n" -"Last-Translator: BRN Systems \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" "Language-Team: Slovak \n" "Language: sk\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.1\n" +"X-Generator: Weblate 5.3\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -71,7 +71,8 @@ msgid "Command not available: " msgstr "Príkaz nie je k dispozícií: " #: builtin/common/chatcommands.lua -msgid "Get help for commands" +#, fuzzy +msgid "Get help for commands (-t: output in chat)" msgstr "Zobraz pomocníka k príkazom" #: builtin/common/chatcommands.lua @@ -82,13 +83,10 @@ msgstr "" "zobrazenie všetkého." #: builtin/common/chatcommands.lua -msgid "[all | ]" +#, fuzzy +msgid "[all | ] [-t]" msgstr "[all | ]" -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" -msgstr "V poriadku" - #: builtin/fstk/ui.lua msgid "" msgstr "" @@ -105,6 +103,10 @@ msgstr "Objavila sa chyba:" msgid "Main menu" msgstr "Hlavná ponuka" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "V poriadku" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Znova pripojiť" @@ -133,19 +135,28 @@ msgstr "Podporujeme iba protokol verzie $1." msgid "We support protocol versions between version $1 and $2." msgstr "Podporujeme verzie protokolov medzi $1 a $2." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "\"$1\" už exituje. Chcel by si ho prepísať?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" +msgstr "Chyba inštalácie \"$1\": $2" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." -msgstr "Nevyhnutné doplnky $1 a $2 budú nainštalované." +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download \"$1\"" +msgstr "Nepodarilo sa stiahnuť \"$1\"" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" -msgstr "$1 od $2" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr "Nepodarilo sa stiahnuť $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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)" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" @@ -153,158 +164,157 @@ msgstr "" "$1 sa sťahuje,\n" "$2 čaká v rade" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." msgstr "$1 sťahujem..." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "$1 požadované nevyhnutné doplnky nie je možné nájsť." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "$1 bude nainštalovaný a $2 nevyhnutné doplnky budú vynechané." - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "Všetky balíky" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "Už nainštalované" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "Späť na Hlavnú ponuku" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "ContentDB nie je k dispozícií ak bol Minetest skompilovaný bez cURL" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "Sťahujem..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "Hry" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +msgstr "Nainštalovať" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp +msgid "Loading..." +msgstr "Načítavam..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Mods" +msgstr "Rozšírenia" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "Nepodarilo sa stiahnuť žiadne balíčky" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "Bez výsledkov" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "Bez aktualizácií" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "Čaká v rade" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "Balíky textúr" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "Balíček $1 nebol nájdený." + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "Odinštalovať" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "Aktualizácia" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "Aktualizovať všetky [$1]" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "View more information in a web browser" +msgstr "Pozri si viac informácií vo webovom prehliadači" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "You need to install a game before you can install a mod" +msgstr "Pred inštaláciou rozšírenia musíš nainštalovať hru" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 and $2 dependencies will be installed." +msgstr "Nevyhnutné doplnky $1 a $2 budú nainštalované." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "$1 od $2" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "$1 požadované nevyhnutné doplnky nie je možné nájsť." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "$1 bude nainštalovaný a $2 nevyhnutné doplnky budú vynechané." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "Už nainštalované" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "Základná hra:" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "Zrušiť" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "ContentDB nie je k dispozícií ak bol Minetest skompilovaný bez cURL" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "Nevyhnutné doplnky:" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "Sťahujem..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "Chyba inštalácie \"$1\": $2" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download \"$1\"" -msgstr "Nepodarilo sa stiahnuť \"$1\"" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "Nepodarilo sa stiahnuť $1" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "" -"Nepodarilo sa rozbaliť \"$1\" (nepodporovaný typ súboru, alebo poškodený " -"archív)" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "Hry" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "Nainštalovať" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "Nainštalovať $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "Nainštalovať chýbajúce závislosti" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "Načítavam..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "Rozšírenia" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "Nepodarilo sa stiahnuť žiadne balíčky" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "Bez výsledkov" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "Bez aktualizácií" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "Nenájdené" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "Prepísať" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "Prosím skontroluj či je základná hra v poriadku." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" -msgstr "Čaká v rade" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" +msgstr "\"$1\" už exituje. Chcel by si ho prepísať?" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "Balíky textúr" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "Odinštalovať" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "Aktualizácia" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "Aktualizovať všetky [$1]" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "Pozri si viac informácií vo webovom prehliadači" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" -msgstr "" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" +msgstr "Prepísať" #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" @@ -452,10 +462,20 @@ msgstr "Vytvoriť" msgid "Decorations" msgstr "Dekorácie" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." msgstr "Vývojový Test je určený vývojárom." +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "Kobky" @@ -652,7 +672,7 @@ msgstr "Registrovať sa" #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "Dismiss" -msgstr "" +msgstr "Odmietnuť" #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "" @@ -660,21 +680,25 @@ msgid "" "\"Minetest Game\". Since Minetest 5.8.0, Minetest ships without a default " "game." msgstr "" +"Po dlhú dobu sa engine Minetest dodával s predinštalovanou hrou s názvom " +"\"Minetest Game\". Od verzie 5.8.0 sa Minetest dodáva bez predinštalovanej " +"hry." #: 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 "" +"Ak chceš pokračovať v hraní svojich svetov v hre Minetest Game, musíš si hru " +"Minetest Game znova nainštalovať." #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "Minetest Game is no longer installed by default" -msgstr "" +msgstr "Hra Minetest už nie je predvolene nainštalovaná" #: builtin/mainmenu/dlg_reinstall_mtg.lua -#, fuzzy msgid "Reinstall Minetest Game" -msgstr "Nainštalovať inú hru" +msgstr "Preinštaluj hru Minetest Game" #: builtin/mainmenu/dlg_rename_modpack.lua msgid "Accept" @@ -751,9 +775,8 @@ msgid "Select file" msgstr "Zvoľ súbor" #: builtin/mainmenu/settings/components.lua -#, fuzzy msgid "Set" -msgstr "Vybrať" +msgstr "Nastav" #: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua msgid "(No description of setting given)" @@ -822,20 +845,15 @@ msgstr "zjemnené (eased)" #: builtin/mainmenu/settings/dlg_settings.lua msgid "(Use system language)" -msgstr "" +msgstr "(Použiť systémový jazyk)" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Accessibility" -msgstr "" +msgstr "Dostupnosť" #: builtin/mainmenu/settings/dlg_settings.lua -#, fuzzy msgid "Back" -msgstr "Vzad" - -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "Zmeň ovládacie klávesy" +msgstr "Späť" #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp @@ -846,7 +864,8 @@ msgstr "Komunikácia" msgid "Clear" msgstr "Zmaž" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "Ovládanie" @@ -855,18 +874,16 @@ msgid "General" msgstr "Všeobecné" #: builtin/mainmenu/settings/dlg_settings.lua -#, fuzzy msgid "Movement" -msgstr "Rýchly pohyb" +msgstr "Pohyb" #: builtin/mainmenu/settings/dlg_settings.lua -#, fuzzy msgid "Reset setting to default" -msgstr "Obnov štand. hodnoty" +msgstr "Obnov štand. nastavenia" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Reset setting to default ($1)" -msgstr "" +msgstr "Obnoviť predvolené nastavenie ($1)" #: builtin/mainmenu/settings/dlg_settings.lua builtin/mainmenu/tab_online.lua msgid "Search" @@ -874,7 +891,7 @@ msgstr "Hľadaj" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Show advanced settings" -msgstr "" +msgstr "Zobraziť rozšírené nastavenia" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Show technical names" @@ -894,11 +911,11 @@ msgstr "Doplnky: Rozšírenia (módy)" #: builtin/mainmenu/settings/shadows_component.lua msgid "(The game will need to enable shadows as well)" -msgstr "" +msgstr "(V hre bude potrebné povoliť aj tiene)" #: builtin/mainmenu/settings/shadows_component.lua msgid "Custom" -msgstr "" +msgstr "Vlastné" #: builtin/mainmenu/settings/shadows_component.lua msgid "Disabled" @@ -951,7 +968,7 @@ msgstr "Jadro tímu" #: builtin/mainmenu/tab_about.lua msgid "Irrlicht device:" -msgstr "" +msgstr "Zariadenie Irrlicht:" #: builtin/mainmenu/tab_about.lua msgid "Open User Data Directory" @@ -982,18 +999,16 @@ msgid "Browse online content" msgstr "Hľadaj nový obsah na internete" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Browse online content [$1]" -msgstr "Hľadaj nový obsah na internete" +msgstr "Prezeranie online obsahu [$1]" #: builtin/mainmenu/tab_content.lua msgid "Content" msgstr "Doplnky" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Content [$1]" -msgstr "Doplnky" +msgstr "Obsah [$1]" #: builtin/mainmenu/tab_content.lua msgid "Disable Texture Pack" @@ -1016,9 +1031,8 @@ msgid "Rename" msgstr "Premenuj" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Update available?" -msgstr "" +msgstr "Je k dispozícii aktualizácia?" #: builtin/mainmenu/tab_content.lua msgid "Use Texture Pack" @@ -1056,6 +1070,17 @@ msgstr "Nainštalovať hru" 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á" + +#: builtin/mainmenu/tab_local.lua +msgid "" +"Minetest is a game-creation platform that allows you to play many different " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "Nový" @@ -1089,8 +1114,9 @@ msgid "Start Game" msgstr "Spusti hru" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." -msgstr "Nie je nainštalovaná žiadna hra." +#, 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" #: builtin/mainmenu/tab_online.lua msgid "Address" @@ -1169,18 +1195,10 @@ msgstr "Nahrávam textúry..." msgid "Rebuilding shaders..." msgstr "Obnovujem shadery..." -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "Chyba spojenia (časový limit?)" - #: src/client/clientlauncher.cpp msgid "Could not find or load game: " msgstr "Nie je možné nájsť alebo nahrať hru: " -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "Chybná špec. hry." - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "Hlavné menu" @@ -1205,7 +1223,11 @@ msgstr "Dodaný súbor s heslom nie je možné otvoriť: " msgid "Provided world path doesn't exist: " msgstr "Zadaná cesta k svetu neexistuje: " -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "Média..." + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp msgid "" "\n" "Check debug.txt for details." @@ -1213,18 +1235,10 @@ msgstr "" "\n" "Pozri detaily v debug.txt." -#: src/client/game.cpp -msgid "- Address: " -msgstr "- Adresa: " - #: src/client/game.cpp msgid "- Mode: " msgstr "- Mode: " -#: src/client/game.cpp -msgid "- Port: " -msgstr "- Port: " - #: src/client/game.cpp msgid "- Public: " msgstr "- Verejný: " @@ -1259,10 +1273,6 @@ msgstr "Automatický pohyb vpred je aktivovaný" msgid "Block bounds hidden" msgstr "Hranice bloku sú skryté" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "Hranice bloku sú zobrazené pre všetky bloky" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "Hranice bloku sú zobrazené pre aktuálny blok" @@ -1280,9 +1290,8 @@ msgid "Camera update enabled" msgstr "Aktualizácia kamery je aktivovaná" #: src/client/game.cpp -#, fuzzy msgid "Can't show block bounds (disabled by game or mod)" -msgstr "Hranice bloku nie je možné zobraziť (zakázané rozšírením, alebo hrou)" +msgstr "Hranice bloku nie je možné zobraziť (zakázané hrou, alebo rozšírením)" #: src/client/game.cpp msgid "Change Password" @@ -1308,6 +1317,10 @@ msgstr "Skriptovanie na strane klienta je zakázané" msgid "Connecting to server..." msgstr "Pripájam sa k serveru..." +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "Chyba spojenia (časový limit?)" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "Spojenie sa z neznámeho dôvodu nepodarilo" @@ -1316,47 +1329,14 @@ msgstr "Spojenie sa z neznámeho dôvodu nepodarilo" msgid "Continue" msgstr "Pokračuj" -#: src/client/game.cpp -#, fuzzy, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" -"Ovládanie:\n" -"- %s: pohyb vpred\n" -"- %s: pohyb vzad\n" -"- %s: pohyb doľava\n" -"- %s: pohyb doprava\n" -"- %s: skoč/vylez\n" -"- %s: kop/udri\n" -"- %s: polož/použi\n" -"- %s: zakrádaj sa/choď dole\n" -"- %s: odhoď vec\n" -"- %s: inventár\n" -"- Myš: otoč sa/obzeraj sa\n" -"- Myš koliesko: zvoľ si vec\n" -"- %s: komunikácia\n" - #: src/client/game.cpp #, fuzzy msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1373,10 +1353,10 @@ msgstr "" "Menu/Inventár je zobrazené/ý:\n" "- dvojklik (mimo):\n" " -->zatvor\n" -"- klik na kôpku, klik na pozíciu:\n" +"- klik na kôpku, klik na miesto:\n" " --> presuň kôpku \n" "- chyť a prenes, klik druhým prstom\n" -" --> polož jednu vec na pozíciu\n" +" --> polož jednu vec na miesto\n" #: src/client/game.cpp #, c-format @@ -1448,6 +1428,11 @@ msgstr "Hmla je vypnutá" msgid "Fog enabled" msgstr "Hmla je aktivovaná" +#: src/client/game.cpp +#, fuzzy +msgid "Fog enabled by game or mod" +msgstr "Zväčšenie je zakázané hrou, alebo rozšírením" + #: src/client/game.cpp msgid "Game info:" msgstr "Informácie o hre:" @@ -1468,10 +1453,6 @@ msgstr "Definície vecí..." msgid "KiB/s" msgstr "KiB/s" -#: src/client/game.cpp -msgid "Media..." -msgstr "Média..." - #: src/client/game.cpp msgid "MiB/s" msgstr "MiB/s" @@ -1573,28 +1554,28 @@ msgid "Unable to listen on %s because IPv6 is disabled" msgstr "Nemôžem sa spojiť s %s, lebo IPv6 je zakázané" #: src/client/game.cpp -#, fuzzy msgid "Unlimited viewing range disabled" -msgstr "Neobmedzená dohľadnosť je aktivovaná" +msgstr "Neobmedzená dohľadnosť je vypnutá" #: src/client/game.cpp -#, fuzzy msgid "Unlimited viewing range enabled" msgstr "Neobmedzená dohľadnosť je aktivovaná" #: src/client/game.cpp msgid "Unlimited viewing range enabled, but forbidden by game or mod" -msgstr "" +msgstr "Neobmedzená dohľadnosť je povolená, ale zakázaná hrou alebo rozšírením" #: src/client/game.cpp -#, fuzzy, c-format +#, c-format msgid "Viewing changed to %d (the minimum)" -msgstr "Dohľadnosť je na minime: %d" +msgstr "Dohľadnosť zmenená 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 "" +"Dohľadnosť zmenená na: %d (minimum), ale je obmedzená na %d hrou, alebo " +"rozšírením" #: src/client/game.cpp #, c-format @@ -1602,20 +1583,23 @@ msgid "Viewing range changed to %d" msgstr "Dohľadnosť je zmenená na %d" #: src/client/game.cpp -#, fuzzy, c-format +#, c-format msgid "Viewing range changed to %d (the maximum)" -msgstr "Dohľadnosť je zmenená na %d" +msgstr "Dohľadnosť zmenená 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 "" +"Dohľadnosť zmenená na: %d (maximum), ale je obmedzená na %d hrou, alebo " +"rozšírením" #: src/client/game.cpp -#, fuzzy, c-format +#, c-format msgid "Viewing range changed to %d, but limited to %d by game or mod" -msgstr "Dohľadnosť je zmenená na %d" +msgstr "" +"Dohľadnosť je zmenená na %d, ale je obmedzená na %d hrou, alebo rozšírením" #: src/client/game.cpp #, c-format @@ -1630,10 +1614,6 @@ msgstr "Obrysy zobrazené" msgid "Zoom currently disabled by game or mod" msgstr "Zväčšenie je zakázané hrou, alebo rozšírením" -#: src/client/game.cpp -msgid "ok" -msgstr "ok" - #: src/client/gameui.cpp msgid "Chat currently disabled by game or mod" msgstr "Chat je zakázaný hrou, alebo rozšírením" @@ -1673,32 +1653,28 @@ msgstr "Backspace" #. ~ Usually paired with the Pause key #: src/client/keycode.cpp -#, fuzzy msgid "Break Key" -msgstr "Tlačidlo zakrádania sa" +msgstr "Klávesa Break" #: src/client/keycode.cpp msgid "Caps Lock" msgstr "Caps Lock" #: src/client/keycode.cpp -#, fuzzy msgid "Clear Key" -msgstr "Zmaž" +msgstr "Klávesa Clear" #: src/client/keycode.cpp -#, fuzzy msgid "Control Key" -msgstr "CTRL" +msgstr "Klávesa CTRL" #: src/client/keycode.cpp -#, fuzzy msgid "Delete Key" -msgstr "Vymazať" +msgstr "Klávesa Del" #: src/client/keycode.cpp msgid "Down Arrow" -msgstr "" +msgstr "Šípka dole" #: src/client/keycode.cpp msgid "End" @@ -1745,9 +1721,8 @@ msgid "Insert" msgstr "Vlož" #: src/client/keycode.cpp -#, fuzzy msgid "Left Arrow" -msgstr "Ľavý CRTL" +msgstr "Ľavá šípka" #: src/client/keycode.cpp msgid "Left Button" @@ -1771,9 +1746,8 @@ msgstr "Ľavá klávesa Windows" #. ~ Key name, common on Windows keyboards #: src/client/keycode.cpp -#, fuzzy msgid "Menu Key" -msgstr "Menu" +msgstr "Klávesa Menu" #: src/client/keycode.cpp msgid "Middle Button" @@ -1848,20 +1822,17 @@ msgid "OEM Clear" msgstr "OEM Clear" #: src/client/keycode.cpp -#, fuzzy msgid "Page Down" msgstr "Page down" #: src/client/keycode.cpp -#, fuzzy msgid "Page Up" msgstr "Page up" #. ~ Usually paired with the Break key #: src/client/keycode.cpp -#, fuzzy msgid "Pause Key" -msgstr "Pause" +msgstr "Klávesa Pause" #: src/client/keycode.cpp msgid "Play" @@ -1873,14 +1844,12 @@ msgid "Print" msgstr "PrtSc" #: src/client/keycode.cpp -#, fuzzy msgid "Return Key" -msgstr "Enter" +msgstr "Klávesa Enter" #: src/client/keycode.cpp -#, fuzzy msgid "Right Arrow" -msgstr "Pravý CRTL" +msgstr "Pravá šípka" #: src/client/keycode.cpp msgid "Right Button" @@ -1912,9 +1881,8 @@ msgid "Select" msgstr "Vybrať" #: src/client/keycode.cpp -#, fuzzy msgid "Shift Key" -msgstr "Shift" +msgstr "Klávesa Shift" #: src/client/keycode.cpp msgid "Sleep" @@ -1934,7 +1902,7 @@ msgstr "Tab" #: src/client/keycode.cpp msgid "Up Arrow" -msgstr "" +msgstr "Šípka hore" #: src/client/keycode.cpp msgid "X Button 1" @@ -1945,9 +1913,8 @@ msgid "X Button 2" msgstr "X tlačidlo 2" #: src/client/keycode.cpp -#, fuzzy msgid "Zoom Key" -msgstr "Priblíž" +msgstr "Klávesa Zoom" #: src/client/minimap.cpp msgid "Minimap hidden" @@ -1967,6 +1934,15 @@ msgstr "Minimapa v povrchovom režime, priblíženie x%d" msgid "Minimap in texture mode" msgstr "Minimapa v móde textúry" +#: src/client/shader.cpp +#, fuzzy, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "Nepodarilo sa otvoriť web stránku" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2160,6 +2136,19 @@ msgstr "Priblíž" msgid "press key" msgstr "stlač klávesu" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +#, fuzzy +msgid "Unable to open URL" +msgstr "Nepodarilo sa otvoriť web stránku" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "Zmeniť" @@ -2193,6 +2182,7 @@ msgstr "Hlasitosť: %d%%" #. 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 "sk" @@ -2208,9 +2198,9 @@ msgid "Name is taken. Please choose another name" msgstr "Meno už je použité. Prosím zvoľ si iné meno" #: src/server.cpp -#, fuzzy, c-format +#, c-format msgid "%s while shutting down: " -msgstr "Vypínam..." +msgstr "%s počas vypínania: " #: src/settings_translation_file.cpp msgid "" @@ -2280,7 +2270,7 @@ msgstr "2D šum, ktorý určuje údolia a kanály riek." #: src/settings_translation_file.cpp msgid "3D" -msgstr "" +msgstr "3D" #: src/settings_translation_file.cpp msgid "3D clouds" @@ -2336,7 +2326,6 @@ msgid "3D noise that determines number of dungeons per mapchunk." msgstr "3D šum definujúci počet kobiek na časť mapy (mapchunk)." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "3D support.\n" "Currently supported:\n" @@ -2415,14 +2404,6 @@ msgstr "Zasielaný rozsah aktívnych objektov" msgid "Adds particles when digging a node." msgstr "Pridá časticové efekty pri vykopávaní kocky." -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" -"Nastav dpi konfiguráciu podľa svojej obrazovky (nie pre X11/len pre Android) " -"napr. pre 4k obrazovky." - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2453,6 +2434,10 @@ msgstr "Meno správcu" msgid "Advanced" msgstr "Pokročilé" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2492,14 +2477,12 @@ msgid "Announce to this serverlist." msgstr "Zverejni v zozname serverov." #: src/settings_translation_file.cpp -#, fuzzy msgid "Anti-aliasing scale" -msgstr "Vyhladzovanie:" +msgstr "Rozsah vyhladzovania:" #: src/settings_translation_file.cpp -#, fuzzy msgid "Antialiasing method" -msgstr "Vyhladzovanie:" +msgstr "Metóda vyhladzovania:" #: src/settings_translation_file.cpp msgid "Append item name" @@ -2513,6 +2496,17 @@ msgstr "Pridaj názov veci do popisku." msgid "Apple trees noise" msgstr "Šum jabloní" +#: 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 "Arm inertia" msgstr "Zotrvačnosť ruky" @@ -2530,18 +2524,38 @@ 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" "clients.\n" "Small values potentially improve performance a lot, at the expense of " "visible\n" -"rendering glitches (some blocks will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"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)." + +#: src/settings_translation_file.cpp +#, fuzzy +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 "" "V tento vzdialenosti bude server agresívne optimalizovať, ktoré\n" "bloky pošle klientovi.\n" @@ -2582,9 +2596,8 @@ msgid "Base terrain height." msgstr "Základná výška terénu." #: src/settings_translation_file.cpp -#, fuzzy msgid "Base texture size" -msgstr "Minimálna veľkosť textúry" +msgstr "Základná veľkosť textúry" #: src/settings_translation_file.cpp msgid "Basic privileges" @@ -2607,14 +2620,18 @@ msgid "Bind address" msgstr "Spájacia adresa" #: src/settings_translation_file.cpp -#, fuzzy msgid "Biome API" -msgstr "Ekosystémy" +msgstr "API pre biómy" #: src/settings_translation_file.cpp msgid "Biome noise" msgstr "Šum biómu" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Block cull optimize distance" +msgstr "Vzdialenosť pre optimalizáciu posielania blokov" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "Vzdialenosť pre optimalizáciu posielania blokov" @@ -2800,7 +2817,6 @@ msgid "Client-side Modding" msgstr "Úpravy (módovanie) na strane klienta" #: src/settings_translation_file.cpp -#, fuzzy msgid "Client-side node lookup range restriction" msgstr "Obmedzenie vyhľadávania dosahu kociek na strane klienta" @@ -2817,7 +2833,6 @@ msgid "Clouds" msgstr "Mraky" #: src/settings_translation_file.cpp -#, fuzzy msgid "Clouds are a client-side effect." msgstr "Mraky sú efektom na strane klienta." @@ -2833,6 +2848,12 @@ msgstr "Farebná hmla" msgid "Colored shadows" msgstr "Farebné tiene" +#: 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -2996,10 +3017,6 @@ msgstr "" "Farba zameriavača (R,G,B).\n" "Nastavuje farbu objektu zameriavača" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "DPI" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "Hraničná veľkosť ladiaceho log súboru" @@ -3054,6 +3071,23 @@ msgstr "" "Toto simuluje efekt jemných tieňov použitím PCF alebo poisson disk\n" "zároveň ale spotrebováva viac zdrojov." +#: 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 " +"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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" +"Aktivuj zakázanie pripojenia starých klientov.\n" +"Starší klienti sú kompatibilný v tom zmysle, že nepadnú pri pripájaní\n" +"k novým serverom, ale nemusia podporovať nové funkcie, ktoré očakávaš." + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "Definuje oblasti, kde stromy majú jablká." @@ -3119,6 +3153,8 @@ msgid "" "methods.\n" "Value of 2 means taking 2x2 = 4 samples." msgstr "" +"Definuje veľkosť mriežky vzorkovania pre metódy antialiasingu FSAA a SSAA.\n" +"Hodnota 2 znamená, že sa použijú 2x2 = 4 vzorky." #: src/settings_translation_file.cpp msgid "Defines the width of the river channel." @@ -3253,6 +3289,11 @@ msgstr "Povoliť žiaru" msgid "Enable Bloom Debug" msgstr "Povoliť ladenie žiary" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Debanding" +msgstr "Aktivuj zranenie" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3279,6 +3320,11 @@ msgstr "" "Ak je aktivované použije poisson disk pre vytvorenie \"mäkkých tieňov\". V " "opačnom prípade sa použije PCF filtrovanie." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Post Processing" +msgstr "Následné spracovanie" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "Povoliť Raytraced Culling" @@ -3325,7 +3371,12 @@ msgstr "Aktivuj rozšírenie pre zabezpečenie" #: src/settings_translation_file.cpp msgid "Enable mouse wheel (scroll) for item selection in hotbar." -msgstr "" +msgstr "Povolenie kolieska myši (posúvanie) pre výber položky v hlavnej lište." + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable random mod loading (mainly used for testing)." +msgstr "Aktivuje náhodný užívateľský vstup (používa sa len pre testovanie)." #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." @@ -3355,6 +3406,11 @@ msgstr "" "Starší klienti sú kompatibilný v tom zmysle, že nepadnú pri pripájaní\n" "k novým serverom, ale nemusia podporovať nové funkcie, ktoré očakávaš." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable touchscreen" +msgstr "Dotyková obrazovka" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3367,14 +3423,6 @@ msgstr "" "(napr. textúr)\n" "pri pripojení na server." -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" -"Aktivuj \"vertex buffer objects\".\n" -"Toto by malo viditeľne zvýšiť grafický výkon." - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3413,6 +3461,19 @@ msgstr "Aktivuje animáciu vecí v inventári." msgid "Enables caching of facedir rotated meshes." msgstr "Aktivuje ukladanie tvárou rotovaných Mesh objektov do medzipamäti." +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -3422,9 +3483,8 @@ msgstr "" "za cenu drobných vizuálnych chýb, ktoré neovplyvnia hrateľnosť." #: src/settings_translation_file.cpp -#, fuzzy msgid "Engine Profiler" -msgstr "Profil enginu" +msgstr "Profilovač enginu" #: src/settings_translation_file.cpp msgid "Engine profiling data print interval" @@ -3533,12 +3593,11 @@ msgid "Fixed virtual joystick" msgstr "Pevný virtuálny joystick" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Fixes the position of virtual joystick.\n" "If disabled, virtual joystick will center to first-touch's position." msgstr "" -"(Android) Zafixuje pozíciu virtuálneho joysticku.\n" +"Zafixuje pozíciu virtuálneho joysticku.\n" "Ak je vypnuté, virtuálny joystick sa vycentruje na pozícií prvého dotyku." #: src/settings_translation_file.cpp @@ -3725,7 +3784,6 @@ msgid "Fullscreen mode." msgstr "Režim celej obrazovky." #: src/settings_translation_file.cpp -#, fuzzy msgid "GUI" msgstr "Užívateľské rozhrania" @@ -3848,9 +3906,8 @@ msgid "Heat noise" msgstr "Teplotný šum" #: src/settings_translation_file.cpp -#, fuzzy msgid "Height component of the initial window size." -msgstr "Výška okna po spustení. Ignorované v móde plnej obrazovky." +msgstr "Komponent výšky počiatočnej veľkosti okna." #: src/settings_translation_file.cpp msgid "Height noise" @@ -3914,25 +3971,23 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Hotbar: Enable mouse wheel for selection" -msgstr "" +msgstr "Hlavná lišta: Povolenie kolieska myši pre výber" #: src/settings_translation_file.cpp msgid "Hotbar: Invert mouse wheel direction" -msgstr "" +msgstr "Hlavná lišta: Obrátenie smeru kolieska myši" #: src/settings_translation_file.cpp msgid "How deep to make rivers." msgstr "Aké hlboké majú byť rieky." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "How fast liquid waves will move. Higher = faster.\n" "If negative, liquid waves will move backwards." msgstr "" "Ako rýchlo sa budú pohybovať vlny tekutín. Vyššia hodnota = rýchlejšie.\n" -"Ak je záporná, tekutina sa bude pohybovať naspäť.\n" -"Požaduje, aby boli aktivované vlniace sa tekutiny." +"Ak je záporná, tekutina sa bude pohybovať naspäť." #: src/settings_translation_file.cpp msgid "" @@ -4040,7 +4095,6 @@ msgstr "" "nemôžu heslo vymazať." #: 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" @@ -4050,11 +4104,10 @@ msgstr "" "Ak je aktivovaný, server bude realizovať occlusion culling blokov mapy " "založený\n" "na pozícií oka hráča. Toto môže znížiť počet blokov posielaných klientovi\n" -"o 50-80%. Klient už nebude dostávať takmer neviditeľné bloky,\n" -"takže funkčnosť režim prechádzania stenami je obmedzená." +"o 50-80%. Klient už nebude dostávať väčšinu neviditeľných blokov,\n" +"takže funkčnosť v režime prechádzania stenami je obmedzená." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "If enabled, you can place nodes at the position (feet + eye level) where you " "stand.\n" @@ -4170,6 +4223,7 @@ msgstr "Obrátiť smer myši" #: src/settings_translation_file.cpp msgid "Invert mouse wheel (scroll) direction for item selection in hotbar." msgstr "" +"Obrátenie smeru kolieska myši (posúvania) pri výbere položky v hlavnej lište." #: src/settings_translation_file.cpp msgid "Invert vertical mouse movement." @@ -4347,18 +4401,19 @@ msgstr "" "- Nepriehľadné: vypne priehliadnosť" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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ĺžka kroku servera a interval v ktorom sú objekty štandardne aktualizované\n" "cez sieť, uvedené v sekundách." #: src/settings_translation_file.cpp -#, fuzzy msgid "Length of liquid waves." -msgstr "Rýchlosť vlny tekutín" +msgstr "Dĺžka vlnenia kvapaliny." #: src/settings_translation_file.cpp msgid "" @@ -4530,10 +4585,6 @@ msgid "" msgstr "" "Prispôsob farbu hmly a oblohy dennej dobe (svitanie/súmrak) a uhlu pohľadu." -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "Všetky tekutiny budú nepriehľadné" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "Úroveň kompresie mapy pre diskové úložisko" @@ -4589,11 +4640,14 @@ msgid "Map generation attributes specific to Mapgen v5." msgstr "Príznaky pre generovanie špecifické pre generátor 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" "When the 'snowbiomes' flag is enabled jungles are automatically enabled and\n" -"the 'jungles' flag is ignored." +"the 'jungles' flag is ignored.\n" +"The 'temples' flag disables generation of desert temples. Normal dungeons " +"will appear instead." msgstr "" "Špecifické atribúty pre generátor V6.\n" "Príznak 'snowbiomes' aktivuje nový systém 5 biómov.\n" @@ -4636,10 +4690,6 @@ msgstr "Oneskorenie generovania Mesh blokov" msgid "Mapblock mesh generation threads" msgstr "Vlákna generovania siete mapblock" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "Medzipamäť Mapblock Mesh generátora blokov v MB" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "Čas odstránenia bloku mapy" @@ -4854,12 +4904,10 @@ msgid "Maximum simultaneous block sends per client" msgstr "Maximum súčasných odoslaní bloku na klienta" #: src/settings_translation_file.cpp -#, fuzzy msgid "Maximum size of the outgoing chat queue" msgstr "Maximálna veľkosť výstupnej komunikačnej fronty" #: 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." @@ -4911,6 +4959,11 @@ msgstr "Minimálna úroveň záznamov, ktoré budú vypísané do komunikačnéh msgid "Minimap scan height" msgstr "Minimapa výška skenovania" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Minimum dig repetition interval" +msgstr "Interval opakovania pokladania" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "" @@ -4927,7 +4980,7 @@ msgstr "Mip-mapovanie" #: src/settings_translation_file.cpp msgid "Miscellaneous" -msgstr "" +msgstr "Rôzne" #: src/settings_translation_file.cpp msgid "Mod Profiler" @@ -4981,6 +5034,11 @@ msgstr "Citlivosť myši" msgid "Mouse sensitivity multiplier." msgstr "Multiplikátor citlivosti myši." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Movement threshold" +msgstr "Hraničná hodnota dutín" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "Šum bahna" @@ -5096,7 +5154,6 @@ msgstr "" "a spotrebou pamäti (4096=100MB, ako približné pravidlo)." #: src/settings_translation_file.cpp -#, fuzzy msgid "Number of messages a player may send per 10 seconds." msgstr "Počet správ, ktoré môže hráč poslať za 10 sekúnd." @@ -5112,16 +5169,11 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Occlusion Culler" -msgstr "" +msgstr "Occlusion Culler" #: src/settings_translation_file.cpp -#, fuzzy msgid "Occlusion Culling" -msgstr "Occlusion culling na strane servera" - -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "Nepriehľadné tekutiny" +msgstr "Occlusion Culling" #: src/settings_translation_file.cpp msgid "" @@ -5137,6 +5189,11 @@ msgstr "" "Otvorí menu pozastavenia, ak aktuálne okno hry nie je vybrané.\n" "Nepozastaví sa ak je otvorený formspec." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "OpenGL debug" +msgstr "Ladenie generátora máp" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "Voliteľná zmena farby webového odkazu v komunikačnej konzole." @@ -5213,20 +5270,20 @@ msgid "Poisson filtering" msgstr "Poisson filtrovanie" #: src/settings_translation_file.cpp -#, fuzzy msgid "Post Processing" -msgstr "Post processing" +msgstr "Následné spracovanie" #: 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 "" -"Zabráni opakovanému kopaniu a ukladaniu blokov pri držaní tlačítka myši.\n" -"Aktivuj, ak príliš často omylom niečo vykopeš, alebo položíš blok." +"Zabráni opakovanému kopaniu a ukladaniu blokov pri držaní určeného " +"tlačítka.\n" +"Aktivuj, ak príliš často omylom niečo vykopeš, alebo položíš blok.\n" +"Na dotykových obrazovkách to ovplyvňuje len kopanie." #: src/settings_translation_file.cpp msgid "Prevent mods from doing insecure things like running shell commands." @@ -5270,6 +5327,15 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "Pomer častí veľkých jaskýň, ktoré obsahujú tekutinu." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Protocol version minimum" +msgstr "Verzie protokolov sa nezhodujú. " + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -5287,6 +5353,10 @@ msgstr "Zvýši terén aby vznikli údolia okolo riek." msgid "Random input" msgstr "Náhodný vstup" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "Posledné správy v komunikácií" @@ -5296,7 +5366,6 @@ msgid "Regular font path" msgstr "Štandardná cesta k písmam" #: src/settings_translation_file.cpp -#, fuzzy msgid "Remember screen size" msgstr "Pamätať si veľkosť obrazovky" @@ -5416,6 +5485,12 @@ msgid "" "is maximized is stored in window_maximized.\n" "(Autosaving window_maximized only works if compiled with SDL.)" msgstr "" +"Automatické ukladanie veľkosti okna pri úprave.\n" +"Ak je to povolené, veľkosť obrazovky sa uloží do screen_w a screen_h a či je " +"okno\n" +"maximalizované, sa uloží do window_maximized.\n" +"(Automatické ukladanie window_maximized funguje len vtedy, ak je " +"skompilované s SDL.)" #: src/settings_translation_file.cpp msgid "Saving map received from server" @@ -5490,13 +5565,14 @@ msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous" msgstr "Viď. https://www.sqlite.org/pragma.html#pragma_synchronous" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Select the antialiasing method to apply.\n" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5510,6 +5586,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 "" +"Vyber metódu vyhladzovania, ktorá sa má použiť.\n" +"\n" +"* Žiadna - žiadne vyhladzovanie (predvolené)\n" +"\n" +"* FSAA - hardvérové celoobrazovkové vyhladzovanie (nekompatibilné so " +"shadermi)\n" +"Známe aj ako multi-sample antialiasing (MSAA)\n" +"Vyhladzuje okraje blokov, ale nemá vplyv na vnútro textúr.\n" +"Na zmenu tejto možnosti je potrebný reštart.\n" +"\n" +"* FXAA - rýchle približné vyhladzovanie (vyžaduje shadery)\n" +"Aplikuje filter následného spracovania na detekciu a vyhladenie " +"vysokokontrastných hrán.\n" +"Ponúka rovnováhu medzi rýchlosťou a kvalitou obrazu.\n" +"\n" +"* SSAA - Super-sampling antialiasing (vyžaduje shadery)\n" +"Vykresľuje obraz scény s vyšším rozlíšením, potom ho zmenší, aby sa znížil\n" +"aliasingové efekty. Ide o najpomalšiu a najpresnejšiu metódu." #: src/settings_translation_file.cpp msgid "Selection box border color (R,G,B)." @@ -5598,7 +5692,6 @@ msgid "Server port" msgstr "Port servera" #: src/settings_translation_file.cpp -#, fuzzy msgid "Server-side occlusion culling" msgstr "Occlusion culling na strane servera" @@ -5619,15 +5712,14 @@ msgid "Serverlist file" msgstr "Súbor so zoznamom serverov" #: src/settings_translation_file.cpp -#, fuzzy 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 "" -"Nastav sklon orbity slnka/mesiaca v stupňoch\n" -"Hodnota 0 znamená bez vertikálneho sklonu orbity.\n" -"Minimálna hodnota: 0.0; max. hodnota: 60.0" +"Nastav sklon obežnej dráhy slnka/mesiaca v stupňoch\n" +"Hry môžu meniť sklon obežnej dráhy prostredníctvom rozhrania API.\n" +"Hodnota 0 znamená bez vertikálneho sklonu obežnej dráhy ." #: src/settings_translation_file.cpp msgid "" @@ -5640,8 +5732,9 @@ msgstr "" "Rozsah: od -1 do 1.0" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" "Nastav jazyk. Ponechaj prázdne pre systémové nastavenie.\n" @@ -5674,11 +5767,8 @@ msgstr "" "Minimálna hodnota: 1.0; Maximálna hodnota: 15.0" #: src/settings_translation_file.cpp -#, fuzzy msgid "Set to true to enable Shadow Mapping." -msgstr "" -"Nastav true pre povolenie mapovania tieňov.\n" -"Požaduje aby boli aktivované shadery." +msgstr "Nastav pre povolenie mapovania tieňov." #: src/settings_translation_file.cpp msgid "" @@ -5689,25 +5779,20 @@ msgstr "" "Rozžiarené farby sa prelejú na susedné objekty." #: src/settings_translation_file.cpp -#, fuzzy +msgid "Set to true to enable volumetric lighting effect (a.k.a. \"Godrays\")." +msgstr "" + +#: src/settings_translation_file.cpp msgid "Set to true to enable waving leaves." -msgstr "" -"Nastav true pre povolenie vlniacich sa listov.\n" -"Požaduje aby boli aktivované shadery." +msgstr "Nastav pre povolenie vlniacich sa listov." #: src/settings_translation_file.cpp -#, fuzzy msgid "Set to true to enable waving liquids (like water)." -msgstr "" -"Nastav true pre aktivovanie vlniacich sa tekutín (ako napr. voda).\n" -"Požaduje aby boli aktivované shadery." +msgstr "Nastav pre aktivovanie vlniacich sa tekutín (ako napr. voda)." #: src/settings_translation_file.cpp -#, fuzzy msgid "Set to true to enable waving plants." -msgstr "" -"Nastav true pre aktivovanie vlniacich sa rastlín.\n" -"Požaduje aby boli aktivované shadery." +msgstr "Nastav pre aktivovanie vlniacich sa rastlín." #: src/settings_translation_file.cpp msgid "" @@ -5740,11 +5825,11 @@ msgid "Shaders" msgstr "Tieňovanie" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" "Shadery umožňujú pokročilé vizuálne efekty a na niektorých grafických " "kartách\n" @@ -5819,7 +5904,6 @@ msgstr "" "Systémy so slabým GPU (alebo bez GPU) viac profitujú z menších hodnôt." #: src/settings_translation_file.cpp -#, fuzzy 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" @@ -5836,16 +5920,6 @@ msgstr "" "Zmena tejto hodnoty slúži k špeciálnym účelom, odporúča sa ponechať\n" "to nezmenené." -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" -"Veľkosť medzipamäte blokov v Mesh generátori.\n" -"Zvýšenie zvýši využitie medzipamäte %, zníži sa množstvo dát kopírovaných\n" -"z hlavnej vetvy a tým sa zníži chvenie." - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "Sklon orbity na oblohe" @@ -5882,15 +5956,19 @@ msgstr "Jemné osvetlenie" #, fuzzy msgid "" "Smooths rotation of camera when in cinematic mode, 0 to disable. Enter " -"cinematic mode by using the key set in Change Keys." -msgstr "Zjemní rotáciu kamery vo filmovom režime. 0 je pre vypnuté." +"cinematic mode by using the key set in Controls." +msgstr "" +"Zjemní rotáciu kamery vo filmovom režime. 0 je pre vypnuté. Do filmového " +"režimu vstúpiš pomocou tlačidla nastaveného v nastaveniach Zmeň ovládacie " +"klávesy." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Smooths rotation of camera, also called look or mouse smoothing. 0 to " "disable." -msgstr "Zjemní rotáciu kamery vo filmovom režime. 0 je pre vypnuté." +msgstr "" +"Vyhladzuje otáčanie kamery, nazývané aj vyhladzovanie vzhľadu alebo pohybu " +"myši. 0 je pre vypnuté." #: src/settings_translation_file.cpp msgid "Sneaking speed" @@ -5904,6 +5982,15 @@ msgstr "Rýchlosť zakrádania sa, v kockách za sekundu." msgid "Soft shadow radius" msgstr "Dosah mäkkých tieňov" +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "Zvuk" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sound Extensions Blacklist" +msgstr "Čierna listina príznakov z ContentDB" + #: src/settings_translation_file.cpp msgid "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -5927,7 +6014,6 @@ msgstr "" "určité (alebo všetky) typy." #: 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" @@ -5950,9 +6036,8 @@ msgstr "" "Štandardné gausovo rozdelenie odchýlky svetelnej krivky." #: src/settings_translation_file.cpp -#, fuzzy msgid "Static spawn point" -msgstr "Pevný bod obnovy" +msgstr "Pevný bod oživenia" #: src/settings_translation_file.cpp msgid "Steepness noise" @@ -5989,7 +6074,6 @@ msgid "Strip color codes" msgstr "Odstráň farby" #: src/settings_translation_file.cpp -#, fuzzy 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" @@ -6006,15 +6090,15 @@ msgstr "" "krajiny.\n" "Štandardne je voda deaktivovaná a bude umiestnená len ak je táto voľba " "nastavená\n" -"nad 'mgv7_floatland_ymax' - 'mgv7_floatland_taper'\n" -"(štart horného zašpicaťovania).\n" +"na 'mgv7_floatland_ymax' - 'mgv7_floatland_taper'\n" +"(štart horného zužovania).\n" "***VAROVANIE, POTENCIÁLNE RIZIKO PRE VÝKON SVETOV A SERVEROV***:\n" "Pri aktivovaní vody na lietajúcich pevninách musí byť nastavený\n" "a otestovaný pevný povrch nastavením 'mgv7_floatland_density' na 2.0 ( alebo " "inú\n" "požadovanú hodnotu v závislosti na 'mgv7_np_floatland'), aby sa zabránilo\n" "pre server náročnému extrémnemu toku vody a rozsiahlym záplavám\n" -"na svet pod nimi." +"na svete pod nimi." #: src/settings_translation_file.cpp msgid "Synchronous SQLite" @@ -6111,11 +6195,30 @@ msgstr "" "pri volaní `/profiler save [format]` bez udania formátu." #: src/settings_translation_file.cpp -#, fuzzy +msgid "" +"The delay in milliseconds after which a touch interaction is considered a " +"long tap." +msgstr "" + +#: src/settings_translation_file.cpp msgid "" "The file path relative to your world path in which profiles will be saved to." msgstr "" -"Relatívna cesta k súboru vzhľadom na svet z ktorého budú profily uložené." +"Relatívna cesta k súboru vzhľadom na cestu k súborom sveta, do ktorého budú " +"profily uložené." + +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" @@ -6123,12 +6226,12 @@ msgstr "Identifikátor joysticku na použitie" #: src/settings_translation_file.cpp #, fuzzy -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" -"Dĺžka v pixloch, ktorú potrebuje dotyková obrazovka pre začiatok interakcie." +"Dĺžka v pixeloch, ktorú potrebuje dotyková obrazovka pre začiatok interakcie." #: 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" @@ -6138,8 +6241,16 @@ msgstr "" "Maximálna výška povrchu vlniacich sa tekutín.\n" "4.0 = Výška vlny sú dve kocky.\n" "0.0 = Vlna sa vôbec nehýbe.\n" -"Štandardná hodnota je 1.0 (1/2 kocky).\n" -"Požaduje, aby boli aktivované vlniace sa tekutiny." +"Štandardná hodnota je 1.0 (1/2 kocky)." + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"The minimum time in seconds it takes between digging nodes when holding\n" +"the dig button." +msgstr "" +"Čas v sekundách pre opakované položenie kocky\n" +"ak je držané tlačítko pokladania." #: src/settings_translation_file.cpp msgid "The network interface that the server listens on." @@ -6172,11 +6283,12 @@ msgstr "" "Malo by to byť konfigurované spolu s 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" "Renderovací back-end.\n" "Poznámka: Po zmene je vyžadovaný reštart!\n" @@ -6242,7 +6354,6 @@ msgid "The type of joystick" msgstr "Typ joysticku" #: src/settings_translation_file.cpp -#, fuzzy 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" @@ -6256,6 +6367,10 @@ msgstr "" msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "Tretí zo 4 2D šumov, ktoré spolu definujú rozsah výšok kopcov/hôr." +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -6301,24 +6416,22 @@ msgid "Touchscreen" msgstr "Dotyková obrazovka" #: src/settings_translation_file.cpp -#, fuzzy msgid "Touchscreen sensitivity" -msgstr "Citlivosť myši" +msgstr "Citlivosť dotykovej obrazovky" #: src/settings_translation_file.cpp -#, fuzzy msgid "Touchscreen sensitivity multiplier." -msgstr "Multiplikátor citlivosti myši." - -#: src/settings_translation_file.cpp -#, fuzzy -msgid "Touchscreen threshold" -msgstr "Prah citlivosti dotykovej obrazovky" +msgstr "Multiplikátor citlivosti dotykovej obrazovky." #: src/settings_translation_file.cpp msgid "Tradeoffs for performance" msgstr "Kompromisy za výkon" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Translucent liquids" +msgstr "Nepriehľadné tekutiny" + #: src/settings_translation_file.cpp msgid "Transparency Sorting Distance" msgstr "Vzdialenosť spracovania priehľadnosti" @@ -6354,10 +6467,20 @@ msgid "" "\n" "This setting should only be changed if you have performance problems." msgstr "" +"Typ occlusion_culler\n" +"\n" +"\"loops\" je starší algoritmus s vnorenými slučkami a zložitosťou O(n³)\n" +"\"bfs\" je nový algoritmus založený na vyhľadávaní v šírke a bočnom " +"vylučovaní\n" +"\n" +"Toto nastavenie by sa malo meniť len v prípade problémov s výkonom." #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 na súbor JSON, ktorý sprostredkúva informácie o najnovšej verzií " "Minetestu" @@ -6413,14 +6536,12 @@ msgid "Use a cloud animation for the main menu background." msgstr "Použi animáciu mrakov pre pozadie hlavného menu." #: src/settings_translation_file.cpp -#, fuzzy msgid "Use anisotropic filtering when looking at textures from an angle." msgstr "Použi anisotropné filtrovanie pri pohľade na textúry zo strany." #: src/settings_translation_file.cpp -#, fuzzy msgid "Use bilinear filtering when scaling textures." -msgstr "Použi trilineárne filtrovanie pri zmene mierky textúr." +msgstr "Použi bilineárne filtrovanie pri zmene veľkosti textúr." #: src/settings_translation_file.cpp msgid "Use crosshair for touch screen" @@ -6436,7 +6557,6 @@ msgstr "" "objektu." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Use mipmaps when scaling textures. May slightly increase performance,\n" "especially when using a high-resolution texture pack.\n" @@ -6447,14 +6567,14 @@ msgstr "" "Gama korektné podvzorkovanie nie je podporované." #: 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žite raytraced occlusion culling v novom culleri.\n" -"Tento príznak umožňuje použiť raytraced occlusion culling test" +"Použi raytraced occlusion culling v novom culleri.\n" +"Tento príznak umožňuje použiť raytraced occlusion culling test pre\n" +"veľkosti klientskej siete menšie ako 4x4x4 bloky mapy." #: src/settings_translation_file.cpp msgid "" @@ -6462,26 +6582,24 @@ msgid "" "If both bilinear and trilinear filtering are enabled, trilinear filtering\n" "is applied." msgstr "" +"Pri zmene veľkosti textúr použi trilineárne filtrovanie.\n" +"Ak je povolené bilineárne aj trilineárne filtrovanie,\n" +"použije sa trilineárne filtrovanie." #: 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) Použije virtuálny joystick na stlačenie tlačidla \"Aux1\".\n" -"Ak je aktivované, virtuálny joystick stlačí tlačidlo \"Aux1\" keď je mimo " -"hlavný kruh." +"Použi virtuálny joystick na stlačenie tlačidla \"Aux1\".\n" +"Ak je aktivované, virtuálny joystick tiež stlačí tlačidlo \"Aux1\", keď je " +"mimo hlavný kruh." #: src/settings_translation_file.cpp msgid "User Interfaces" msgstr "Užívateľské rozhranie" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "VBO" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "Vertikálna synchronizácia" @@ -6547,6 +6665,8 @@ msgid "" "Vertical screen synchronization. Your system may still force VSync on even " "if this is disabled." msgstr "" +"Vertikálna synchronizácia obrazovky. Systém môže vynútiť zapnutie funkcie " +"VSync, aj keď je táto funkcia vypnutá." #: src/settings_translation_file.cpp msgid "Video driver" @@ -6572,6 +6692,10 @@ msgstr "Virtuálny joystick aktivuje tlačidlo Aux1" msgid "Volume" msgstr "Hlasitosť" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Volume of all sounds.\n" @@ -6580,6 +6704,16 @@ msgstr "" "Hlasitosť všetkých zvukov.\n" "Požaduje aby bol zvukový systém aktivovaný." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volume when unfocused" +msgstr "FPS ak je hra nezameraná, alebo pozastavená" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volumetric lighting" +msgstr "Jemné osvetlenie" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6713,7 +6847,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Whether the window is maximized." -msgstr "" +msgstr "Či je okno maximalizované." #: src/settings_translation_file.cpp msgid "" @@ -6745,9 +6879,8 @@ msgid "" msgstr "Zobrazenie ladiaceho okna na klientovi (má rovnaký efekt ako F5)." #: src/settings_translation_file.cpp -#, fuzzy msgid "Width component of the initial window size." -msgstr "Šírka okna po spustení. Ignorované v móde celej obrazovky." +msgstr "Šírka okna po spustení." #: src/settings_translation_file.cpp msgid "Width of the selection box lines around nodes." @@ -6755,7 +6888,7 @@ msgstr "Šírka línií obrysu kocky." #: src/settings_translation_file.cpp msgid "Window maximized" -msgstr "" +msgstr "Maximalizované okno" #: src/settings_translation_file.cpp msgid "" @@ -6871,12 +7004,18 @@ msgstr "Paralelný limit cURL" #~ msgid "(game support required)" #~ msgstr "(vyžaduje sa podpora hry)" +#~ msgid "- Address: " +#~ msgstr "- Adresa: " + #~ msgid "- Creative Mode: " #~ msgstr "- Kreatívny mód: " #~ msgid "- Damage: " #~ msgstr "- Poškodenie: " +#~ msgid "- Port: " +#~ msgstr "- Port: " + #~ msgid "" #~ "0 = parallax occlusion with slope information (faster).\n" #~ "1 = relief mapping (slower, more accurate)." @@ -6914,6 +7053,13 @@ msgstr "Paralelný limit cURL" #~ "Ponechaj prázdne pre spustenie lokálneho servera.\n" #~ "Adresné políčko v hlavnom menu prepíše toto nastavenie." +#~ msgid "" +#~ "Adjust dpi configuration to your screen (non X11/Android only) e.g. for " +#~ "4k screens." +#~ msgstr "" +#~ "Nastav dpi konfiguráciu podľa svojej obrazovky (nie pre X11/len pre " +#~ "Android) napr. pre 4k obrazovky." + #~ msgid "" #~ "Adjust the saturation (or vividness) of the scene\n" #~ "Values\n" @@ -6974,6 +7120,9 @@ msgstr "Paralelný limit cURL" #~ msgid "Bits per pixel (aka color depth) in fullscreen mode." #~ msgstr "Počet bitov na pixel (farebná hĺbka) v režime celej obrazovky." +#~ msgid "Block bounds shown for all blocks" +#~ msgstr "Hranice bloku sú zobrazené pre všetky bloky" + #~ msgid "Bump Mapping" #~ msgstr "Bump Mapping (Ilúzia nerovnosti)" @@ -6994,6 +7143,9 @@ msgstr "Paralelný limit cURL" #~ msgid "Camera update toggle key" #~ msgstr "Tlačidlo Aktualizácia pohľadu" +#~ msgid "Change Keys" +#~ msgstr "Zmeň ovládacie klávesy" + #, fuzzy #~ msgid "Change keys" #~ msgstr "Zmeň ovládacie klávesy" @@ -7057,6 +7209,38 @@ msgstr "Paralelný limit cURL" #~ msgid "Controls sinking speed in liquid." #~ msgstr "Riadi rýchlosť ponárania v tekutinách." +#, c-format +#~ msgid "" +#~ "Controls:\n" +#~ "- %s: move forwards\n" +#~ "- %s: move backwards\n" +#~ "- %s: move left\n" +#~ "- %s: move right\n" +#~ "- %s: jump/climb up\n" +#~ "- %s: dig/punch/use\n" +#~ "- %s: place/use\n" +#~ "- %s: sneak/climb down\n" +#~ "- %s: drop item\n" +#~ "- %s: inventory\n" +#~ "- Mouse: turn/look\n" +#~ "- Mouse wheel: select item\n" +#~ "- %s: chat\n" +#~ msgstr "" +#~ "Ovládanie:\n" +#~ "- %s: pohyb vpred\n" +#~ "- %s: pohyb vzad\n" +#~ "- %s: pohyb doľava\n" +#~ "- %s: pohyb doprava\n" +#~ "- %s: skoč/vylez hore\n" +#~ "- %s: kop/udri\n" +#~ "- %s: polož/použi\n" +#~ "- %s: zakrádaj sa/zlez dole\n" +#~ "- %s: odhoď vec\n" +#~ "- %s: inventár\n" +#~ "- Myš: otoč sa/obzeraj sa\n" +#~ "- Myš koliesko: zvoľ vec\n" +#~ "- %s: komunikácia (chat)\n" + #~ msgid "Creative" #~ msgstr "Kreatívny režim" @@ -7066,6 +7250,9 @@ msgstr "Paralelný limit cURL" #~ msgid "Crosshair color (R,G,B)." #~ msgstr "Farba zameriavača (R,G,B)." +#~ msgid "DPI" +#~ msgstr "DPI" + #~ msgid "Damage" #~ msgstr "Zranenie" @@ -7135,6 +7322,13 @@ msgstr "Paralelný limit cURL" #~ msgid "Enable register confirmation" #~ msgstr "Aktivuj potvrdenie registrácie" +#~ msgid "" +#~ "Enable vertex buffer objects.\n" +#~ "This should greatly improve graphics performance." +#~ msgstr "" +#~ "Aktivuj \"vertex buffer objects\".\n" +#~ "Toto by malo viditeľne zvýšiť grafický výkon." + #~ msgid "Enabled" #~ msgstr "Aktivované" @@ -7429,6 +7623,9 @@ msgstr "Paralelný limit cURL" #~ msgid "Instrumentation" #~ msgstr "Výstroj" +#~ msgid "Invalid gamespec." +#~ msgstr "Chybná špec. hry." + #~ msgid "Inventory key" #~ msgstr "Tlačidlo Inventár" @@ -8116,6 +8313,12 @@ msgstr "Paralelný limit cURL" #~ msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles." #~ msgstr "Umožní DirectX pracovať s LuaJIT. Vypni ak to spôsobuje problémy." +#~ msgid "Makes all liquids opaque" +#~ msgstr "Všetky tekutiny budú nepriehľadné" + +#~ msgid "Mapblock mesh generator's MapBlock cache size in MB" +#~ msgstr "Medzipamäť Mapblock Mesh generátora blokov v MB" + #~ msgid "Menus" #~ msgstr "Menu" @@ -8334,15 +8537,22 @@ msgstr "Paralelný limit cURL" #~ msgid "Simple Leaves" #~ msgstr "Jednoduché listy" +#~ msgid "" +#~ "Size of the MapBlock cache of the mesh generator. Increasing this will\n" +#~ "increase the cache hit %, reducing the data being copied from the main\n" +#~ "thread, thus reducing jitter." +#~ msgstr "" +#~ "Veľkosť medzipamäte blokov v Mesh generátori.\n" +#~ "Zvýšenie zvýši využitie medzipamäte %, zníži sa množstvo dát " +#~ "kopírovaných\n" +#~ "z hlavnej vetvy a tým sa zníži chvenie." + #~ msgid "Smooth Lighting" #~ msgstr "Jemné osvetlenie" #~ msgid "Smooths rotation of camera. 0 to disable." #~ msgstr "Zjemní rotáciu kamery. 0 je pre vypnuté." -#~ msgid "Sound" -#~ msgstr "Zvuk" - #~ msgid "Special" #~ msgstr "Špeciál" @@ -8392,6 +8602,9 @@ msgstr "Paralelný limit cURL" #~ msgid "Touch threshold (px):" #~ msgstr "Dotykový prah (px):" +#~ msgid "Touchscreen threshold" +#~ msgstr "Prah citlivosti dotykovej obrazovky" + #~ msgid "Trilinear Filter" #~ msgstr "Trilineárny filter" @@ -8438,6 +8651,9 @@ msgstr "Paralelný limit cURL" #~ "Ak sú nastavené na 0, MSAA je zakázané.\n" #~ "Po zmene tohto nastavenia je požadovaný reštart." +#~ msgid "VBO" +#~ msgstr "VBO" + #~ msgid "" #~ "Version number which was last seen during an update check.\n" #~ "\n" @@ -8516,8 +8732,14 @@ msgstr "Paralelný limit cURL" #~ msgid "You died." #~ msgstr "Zomrel si." +#~ msgid "You have no games installed." +#~ msgstr "Nie je nainštalovaná žiadna hra." + #~ msgid "Z" #~ msgstr "Z" #~ msgid "needs_fallback_font" #~ msgstr "no" + +#~ msgid "ok" +#~ msgstr "ok" diff --git a/po/sl/minetest.po b/po/sl/minetest.po index a7850ca0e..15cc3de55 100644 --- a/po/sl/minetest.po +++ b/po/sl/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Slovenian (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" "PO-Revision-Date: 2020-09-30 19:41+0000\n" "Last-Translator: Iztok Bajcar \n" "Language-Team: Slovenian ]" +msgid "[all | ] [-t]" msgstr "" -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" -msgstr "V redu" - #: builtin/fstk/ui.lua msgid "" msgstr "" @@ -110,6 +106,10 @@ msgstr "Prišlo je do napake:" msgid "Main menu" msgstr "Glavni meni" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "V redu" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Ponovna povezava" @@ -138,182 +138,189 @@ msgstr "Podporta je le različica protokola $1." msgid "We support protocol versions between version $1 and $2." msgstr "Podprte so različice protokolov med $1 in $2." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." -msgstr "" +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "Failed to download \"$1\"" +msgstr "Prenos $1 je spodletel" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" -msgstr "" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr "Prenos $1 je spodletel" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "Nameščanje: nepodprta vrsta datoteke \"$1\" oziroma okvarjen arhiv" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua #, fuzzy msgid "$1 downloading..." msgstr "Poteka nalaganje ..." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "Vsi paketi" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Back to Main Menu" +msgstr "Nazaj na glavni meni" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "ContentDB ni na voljo, če je bil Minetest narejen brez podpore cURL" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#, fuzzy +msgid "Downloading..." +msgstr "Poteka nalaganje ..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "Igre" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +msgstr "Namesti" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp +msgid "Loading..." +msgstr "Poteka nalaganje ..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Mods" +msgstr "Prilagoditve (mods)" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "Ni mogoče pridobiti nobenega paketa" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "Ni rezultatov" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#, fuzzy +msgid "No updates" +msgstr "Posodobi" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "Paketi tekstur" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "Odstrani" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "Posodobi" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "" + +#: 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 "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua #, fuzzy msgid "Already installed" msgstr "Tipka je že v uporabi" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Back to Main Menu" -msgstr "Nazaj na glavni meni" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #, fuzzy msgid "Base Game:" msgstr "Gosti igro" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "Prekliči" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "ContentDB ni na voljo, če je bil Minetest narejen brez podpore cURL" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "Odvisnosti:" -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Downloading..." -msgstr "Poteka nalaganje ..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to download \"$1\"" -msgstr "Prenos $1 je spodletel" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "Prenos $1 je spodletel" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "Nameščanje: nepodprta vrsta datoteke \"$1\" oziroma okvarjen arhiv" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "Igre" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "Namesti" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #, fuzzy msgid "Install $1" msgstr "Namesti" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #, fuzzy msgid "Install missing dependencies" msgstr "Izbirne možnosti:" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "Poteka nalaganje ..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "Prilagoditve (mods)" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "Ni mogoče pridobiti nobenega paketa" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "Ni rezultatov" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "No updates" -msgstr "Posodobi" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "Paketi tekstur" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "Odstrani" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "Posodobi" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" msgstr "" #: builtin/mainmenu/content/pkgmgr.lua @@ -475,11 +482,21 @@ msgstr "Ustvari" msgid "Decorations" msgstr "Dekoracije" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua #, fuzzy msgid "Development Test is meant for developers." msgstr "Opozorilo: okrnjena razvojna različica je namenjena razvijalcem." +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua #, fuzzy msgid "Dungeons" @@ -863,10 +880,6 @@ msgstr "" msgid "Back" msgstr "Nazaj" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "Spremeni tipke" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -876,7 +889,8 @@ msgstr "Klepet" msgid "Clear" msgstr "Počisti" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp #, fuzzy msgid "Controls" msgstr "Kontrole" @@ -1091,6 +1105,16 @@ msgstr "Namesti" msgid "Install games from ContentDB" msgstr "Namesti igre iz ContentDB" +#: builtin/mainmenu/tab_local.lua +msgid "Minetest 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 " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "Novo" @@ -1125,8 +1149,8 @@ msgid "Start Game" msgstr "Začni igro" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." -msgstr "Ni nameščenih iger." +msgid "You need to install a game before you can create a world." +msgstr "" #: builtin/mainmenu/tab_online.lua #, fuzzy @@ -1212,19 +1236,11 @@ msgstr "Poteka nalaganje tekstur ..." msgid "Rebuilding shaders..." msgstr "Preračunavanje senčenja ..." -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "Napaka povezave (ali je dejanje časovno preteklo?)" - #: src/client/clientlauncher.cpp #, fuzzy msgid "Could not find or load game: " msgstr "Ni mogoče najti oziroma naložiti igre »" -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "Neveljavna določila igre." - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "Glavni Meni" @@ -1251,7 +1267,11 @@ msgstr "Ni bilo mogoče odpreti datoteke z geslom: " msgid "Provided world path doesn't exist: " msgstr "Podana pot do sveta ne obstaja: " -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "Medij..." + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp msgid "" "\n" "Check debug.txt for details." @@ -1259,18 +1279,10 @@ msgstr "" "\n" "Več podrobnosti je zapisanih v datoteki debug.txt." -#: src/client/game.cpp -msgid "- Address: " -msgstr "– Naslov: " - #: src/client/game.cpp msgid "- Mode: " msgstr "– Način: " -#: src/client/game.cpp -msgid "- Port: " -msgstr "– Vrata: " - #: src/client/game.cpp msgid "- Public: " msgstr "– Javno: " @@ -1306,10 +1318,6 @@ msgstr "Samodejno premikanje naprej je omogočeno" msgid "Block bounds hidden" msgstr "" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "" @@ -1355,6 +1363,10 @@ msgstr "Skriptiranje s strani odjemalca je onemogočeno" msgid "Connecting to server..." msgstr "Poteka povezovanje s strežnikom ..." +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "Napaka povezave (ali je dejanje časovno preteklo?)" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "" @@ -1363,47 +1375,14 @@ msgstr "" msgid "Continue" msgstr "Nadaljuj" -#: src/client/game.cpp -#, fuzzy, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" -"Tipkovne bližnjice:\n" -"- %s 1: premakne se naprej\n" -"- %s 2: premakne se nazaj\n" -"- %s 3: premakne se levo\n" -"- %s 4: premakne se desno\n" -"- %s 5: skakanje / plezanje\n" -"- %s 6: plazenje / premikanje dol\n" -"- %s 7: vrže predmet stran\n" -"- %s 8: pokaže zalogo\n" -"- Miška: obrne / pogleda\n" -"- levi gumb miške: koplje / udari\n" -"- desni gumb miške: postavi/uporabi\n" -"- kolesce miške: izbere orodje iz zaloge\n" -"- %s 9: omogoči klepet\n" - #: src/client/game.cpp #, fuzzy msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1497,6 +1476,11 @@ msgstr "Megla onemogočena" msgid "Fog enabled" msgstr "Megla omogočena" +#: src/client/game.cpp +#, fuzzy +msgid "Fog enabled by game or mod" +msgstr "Približanje (zoom) je trenutno onemogočen zaradi igre ali prilagoditve" + #: src/client/game.cpp msgid "Game info:" msgstr "Podrobnosti o igri:" @@ -1517,10 +1501,6 @@ msgstr "Določila predmetov ..." msgid "KiB/s" msgstr "KiB/s" -#: src/client/game.cpp -msgid "Media..." -msgstr "Medij..." - #: src/client/game.cpp msgid "MiB/s" msgstr "MiB/s" @@ -1684,10 +1664,6 @@ msgstr "Žičnati prikaz omogočen" msgid "Zoom currently disabled by game or mod" msgstr "Približanje (zoom) je trenutno onemogočen zaradi igre ali prilagoditve" -#: src/client/game.cpp -msgid "ok" -msgstr "v redu" - #: src/client/gameui.cpp #, fuzzy msgid "Chat currently disabled by game or mod" @@ -2029,6 +2005,15 @@ msgstr "Zemljevid (minimap) je v načinu prikazovanja površja, Zoom x1" msgid "Minimap in texture mode" msgstr "Zemljevid (minimap) je v načinu prikazovanja površja, Zoom x1" +#: src/client/shader.cpp +#, fuzzy, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "Prenos $1 je spodletel" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2222,6 +2207,19 @@ msgstr "Približanje" msgid "press key" msgstr "pritisni tipko" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +#, fuzzy +msgid "Unable to open URL" +msgstr "Prenos $1 je spodletel" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "Spremeni" @@ -2255,6 +2253,7 @@ msgstr "Glasnost zvoka: " #. 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 "sl" @@ -2473,14 +2472,6 @@ msgstr "" msgid "Adds particles when digging a node." msgstr "Doda partikle pri kopanju kocke." -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" -"Nastavite dpi konfiguracijo (gostoto prikaza) svojemu ekranu (samo za ne-X11/" -"Android), npr. za 4K ekrane." - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2504,6 +2495,10 @@ msgstr "Dodaj ime elementa" msgid "Advanced" msgstr "Naprednejše" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2561,6 +2556,17 @@ msgstr "" msgid "Apple trees noise" msgstr "Šum jablan" +#: 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 "Arm inertia" msgstr "Vztrajnost roke" @@ -2578,18 +2584,38 @@ msgid "Ask to reconnect after crash" msgstr "Vprašaj za ponovno povezavo po sesutju" #: src/settings_translation_file.cpp +#, fuzzy 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 will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +msgstr "" +"Na tej razdalji bo strežnik agresivno optimiziral, kateri bloki bodo " +"poslani\n" +"igralcem.\n" +"Manjše vrednosti lahko močno pospešijo delovanje na račun napak\n" +"pri izrisovanju (nekateri bloki se ne bodo izrisali pod vodo in v jamah,\n" +"včasih pa tudi na kopnem).\n" +"Nastavljanje na vrednost, večjo od max_block_send_distance, onemogoči to\n" +"optimizacijo.\n" +"Navedena vrednost ima enoto 'mapchunk' (16 blokov)." + +#: src/settings_translation_file.cpp +#, fuzzy +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 "" "Na tej razdalji bo strežnik agresivno optimiziral, kateri bloki bodo " "poslani\n" @@ -2667,6 +2693,10 @@ msgstr "Biomi" msgid "Biome noise" msgstr "Šum bioma" +#: src/settings_translation_file.cpp +msgid "Block cull optimize distance" +msgstr "" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "" @@ -2895,6 +2925,12 @@ msgstr "Barvna megla" msgid "Colored shadows" msgstr "Barvna megla" +#: 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -3028,10 +3064,6 @@ msgid "" "Also controls the object crosshair color" msgstr "" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "" @@ -3082,6 +3114,19 @@ msgid "" "but also uses more resources." 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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "Določa območja, kjer imajo drevesa jabolka." @@ -3271,6 +3316,11 @@ msgstr "Omogoči vse" msgid "Enable Bloom Debug" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Debanding" +msgstr "Omogoči poškodbe" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3290,6 +3340,11 @@ msgid "" "filtering." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Post Processing" +msgstr "Omogoči joystick" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "" @@ -3332,6 +3387,10 @@ msgstr "" msgid "Enable mouse wheel (scroll) for item selection in hotbar." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable random mod loading (mainly used for testing)." +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3355,6 +3414,11 @@ msgid "" "expecting." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable touchscreen" +msgstr "Celozaslonski način" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3363,12 +3427,6 @@ msgid "" "when connecting to the server." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3398,6 +3456,19 @@ msgstr "" msgid "Enables caching of facedir rotated meshes." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -4224,9 +4295,10 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" #: src/settings_translation_file.cpp @@ -4374,10 +4446,6 @@ msgid "" "Make fog and sky colors depend on daytime (dawn/sunset) and view direction." msgstr "" -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "" @@ -4426,7 +4494,9 @@ 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." +"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 @@ -4461,10 +4531,6 @@ msgstr "" msgid "Mapblock mesh generation threads" msgstr "" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "" @@ -4707,6 +4773,10 @@ msgstr "" msgid "Minimap scan height" msgstr "" +#: src/settings_translation_file.cpp +msgid "Minimum dig repetition interval" +msgstr "" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "" @@ -4775,6 +4845,11 @@ msgstr "Občutljivost miške" msgid "Mouse sensitivity multiplier." msgstr "Števnik občutljivosti premikanja miške." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Movement threshold" +msgstr "Vhod v jamo" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "" @@ -4885,10 +4960,6 @@ msgstr "" msgid "Occlusion Culling" msgstr "" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -4901,6 +4972,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "OpenGL debug" +msgstr "" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "" @@ -5011,6 +5086,15 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Protocol version minimum" +msgstr "Različice protokola niso skladne. " + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -5026,6 +5110,10 @@ msgstr "" msgid "Random input" msgstr "" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "" @@ -5217,8 +5305,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5340,7 +5428,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" @@ -5373,6 +5461,10 @@ msgid "" "Bright colors will bleed over the neighboring objects." 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 "Set to true to enable waving leaves." msgstr "" @@ -5412,8 +5504,7 @@ msgstr "Senčenje" msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" #: src/settings_translation_file.cpp @@ -5483,13 +5574,6 @@ msgid "" "recommended." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "" @@ -5526,7 +5610,7 @@ msgstr "" #, fuzzy msgid "" "Smooths rotation of camera when in cinematic mode, 0 to disable. Enter " -"cinematic mode by using the key set in Change Keys." +"cinematic mode by using the key set in Controls." msgstr "" "Možnost omogoča glajenje pogleda kamere med obračanjem v filmskem načinu. " "Vrednost 0 možnost onemogoči." @@ -5553,6 +5637,15 @@ msgstr "" msgid "Soft shadow radius" msgstr "Senca pisave" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sound" +msgstr "Zvok je utišan" + +#: src/settings_translation_file.cpp +msgid "Sound Extensions Blacklist" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -5709,17 +5802,37 @@ msgid "" "when calling `/profiler save [format]` without format." 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 "" "The file path relative to your world path in which profiles will be saved to." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "" #: src/settings_translation_file.cpp -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" #: src/settings_translation_file.cpp @@ -5730,6 +5843,12 @@ msgid "" "Default is 1.0 (1/2 node)." 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 "The network interface that the server listens on." msgstr "" @@ -5756,7 +5875,7 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" #: src/settings_translation_file.cpp @@ -5813,6 +5932,10 @@ msgstr "" msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "" +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -5862,15 +5985,15 @@ msgstr "Občutljivost miške" msgid "Touchscreen sensitivity multiplier." msgstr "Števnik občutljivosti premikanja miške." -#: src/settings_translation_file.cpp -#, fuzzy -msgid "Touchscreen threshold" -msgstr "Občutljivost dotika (v pikslih):" - #: src/settings_translation_file.cpp msgid "Tradeoffs for performance" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Translucent liquids" +msgstr "Valovanje tekočin" + #: src/settings_translation_file.cpp msgid "Transparency Sorting Distance" msgstr "" @@ -5906,7 +6029,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 "" #: src/settings_translation_file.cpp @@ -6008,10 +6133,6 @@ msgstr "" msgid "User Interfaces" msgstr "" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "" @@ -6098,12 +6219,25 @@ msgstr "" msgid "Volume" msgstr "" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +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 +#, fuzzy +msgid "Volumetric lighting" +msgstr "Poudarjanje vozlišč" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6344,12 +6478,18 @@ msgstr "" msgid "cURL parallel limit" msgstr "" +#~ msgid "- Address: " +#~ msgstr "– Naslov: " + #~ msgid "- Creative Mode: " #~ msgstr "– Ustvarjalni način: " #~ msgid "- Damage: " #~ msgstr "– Poškodbe: " +#~ msgid "- Port: " +#~ msgstr "– Vrata: " + #, fuzzy #~ msgid "" #~ "0 = parallax occlusion with slope information (faster).\n" @@ -6385,6 +6525,13 @@ msgstr "" #~ "Pustite prazno za zagon lokalnega strežnika.\n" #~ "Polje za vpis naslova v glavnem meniju povozi to nastavitev." +#~ msgid "" +#~ "Adjust dpi configuration to your screen (non X11/Android only) e.g. for " +#~ "4k screens." +#~ msgstr "" +#~ "Nastavite dpi konfiguracijo (gostoto prikaza) svojemu ekranu (samo za ne-" +#~ "X11/Android), npr. za 4K ekrane." + #~ msgid "All Settings" #~ msgstr "Vse nastavitve" @@ -6427,6 +6574,9 @@ msgstr "" #~ "procesorjih.\n" #~ "0.1 = privzeto, 0.25 = dobra vrednost za šibkejše naprave" +#~ msgid "Change Keys" +#~ msgstr "Spremeni tipke" + #, fuzzy #~ msgid "Change keys" #~ msgstr "Spremeni tipke" @@ -6483,6 +6633,38 @@ msgstr "" #~ msgid "Controls sinking speed in liquid." #~ msgstr "Nadzira hitrost potapljanja v tekočinah." +#, fuzzy, c-format +#~ msgid "" +#~ "Controls:\n" +#~ "- %s: move forwards\n" +#~ "- %s: move backwards\n" +#~ "- %s: move left\n" +#~ "- %s: move right\n" +#~ "- %s: jump/climb up\n" +#~ "- %s: dig/punch/use\n" +#~ "- %s: place/use\n" +#~ "- %s: sneak/climb down\n" +#~ "- %s: drop item\n" +#~ "- %s: inventory\n" +#~ "- Mouse: turn/look\n" +#~ "- Mouse wheel: select item\n" +#~ "- %s: chat\n" +#~ msgstr "" +#~ "Tipkovne bližnjice:\n" +#~ "- %s 1: premakne se naprej\n" +#~ "- %s 2: premakne se nazaj\n" +#~ "- %s 3: premakne se levo\n" +#~ "- %s 4: premakne se desno\n" +#~ "- %s 5: skakanje / plezanje\n" +#~ "- %s 6: plazenje / premikanje dol\n" +#~ "- %s 7: vrže predmet stran\n" +#~ "- %s 8: pokaže zalogo\n" +#~ "- Miška: obrne / pogleda\n" +#~ "- levi gumb miške: koplje / udari\n" +#~ "- desni gumb miške: postavi/uporabi\n" +#~ "- kolesce miške: izbere orodje iz zaloge\n" +#~ "- %s 9: omogoči klepet\n" + #~ msgid "Creative" #~ msgstr "Ustvarjalen" @@ -6756,6 +6938,9 @@ msgstr "" #~ msgid "Install: file: \"$1\"" #~ msgstr "Namesti: datoteka: »$1«" +#~ msgid "Invalid gamespec." +#~ msgstr "Neveljavna določila igre." + #~ msgid "" #~ "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" #~ msgstr "" @@ -6801,9 +6986,6 @@ msgstr "" #~ msgid "No Mipmap" #~ msgstr "Brez zemljevida (minimap)" -#~ msgid "Node Highlighting" -#~ msgstr "Poudarjanje vozlišč" - #~ msgid "Node Outlining" #~ msgstr "Obrobljanje vozlišč" @@ -6909,6 +7091,10 @@ msgstr "" #~ msgid "Tone Mapping" #~ msgstr "Barvno preslikavanje" +#, fuzzy +#~ msgid "Touchscreen threshold" +#~ msgstr "Občutljivost dotika (v pikslih):" + #~ msgid "Trilinear Filter" #~ msgstr "Trilinearni filter" @@ -6973,8 +7159,14 @@ msgstr "" #~ msgid "You died." #~ msgstr "Umrl si" +#~ msgid "You have no games installed." +#~ msgstr "Ni nameščenih iger." + #~ msgid "Z" #~ msgstr "Z" #~ msgid "needs_fallback_font" #~ msgstr "no" + +#~ msgid "ok" +#~ msgstr "v redu" diff --git a/po/sr_Cyrl/minetest.po b/po/sr_Cyrl/minetest.po index 2e67b67a0..c54f42825 100644 --- a/po/sr_Cyrl/minetest.po +++ b/po/sr_Cyrl/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Serbian (cyrillic) (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" "PO-Revision-Date: 2022-07-12 16:18+0000\n" "Last-Translator: OrbitalPetrol \n" "Language-Team: Serbian (cyrillic) ]" +#, fuzzy +msgid "[all | ] [-t]" msgstr "[all | <команда>]" -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" -msgstr "У реду" - #: builtin/fstk/ui.lua msgid "" msgstr "<ни једна није доступна>" @@ -106,6 +104,10 @@ msgstr "Догодила се грешка:" msgid "Main menu" msgstr "Главни мени" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "У реду" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Поновно повезивање" @@ -134,19 +136,27 @@ msgstr "Ми подржавамо само $1 верзију протокола. msgid "We support protocol versions between version $1 and $2." msgstr "Ми подржавамо верзије протокола између верзије $1 и $2." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "\"$1\" већ постоји. Да ли желите да га препишете?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" +msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." -msgstr "$1 и $2 зависности ће бити инсталиране." +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "Failed to download \"$1\"" +msgstr "Неуспело преузимање $1" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" -msgstr "$1 од $2" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr "Неуспело преузимање $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "Инсталирај мод: неподржан тип фајла \"$1\" или оштећена архива" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" @@ -154,159 +164,158 @@ msgstr "" "$1 се преузима,\n" "$2 чекају преузимање" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." msgstr "$1 се преузима..." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "$1 неопходних зависности није могло бити нађено." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "$1 зависности ће бити инсталирано, и $2 зависности ће бити прескочено." - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "Сви пакети" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "Већ инсталирано" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "Назад у главни мени" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "" +"ContentDB није доступан када је Minetest компајлиран без cURL библиотеке" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "Преузимање..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "Игре" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +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 "Mods" +msgstr "Модови" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "Ниједан пакет није било могуће преузети" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "Нема резултата" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "Нема ажурирања" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "На чекању" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "Сетови текстура" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "Деинсталирај" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "Ажурирај" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "Ажурирај све [$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 и $2 зависности ће бити инсталиране." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "$1 од $2" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "$1 неопходних зависности није могло бити нађено." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "$1 зависности ће бити инсталирано, и $2 зависности ће бити прескочено." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "Већ инсталирано" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "Основна игра:" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "Прекини" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "" -"ContentDB није доступан када је Minetest компајлиран без cURL библиотеке" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "Зависи од:" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "Преузимање..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to download \"$1\"" -msgstr "Неуспело преузимање $1" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "Неуспело преузимање $1" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "Инсталирај мод: неподржан тип фајла \"$1\" или оштећена архива" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "Игре" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "Инсталирај" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "Инсталирај $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "Инсталирај недостајуће зависности" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "Учитавање..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "Модови" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "Ниједан пакет није било могуће преузети" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "Нема резултата" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "Нема ажурирања" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "Није пронађено" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "Препиши" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "Молим проверите да ли је основна игра исправна." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" -msgstr "На чекању" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" +msgstr "\"$1\" већ постоји. Да ли желите да га препишете?" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "Сетови текстура" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "Деинсталирај" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "Ажурирај" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "Ажурирај све [$1]" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "Погледај још информација у веб претраживачу" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" -msgstr "" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" +msgstr "Препиши" #: builtin/mainmenu/content/pkgmgr.lua #, fuzzy @@ -464,11 +473,21 @@ msgstr "Направи" msgid "Decorations" msgstr "Украси" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua #, fuzzy msgid "Development Test is meant for developers." msgstr "Упозорење: Минимални развојни тест је намењен развијачима." +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "Тамнице" @@ -845,10 +864,6 @@ msgstr "" msgid "Back" msgstr "Назад" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "Подеси контроле" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -858,7 +873,8 @@ msgstr "Чет" msgid "Clear" msgstr "Очисти" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "Контроле" @@ -1076,6 +1092,16 @@ msgstr "Инсталирај $1" msgid "Install games from ContentDB" msgstr "" +#: builtin/mainmenu/tab_local.lua +msgid "Minetest 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 " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "Нови" @@ -1112,8 +1138,8 @@ msgid "Start Game" msgstr "Направи игру" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." -msgstr "Нема инсталираних подигара." +msgid "You need to install a game before you can create a world." +msgstr "" #: builtin/mainmenu/tab_online.lua #, fuzzy @@ -1200,19 +1226,11 @@ msgstr "Учитавам текстуре..." msgid "Rebuilding shaders..." msgstr "Обнављам шејдере..." -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "Грешка у конекцији (истекло време?)" - #: src/client/clientlauncher.cpp #, fuzzy msgid "Could not find or load game: " msgstr "Немогу пронаћи или учитати игру \"" -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "Неважећи gamespec." - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "Главни мени" @@ -1238,7 +1256,11 @@ msgstr "" msgid "Provided world path doesn't exist: " msgstr "Дата локација света не постоји: " -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "Медија..." + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp msgid "" "\n" "Check debug.txt for details." @@ -1246,18 +1268,10 @@ msgstr "" "\n" "Проверите debug.txt за више детаља." -#: src/client/game.cpp -msgid "- Address: " -msgstr "- Адреса: " - #: src/client/game.cpp msgid "- Mode: " msgstr "- Мод: " -#: src/client/game.cpp -msgid "- Port: " -msgstr "- Порт: " - #: src/client/game.cpp msgid "- Public: " msgstr "- Јавни: " @@ -1295,10 +1309,6 @@ msgstr "Кључ за синематски мод" msgid "Block bounds hidden" msgstr "" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "" @@ -1348,6 +1358,10 @@ msgstr "" msgid "Connecting to server..." msgstr "Повезујем се на сервер..." +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "Грешка у конекцији (истекло време?)" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "" @@ -1356,47 +1370,14 @@ msgstr "" msgid "Continue" msgstr "Настави" -#: src/client/game.cpp -#, fuzzy, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" -"Уобичајене контроле:\n" -"- %s: иди напред\n" -"- %s: иди назад\n" -"- %s: иди лево\n" -"- %s: иди десно\n" -"- %s: скакање/пењање\n" -"- %s: шуњање/силажење\n" -"- %s: баци ставку\n" -"- %s: инвентар\n" -"- Миш: окретање/гледање\n" -"- Леви клик: копање/ударање\n" -"- Десни клик: постављање/коришћење\n" -"- Точкић миша: одабирање ставке\n" -"- %s: причање\n" - #: src/client/game.cpp #, fuzzy msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1493,6 +1474,10 @@ msgstr "Онемогућено" msgid "Fog enabled" msgstr "укључено" +#: src/client/game.cpp +msgid "Fog enabled by game or mod" +msgstr "" + #: src/client/game.cpp msgid "Game info:" msgstr "Информације о игри:" @@ -1513,10 +1498,6 @@ msgstr "Дефиниције предмета..." msgid "KiB/s" msgstr "КиБ/с" -#: src/client/game.cpp -msgid "Media..." -msgstr "Медија..." - #: src/client/game.cpp msgid "MiB/s" msgstr "МиБ/с" @@ -1676,10 +1657,6 @@ msgstr "" msgid "Zoom currently disabled by game or mod" msgstr "" -#: src/client/game.cpp -msgid "ok" -msgstr "уреду" - #: src/client/gameui.cpp msgid "Chat currently disabled by game or mod" msgstr "" @@ -2014,6 +1991,15 @@ msgstr "" msgid "Minimap in texture mode" msgstr "" +#: src/client/shader.cpp +#, fuzzy, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "Неуспело преузимање $1" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2214,6 +2200,19 @@ msgstr "Зумирај" msgid "press key" msgstr "притисните дугме" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +#, fuzzy +msgid "Unable to open URL" +msgstr "Неуспело преузимање $1" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "Промени" @@ -2248,6 +2247,7 @@ msgstr "Јачина звука: " #. 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 "sr_Cyrl" @@ -2454,14 +2454,6 @@ msgstr "Даљина слања активног блока" msgid "Adds particles when digging a node." msgstr "Додаје честице када се блок ископа." -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" -"Подеси dpi конфигурацију за твој екран (само за оне који нису X11/Android) " -"нпр. за 4k екране." - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2485,6 +2477,10 @@ msgstr "Име света" msgid "Advanced" msgstr "Напредно" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2542,6 +2538,17 @@ msgstr "" msgid "Apple trees noise" 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 "Arm inertia" msgstr "" @@ -2564,12 +2571,31 @@ msgid "" "clients.\n" "Small values potentially improve performance a lot, at the expense of " "visible\n" -"rendering glitches (some blocks will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +msgstr "" +"При овој раздаљини сервер ће агресивно оптимизовати који блокови се шаљу " +"клијенту\n" +"Мање вредности ће потенцијално пролично побољшати преформансе, по цену " +"видљивих грешака на приказаној слици.\n" +"(неки блокови се неће приказивати под водом и у пећинама, као ни понеки на " +"земљи)\n" +"Постављање овога на вредност већу од max_block_send_distance искључује ову " +"оптимизацију.\n" +"Постављено у мапа-блоковима (16 блокова)" + +#: src/settings_translation_file.cpp +#, fuzzy +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 "" "При овој раздаљини сервер ће агресивно оптимизовати који блокови се шаљу " "клијенту\n" @@ -2645,6 +2671,10 @@ msgstr "Биоми" msgid "Biome noise" msgstr "Семе биома" +#: src/settings_translation_file.cpp +msgid "Block cull optimize distance" +msgstr "" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "" @@ -2871,6 +2901,12 @@ msgstr "Обојена магла" msgid "Colored shadows" 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -3015,10 +3051,6 @@ msgid "" "Also controls the object crosshair color" msgstr "" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "DPI" - #: src/settings_translation_file.cpp #, fuzzy msgid "Debug log file size threshold" @@ -3070,6 +3102,19 @@ msgid "" "but also uses more resources." 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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "" @@ -3258,6 +3303,11 @@ msgstr "Укључи све" msgid "Enable Bloom Debug" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Debanding" +msgstr "Омогући оштећење" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3277,6 +3327,10 @@ msgid "" "filtering." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable Post Processing" +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "" @@ -3319,6 +3373,10 @@ msgstr "" msgid "Enable mouse wheel (scroll) for item selection in hotbar." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable random mod loading (mainly used for testing)." +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3342,6 +3400,11 @@ msgid "" "expecting." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable touchscreen" +msgstr "Граница семена за плаже" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3350,12 +3413,6 @@ msgid "" "when connecting to the server." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3385,6 +3442,19 @@ msgstr "" msgid "Enables caching of facedir rotated meshes." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -4187,9 +4257,10 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" #: src/settings_translation_file.cpp @@ -4338,10 +4409,6 @@ msgid "" "Make fog and sky colors depend on daytime (dawn/sunset) and view direction." msgstr "" -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "" @@ -4390,7 +4457,9 @@ 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." +"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 @@ -4425,10 +4494,6 @@ msgstr "" msgid "Mapblock mesh generation threads" msgstr "" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "" @@ -4676,6 +4741,10 @@ msgstr "" msgid "Minimap scan height" msgstr "" +#: src/settings_translation_file.cpp +msgid "Minimum dig repetition interval" +msgstr "" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "" @@ -4744,6 +4813,11 @@ msgstr "" msgid "Mouse sensitivity multiplier." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Movement threshold" +msgstr "Граница пећине" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "" @@ -4853,10 +4927,6 @@ msgstr "" msgid "Occlusion Culling" msgstr "" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -4869,6 +4939,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "OpenGL debug" +msgstr "" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "" @@ -4979,6 +5053,15 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Protocol version minimum" +msgstr "Неслагање верзија протокола. " + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -4994,6 +5077,10 @@ msgstr "" msgid "Random input" msgstr "" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "" @@ -5186,8 +5273,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5329,7 +5416,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" @@ -5362,6 +5449,10 @@ msgid "" "Bright colors will bleed over the neighboring objects." 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 "Set to true to enable waving leaves." msgstr "" @@ -5402,8 +5493,7 @@ msgstr "Шејдери" msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" #: src/settings_translation_file.cpp @@ -5473,13 +5563,6 @@ msgid "" "recommended." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "" @@ -5515,7 +5598,7 @@ 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 Change Keys." +"cinematic mode by using the key set in Controls." msgstr "" #: src/settings_translation_file.cpp @@ -5538,6 +5621,15 @@ msgstr "" msgid "Soft shadow radius" msgstr "Величина облака" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sound" +msgstr "Јачина звука" + +#: src/settings_translation_file.cpp +msgid "Sound Extensions Blacklist" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -5694,17 +5786,37 @@ msgid "" "when calling `/profiler save [format]` without format." 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 "" "The file path relative to your world path in which profiles will be saved to." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "" #: src/settings_translation_file.cpp -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" #: src/settings_translation_file.cpp @@ -5715,6 +5827,12 @@ msgid "" "Default is 1.0 (1/2 node)." 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 "The network interface that the server listens on." msgstr "" @@ -5741,7 +5859,7 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" #: src/settings_translation_file.cpp @@ -5798,6 +5916,10 @@ msgstr "" msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "" +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -5846,15 +5968,15 @@ msgstr "Граница семена за плаже" msgid "Touchscreen sensitivity multiplier." msgstr "" -#: src/settings_translation_file.cpp -#, fuzzy -msgid "Touchscreen threshold" -msgstr "Граница семена за плаже" - #: src/settings_translation_file.cpp msgid "Tradeoffs for performance" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Translucent liquids" +msgstr "Лепршајуће лишће" + #: src/settings_translation_file.cpp msgid "Transparency Sorting Distance" msgstr "" @@ -5890,7 +6012,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 "" #: src/settings_translation_file.cpp @@ -5989,10 +6113,6 @@ msgstr "" msgid "User Interfaces" msgstr "" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "" @@ -6079,12 +6199,25 @@ msgstr "" msgid "Volume" msgstr "" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +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 +#, fuzzy +msgid "Volumetric lighting" +msgstr "Истицање блокова" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6327,12 +6460,18 @@ msgstr "" msgid "cURL parallel limit" msgstr "" +#~ msgid "- Address: " +#~ msgstr "- Адреса: " + #~ msgid "- Creative Mode: " #~ msgstr "- Слободни мод: " #~ msgid "- Damage: " #~ msgstr "- Оштећење: " +#~ msgid "- Port: " +#~ msgstr "- Порт: " + #~ msgid "" #~ "0 = parallax occlusion with slope information (faster).\n" #~ "1 = relief mapping (slower, more accurate)." @@ -6367,6 +6506,13 @@ msgstr "" #~ "Оставите ово празно за локални сервер.\n" #~ "Пазите да поље за адресу у менију преписује ово подешавање." +#~ msgid "" +#~ "Adjust dpi configuration to your screen (non X11/Android only) e.g. for " +#~ "4k screens." +#~ msgstr "" +#~ "Подеси dpi конфигурацију за твој екран (само за оне који нису X11/" +#~ "Android) нпр. за 4k екране." + #~ msgid "" #~ "Adjust the gamma encoding for the light tables. Higher numbers are " #~ "brighter.\n" @@ -6415,6 +6561,9 @@ msgstr "" #~ msgid "Camera update toggle key" #~ msgstr "Кључ за укључивање/искључивање освежавања камере" +#~ msgid "Change Keys" +#~ msgstr "Подеси контроле" + #, fuzzy #~ msgid "Change keys" #~ msgstr "Подеси контроле" @@ -6463,6 +6612,38 @@ msgstr "" #~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." #~ msgstr "Контролише ширину тунела, мања вредност ствара шире тунеле." +#, fuzzy, c-format +#~ msgid "" +#~ "Controls:\n" +#~ "- %s: move forwards\n" +#~ "- %s: move backwards\n" +#~ "- %s: move left\n" +#~ "- %s: move right\n" +#~ "- %s: jump/climb up\n" +#~ "- %s: dig/punch/use\n" +#~ "- %s: place/use\n" +#~ "- %s: sneak/climb down\n" +#~ "- %s: drop item\n" +#~ "- %s: inventory\n" +#~ "- Mouse: turn/look\n" +#~ "- Mouse wheel: select item\n" +#~ "- %s: chat\n" +#~ msgstr "" +#~ "Уобичајене контроле:\n" +#~ "- %s: иди напред\n" +#~ "- %s: иди назад\n" +#~ "- %s: иди лево\n" +#~ "- %s: иди десно\n" +#~ "- %s: скакање/пењање\n" +#~ "- %s: шуњање/силажење\n" +#~ "- %s: баци ставку\n" +#~ "- %s: инвентар\n" +#~ "- Миш: окретање/гледање\n" +#~ "- Леви клик: копање/ударање\n" +#~ "- Десни клик: постављање/коришћење\n" +#~ "- Точкић миша: одабирање ставке\n" +#~ "- %s: причање\n" + #~ msgid "Creative" #~ msgstr "Креативни мод" @@ -6472,6 +6653,9 @@ msgstr "" #~ msgid "Crosshair color (R,G,B)." #~ msgstr "Боја нишана (R,G,B)." +#~ msgid "DPI" +#~ msgstr "DPI" + #~ msgid "Damage" #~ msgstr "Штета" @@ -6540,6 +6724,9 @@ msgstr "" #~ msgid "Install: file: \"$1\"" #~ msgstr "Инсталирај мод: фајл: \"$1\"" +#~ msgid "Invalid gamespec." +#~ msgstr "Неважећи gamespec." + #~ msgid "" #~ "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" #~ msgstr "" @@ -6574,9 +6761,6 @@ msgstr "" #~ msgid "No Mipmap" #~ msgstr "Без Mipmap-а" -#~ msgid "Node Highlighting" -#~ msgstr "Истицање блокова" - #~ msgid "Node Outlining" #~ msgstr "Обцртавање блокова" @@ -6671,6 +6855,10 @@ msgstr "" #~ msgid "Touch threshold (px):" #~ msgstr "Праг додиривања (px)" +#, fuzzy +#~ msgid "Touchscreen threshold" +#~ msgstr "Граница семена за плаже" + #~ msgid "Trilinear Filter" #~ msgstr "Трилинеарни филтер" @@ -6705,5 +6893,11 @@ msgstr "" #~ msgid "You died." #~ msgstr "Умро/ла си." +#~ msgid "You have no games installed." +#~ msgstr "Нема инсталираних подигара." + #~ msgid "needs_fallback_font" #~ msgstr "no" + +#~ msgid "ok" +#~ msgstr "уреду" diff --git a/po/sr_Latn/minetest.po b/po/sr_Latn/minetest.po index d1524c8dc..c4e63c55b 100644 --- a/po/sr_Latn/minetest.po +++ b/po/sr_Latn/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" "PO-Revision-Date: 2023-05-06 20:50+0000\n" "Last-Translator: Sava Kujundžić \n" "Language-Team: Serbian (latin) ]" +#, fuzzy +msgid "[all | ] [-t]" msgstr "[all | ]" -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" -msgstr "OK" - #: builtin/fstk/ui.lua msgid "" msgstr "" @@ -107,6 +105,10 @@ msgstr "Doslo je do greske:" msgid "Main menu" msgstr "Glavni meni" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "OK" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Ponovno povezivanje" @@ -135,178 +137,185 @@ msgstr "Mi samo podrzavamo protokol verzije $1." msgid "We support protocol versions between version $1 and $2." msgstr "Mi podrzavamo protokol verzija izmedju verzije $1 i $2." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "Failed to download \"$1\"" +msgstr "Neuspelo preuzimanje $1" + +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr "Neuspelo preuzimanje $1" + +#: builtin/mainmenu/content/contentdb.lua +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua #, fuzzy msgid "$1 downloading..." msgstr "Preuzimanje..." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "Svi paketi" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "Nazad na Glavni meni" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "ContentDB je nedostupan kada je Minetest sastavljen bez cURL" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "Preuzimanje..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "Igre" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +msgstr "Instalirati" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp +msgid "Loading..." +msgstr "Ucitavanje..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Mods" +msgstr "Modovi" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "Nema paketa za preuzeti" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "Bez rezultata" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#, fuzzy +msgid "No updates" +msgstr "Azuriranje" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "Pakovanja tekstura" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "Deinstaliraj" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "Azuriranje" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "" + +#: 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 "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "Ponisti" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "ContentDB je nedostupan kada je Minetest sastavljen bez cURL" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "Zavisnosti:" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "Preuzimanje..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to download \"$1\"" -msgstr "Neuspelo preuzimanje $1" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "Neuspelo preuzimanje $1" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "Igre" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "Instalirati" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #, fuzzy msgid "Install $1" msgstr "Instalirati" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #, fuzzy msgid "Install missing dependencies" msgstr "Neobavezne zavisnosti:" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "Ucitavanje..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "Modovi" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "Nema paketa za preuzeti" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "Bez rezultata" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "No updates" -msgstr "Azuriranje" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "Pakovanja tekstura" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "Deinstaliraj" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "Azuriranje" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" msgstr "" #: builtin/mainmenu/content/pkgmgr.lua @@ -455,10 +464,20 @@ msgstr "" msgid "Decorations" msgstr "Dekoracije" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." msgstr "" +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "Tamnice" @@ -825,10 +844,6 @@ msgstr "" msgid "Back" msgstr "" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -838,7 +853,8 @@ msgstr "" msgid "Clear" msgstr "" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "" @@ -1043,6 +1059,16 @@ msgstr "Instalirati" msgid "Install games from ContentDB" msgstr "" +#: builtin/mainmenu/tab_local.lua +msgid "Minetest 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 " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "" @@ -1076,8 +1102,8 @@ msgid "Start Game" msgstr "" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." -msgstr "Nema instaliranih igara." +msgid "You need to install a game before you can create a world." +msgstr "" #: builtin/mainmenu/tab_online.lua msgid "Address" @@ -1157,18 +1183,10 @@ msgstr "" msgid "Rebuilding shaders..." msgstr "" -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "" - #: src/client/clientlauncher.cpp msgid "Could not find or load game: " msgstr "" -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "" - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "" @@ -1193,24 +1211,20 @@ msgstr "" msgid "Provided world path doesn't exist: " msgstr "" -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +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 "- Address: " -msgstr "" - #: src/client/game.cpp msgid "- Mode: " msgstr "" -#: src/client/game.cpp -msgid "- Port: " -msgstr "" - #: src/client/game.cpp msgid "- Public: " msgstr "" @@ -1246,10 +1260,6 @@ msgstr "" msgid "Block bounds hidden" msgstr "" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "" @@ -1294,6 +1304,10 @@ msgstr "" msgid "Connecting to server..." msgstr "" +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "" @@ -1302,32 +1316,13 @@ msgstr "" msgid "Continue" msgstr "" -#: src/client/game.cpp -#, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" - #: src/client/game.cpp msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1407,6 +1402,10 @@ msgstr "" msgid "Fog enabled" msgstr "" +#: src/client/game.cpp +msgid "Fog enabled by game or mod" +msgstr "" + #: src/client/game.cpp msgid "Game info:" msgstr "" @@ -1427,10 +1426,6 @@ msgstr "" msgid "KiB/s" msgstr "" -#: src/client/game.cpp -msgid "Media..." -msgstr "" - #: src/client/game.cpp msgid "MiB/s" msgstr "" @@ -1586,10 +1581,6 @@ msgstr "" msgid "Zoom currently disabled by game or mod" msgstr "" -#: src/client/game.cpp -msgid "ok" -msgstr "" - #: src/client/gameui.cpp msgid "Chat currently disabled by game or mod" msgstr "" @@ -1910,6 +1901,15 @@ msgstr "" msgid "Minimap in texture mode" msgstr "" +#: src/client/shader.cpp +#, fuzzy, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "Neuspelo preuzimanje $1" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2101,6 +2101,19 @@ msgstr "" msgid "press key" msgstr "" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +#, fuzzy +msgid "Unable to open URL" +msgstr "Neuspelo preuzimanje $1" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "" @@ -2134,6 +2147,7 @@ msgstr "" #. 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 "sr_Latn" @@ -2319,12 +2333,6 @@ msgstr "" msgid "Adds particles when digging a node." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2347,6 +2355,10 @@ msgstr "" msgid "Advanced" msgstr "" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2400,6 +2412,17 @@ msgstr "" msgid "Apple trees noise" 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 "Arm inertia" msgstr "" @@ -2421,12 +2444,21 @@ msgid "" "clients.\n" "Small values potentially improve performance a lot, at the expense of " "visible\n" -"rendering glitches (some blocks will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +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 @@ -2490,6 +2522,10 @@ msgstr "Biomi" msgid "Biome noise" msgstr "" +#: src/settings_translation_file.cpp +msgid "Block cull optimize distance" +msgstr "" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "" @@ -2702,6 +2738,12 @@ msgstr "" msgid "Colored shadows" 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -2833,10 +2875,6 @@ msgid "" "Also controls the object crosshair color" msgstr "" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "" @@ -2886,6 +2924,19 @@ msgid "" "but also uses more resources." 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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "" @@ -3072,6 +3123,11 @@ msgstr "Omoguci sve" msgid "Enable Bloom Debug" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Debanding" +msgstr "Omoguci sve" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3091,6 +3147,10 @@ msgid "" "filtering." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable Post Processing" +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "" @@ -3133,6 +3193,10 @@ msgstr "" msgid "Enable mouse wheel (scroll) for item selection in hotbar." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable random mod loading (mainly used for testing)." +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3156,6 +3220,10 @@ msgid "" "expecting." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable touchscreen" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3164,12 +3232,6 @@ msgid "" "when connecting to the server." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3199,6 +3261,19 @@ msgstr "" msgid "Enables caching of facedir rotated meshes." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -3994,9 +4069,10 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" #: src/settings_translation_file.cpp @@ -4142,10 +4218,6 @@ msgid "" "Make fog and sky colors depend on daytime (dawn/sunset) and view direction." msgstr "" -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "" @@ -4194,7 +4266,9 @@ 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." +"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 @@ -4229,10 +4303,6 @@ msgstr "" msgid "Mapblock mesh generation threads" msgstr "" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "" @@ -4475,6 +4545,10 @@ msgstr "" msgid "Minimap scan height" msgstr "" +#: src/settings_translation_file.cpp +msgid "Minimum dig repetition interval" +msgstr "" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "" @@ -4543,6 +4617,10 @@ msgstr "" msgid "Mouse sensitivity multiplier." msgstr "" +#: src/settings_translation_file.cpp +msgid "Movement threshold" +msgstr "" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "" @@ -4651,10 +4729,6 @@ msgstr "" msgid "Occlusion Culling" msgstr "" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -4667,6 +4741,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "OpenGL debug" +msgstr "" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "" @@ -4776,6 +4854,15 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Protocol version minimum" +msgstr "Protokol verzija neuskladjena. " + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -4791,6 +4878,10 @@ msgstr "" msgid "Random input" msgstr "" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "" @@ -4978,8 +5069,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5098,7 +5189,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" @@ -5131,6 +5222,10 @@ msgid "" "Bright colors will bleed over the neighboring objects." 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 "Set to true to enable waving leaves." msgstr "" @@ -5170,8 +5265,7 @@ msgstr "" msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" #: src/settings_translation_file.cpp @@ -5241,13 +5335,6 @@ msgid "" "recommended." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "" @@ -5283,7 +5370,7 @@ 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 Change Keys." +"cinematic mode by using the key set in Controls." msgstr "" #: src/settings_translation_file.cpp @@ -5304,6 +5391,14 @@ msgstr "" msgid "Soft shadow radius" 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 "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -5460,17 +5555,37 @@ msgid "" "when calling `/profiler save [format]` without format." 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 "" "The file path relative to your world path in which profiles will be saved to." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "" #: src/settings_translation_file.cpp -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" #: src/settings_translation_file.cpp @@ -5481,6 +5596,12 @@ msgid "" "Default is 1.0 (1/2 node)." 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 "The network interface that the server listens on." msgstr "" @@ -5507,7 +5628,7 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" #: src/settings_translation_file.cpp @@ -5564,6 +5685,10 @@ msgstr "" msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "" +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -5611,11 +5736,11 @@ msgid "Touchscreen sensitivity multiplier." msgstr "" #: src/settings_translation_file.cpp -msgid "Touchscreen threshold" +msgid "Tradeoffs for performance" msgstr "" #: src/settings_translation_file.cpp -msgid "Tradeoffs for performance" +msgid "Translucent liquids" msgstr "" #: src/settings_translation_file.cpp @@ -5653,7 +5778,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 "" #: src/settings_translation_file.cpp @@ -5751,10 +5878,6 @@ msgstr "" msgid "User Interfaces" msgstr "" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "" @@ -5841,12 +5964,24 @@ msgstr "" msgid "Volume" msgstr "" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +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 "Volumetric lighting" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6097,5 +6232,8 @@ msgstr "" #~ msgid "You died." #~ msgstr "Umro/la si." +#~ msgid "You have no games installed." +#~ msgstr "Nema instaliranih igara." + #~ msgid "needs_fallback_font" #~ msgstr "no" diff --git a/po/sv/minetest.po b/po/sv/minetest.po index bbde33475..58ecd1e72 100644 --- a/po/sv/minetest.po +++ b/po/sv/minetest.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: Swedish (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" -"PO-Revision-Date: 2023-10-22 17:19+0000\n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" +"PO-Revision-Date: 2024-06-08 08:09+0000\n" "Last-Translator: ROllerozxa \n" "Language-Team: Swedish \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\n" +"X-Generator: Weblate 5.6-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -71,7 +71,8 @@ msgid "Command not available: " msgstr "Kommando inte tillgängligt: " #: builtin/common/chatcommands.lua -msgid "Get help for commands" +#, fuzzy +msgid "Get help for commands (-t: output in chat)" msgstr "Få hjälp med kommandon" #: builtin/common/chatcommands.lua @@ -82,13 +83,10 @@ msgstr "" "visa allt." #: builtin/common/chatcommands.lua -msgid "[all | ]" +#, fuzzy +msgid "[all | ] [-t]" msgstr "[all | ]" -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" -msgstr "OK" - #: builtin/fstk/ui.lua msgid "" msgstr "" @@ -105,6 +103,10 @@ msgstr "Ett fel uppstod:" msgid "Main menu" msgstr "Huvudmeny" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "OK" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Återanslut" @@ -133,19 +135,28 @@ msgstr "Vi stöder endast protokollversion $1." msgid "We support protocol versions between version $1 and $2." msgstr "Vi stöder protokollversioner mellan version $1 och $2." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "\"$1\" finns redan. Vill du skriva över den?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" +msgstr "Fel vid installation av \"$1\": $2" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." -msgstr "$1 och $2 beroende paket kommer installeras." +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download \"$1\"" +msgstr "Misslyckades att ladda ner \"$1\"" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" -msgstr "$1 till $2" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr "Misslyckades ladda ner $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "" +"Misslyckades med att extrahera \"$1\" (filtyp som inte stöds eller trasigt " +"arkiv)" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" @@ -153,159 +164,158 @@ msgstr "" "$1 laddas ner,\n" "$2 köad" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." msgstr "$1 laddas ner..." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "$1 nödvändiga beroenden kunde inte hittas." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "$1 kommer att installeras och $2 beroenden hoppas över." - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "Alla paket" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "Redan installerad" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "Tillbaka till huvudmeny" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "ContentDB är inte tillgänglig när Minetest är kompilerad utan cURL" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "Laddar ner..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "Spel" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +msgstr "Installera" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp +msgid "Loading..." +msgstr "Laddar..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Mods" +msgstr "Moddar" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "Inga paket kunde hämtas" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "Inga resultat" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "Inga uppdateringar" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "Köad" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "Texturpaket" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#, fuzzy +msgid "The package $1 was not found." +msgstr "Paketet $1/$2 kunde inte hittas." + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "Avnstallera" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "Uppdatera" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "Uppdatera Alla [$1]" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "View more information in a web browser" +msgstr "Visa mer information i en webbläsare" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "You need to install a game before you can install a mod" +msgstr "Du behöver installera ett spel innan du kan installera en modd" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 and $2 dependencies will be installed." +msgstr "$1 och $2 beroende paket kommer installeras." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "$1 till $2" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "$1 nödvändiga beroenden kunde inte hittas." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "$1 kommer att installeras och $2 beroenden hoppas över." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "Redan installerad" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "Basspel:" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "Avbryt" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "ContentDB är inte tillgänglig när Minetest är kompilerad utan cURL" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "Beroenden:" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "Laddar ner..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "Fel vid installation av \"$1\": $2" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download \"$1\"" -msgstr "Misslyckades att ladda ner \"$1\"" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "Misslyckades ladda ner $1" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "" -"Misslyckades med att extrahera \"$1\" (filtyp som inte stöds eller trasigt " -"arkiv)" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "Spel" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "Installera" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "Installera $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "Installera saknade beroenden" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "Laddar..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "Moddar" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "Inga paket kunde hämtas" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "Inga resultat" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "Inga uppdateringar" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "Hittades inte" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "Skriv över" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "Var snäll se att basspelet är korrekt." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" -msgstr "Köad" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" +msgstr "\"$1\" finns redan. Vill du skriva över den?" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "Texturpaket" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "The package $1 was not found." -msgstr "Paketet $1/$2 kunde inte hittas." - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "Avnstallera" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "Uppdatera" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "Uppdatera Alla [$1]" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "Visa mer information i en webbläsare" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" -msgstr "Du behöver installera ett spel innan du kan installera en modd" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" +msgstr "Skriv över" #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" @@ -345,7 +355,7 @@ msgstr "(Ej nöjd)" #: builtin/mainmenu/dlg_config_world.lua msgid "Disable all" -msgstr "Avaktivera alla" +msgstr "Inaktivera allt" #: builtin/mainmenu/dlg_config_world.lua msgid "Disable modpack" @@ -453,10 +463,20 @@ msgstr "Skapa" msgid "Decorations" msgstr "Dekorationer" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." msgstr "Development Test är avsett för utvecklare." +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "Fängelsehålor" @@ -833,10 +853,6 @@ msgstr "" msgid "Back" msgstr "Tillbaka" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "Ändra Tangenter" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -846,7 +862,8 @@ msgstr "Chatta" msgid "Clear" msgstr "Rensa" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "Kontrollerar" @@ -1055,6 +1072,17 @@ msgstr "Installera ett spel" msgid "Install games from ContentDB" msgstr "Installera spel från ContentDB" +#: builtin/mainmenu/tab_local.lua +#, fuzzy +msgid "Minetest doesn't come with a game by default." +msgstr "Minetest Game är inte längre installerat som standard" + +#: builtin/mainmenu/tab_local.lua +msgid "" +"Minetest is a game-creation platform that allows you to play many different " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "Ny" @@ -1088,8 +1116,9 @@ msgid "Start Game" msgstr "Starta spel" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." -msgstr "Du har inga spel installerade." +#, fuzzy +msgid "You need to install a game before you can create a world." +msgstr "Du behöver installera ett spel innan du kan installera en modd" #: builtin/mainmenu/tab_online.lua msgid "Address" @@ -1168,18 +1197,10 @@ msgstr "Laddar texturer..." msgid "Rebuilding shaders..." msgstr "Rekonstruerar shaders..." -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "Anslutningsfel (tidsgräns nådd?)" - #: src/client/clientlauncher.cpp msgid "Could not find or load game: " msgstr "Kunde inte hitta eller ladda spel: " -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "Ogiltig spelspecifikation." - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "Huvudmeny" @@ -1204,7 +1225,11 @@ msgstr "Den angivna lösenordsfilen kunde inte öppnas: " msgid "Provided world path doesn't exist: " msgstr "Angiven världssökväg existerar inte: " -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "Media..." + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp msgid "" "\n" "Check debug.txt for details." @@ -1212,18 +1237,10 @@ msgstr "" "\n" "Se debug.txt för detaljer." -#: src/client/game.cpp -msgid "- Address: " -msgstr "- Bindningsadress: " - #: src/client/game.cpp msgid "- Mode: " msgstr "- Läge: " -#: src/client/game.cpp -msgid "- Port: " -msgstr "- Port: " - #: src/client/game.cpp msgid "- Public: " msgstr "Offentlig " @@ -1258,10 +1275,6 @@ msgstr "Automatiskt framåt aktiverat" msgid "Block bounds hidden" msgstr "Blockgränser dolda" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "Blockgränser visas för alla block" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "Blockgränser visas för det aktuella blocket" @@ -1306,6 +1319,10 @@ msgstr "Klientsidiga skriptar är inaktiverade" msgid "Connecting to server..." msgstr "Ansluter till server..." +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "Anslutningsfel (tidsgräns nådd?)" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "Anslutningen misslyckades av okänd anledning" @@ -1315,45 +1332,13 @@ msgid "Continue" msgstr "Fortsätt" #: src/client/game.cpp -#, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" -"Kontroller:\n" -"- %s: rör dig framåt\n" -"- %s: rör dig bakåt\n" -"- %s: rör dig åt vänster\n" -"- %s: rör dig åt höger\n" -"- %s: hoppa/klättra\n" -"- %s: gräv/slå/använd\n" -"- %s: placera/använd\n" -"- %s: smyg/rör dig nedåt\n" -"- %s: släpp föremål\n" -"- %s: förråd\n" -"- Mus: vänd/titta\n" -"- Mushjul: välj föremål\n" -"- %s: chatt\n" - -#: src/client/game.cpp +#, fuzzy msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1445,6 +1430,11 @@ msgstr "Dimma inaktiverad" msgid "Fog enabled" msgstr "Dimma aktiverat" +#: src/client/game.cpp +#, fuzzy +msgid "Fog enabled by game or mod" +msgstr "Zoom är för närvarande inaktiverad av spel eller modd" + #: src/client/game.cpp msgid "Game info:" msgstr "Spelinformation:" @@ -1465,10 +1455,6 @@ msgstr "Föremålsdefinitioner..." msgid "KiB/s" msgstr "KiB/s" -#: src/client/game.cpp -msgid "Media..." -msgstr "Media..." - #: src/client/game.cpp msgid "MiB/s" msgstr "MiB/s" @@ -1630,10 +1616,6 @@ msgstr "Wireframe visas" msgid "Zoom currently disabled by game or mod" msgstr "Zoom är för närvarande inaktiverad av spel eller modd" -#: src/client/game.cpp -msgid "ok" -msgstr "ok" - #: src/client/gameui.cpp msgid "Chat currently disabled by game or mod" msgstr "Chatt är för närvarande inaktiverad av spel eller modd" @@ -1966,6 +1948,15 @@ msgstr "Minimapp i ytläge, Zoom x%d" msgid "Minimap in texture mode" msgstr "Minimapp i texturläge" +#: src/client/shader.cpp +#, fuzzy, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "Misslyckades att öppna hemsida" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2069,7 +2060,7 @@ msgstr "Öka volym" #: src/gui/guiKeyChangeMenu.cpp msgid "Inventory" -msgstr "Förråd" +msgstr "Lagring" #: src/gui/guiKeyChangeMenu.cpp msgid "Jump" @@ -2159,6 +2150,19 @@ msgstr "Zoom" msgid "press key" msgstr "tryck på knapp" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +#, fuzzy +msgid "Unable to open URL" +msgstr "Misslyckades att öppna hemsida" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "Ändra" @@ -2192,6 +2196,7 @@ msgstr "Ljudvolym: %d%%" #. 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 "sv" @@ -2414,14 +2419,6 @@ msgstr "Aktivt avstånd för objektsändning" msgid "Adds particles when digging a node." msgstr "Lägger till partiklar när en nod grävs." -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" -"Justera dpi-konfigurationen för din skärm (endast icke X11/Android) t.ex. " -"för 4k-skärmar." - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2451,6 +2448,10 @@ msgstr "Administratörsnamn" msgid "Advanced" msgstr "Avancerat" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2510,6 +2511,17 @@ msgstr "Infoga objektnamn till verktygstips." msgid "Apple trees noise" msgstr "Äppelträdlojud" +#: 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 "Arm inertia" msgstr "Armtröghet" @@ -2527,18 +2539,41 @@ msgid "Ask to reconnect after crash" msgstr "Förfråga att återkoppla efter krash" #: src/settings_translation_file.cpp +#, fuzzy 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 will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +msgstr "" +"Vid detta avstånd kommer servern att aggressivt optimera vilka block som " +"skickas till\n" +"klienterna.\n" +"Små värden kan potentiellt förbättra prestandan avsevärt, på bekostnaden av " +"synliga\n" +"renderingsglitchar (vissa block kommer inte att renderas under vatten och i " +"grottor,\n" +"ibland även på land).\n" +"Sätts detta till ett värde större än max_block_send_distance inaktiveras " +"denna\n" +"optimering.\n" +"Angiven i mapblocks (16 noder)." + +#: src/settings_translation_file.cpp +#, fuzzy +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 "" "Vid detta avstånd kommer servern att aggressivt optimera vilka block som " "skickas till\n" @@ -2614,6 +2649,11 @@ msgstr "Biotoper" msgid "Biome noise" msgstr "Biotopoljud" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Block cull optimize distance" +msgstr "Distans för optimering av blockskickning" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "Distans för optimering av blockskickning" @@ -2832,6 +2872,12 @@ msgstr "Färgad dimma" msgid "Colored shadows" msgstr "Färgad dimma" +#: 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -2998,10 +3044,6 @@ msgstr "" "Hårkorsfärg (R,G,B).\n" "Styr även hårkorsets färg på objektet" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "DPI" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "Felsökningslogg storlekströskel" @@ -3057,6 +3099,24 @@ msgstr "" "Poisson-skiva\n" "men använder också mer resurser." +#: 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 " +"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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" +"Aktivera för att hindra gamla klienter från att ansluta.\n" +"Äldre klienter är kompatibla i och med att de inte krashar när de ansluter\n" +"till nya servrar, men de kanske inte stöder alla nya funktioner du förväntar " +"dig." + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "Definierar områden där träd har äpplen." @@ -3258,6 +3318,11 @@ msgstr "Aktivera bloom" msgid "Enable Bloom Debug" msgstr "Aktivera bloomavlusning" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Debanding" +msgstr "Aktivera skada" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3284,6 +3349,11 @@ msgstr "" "När aktiverad används Poisson-disk för att göra \"mjuka skuggor\". Annars " "används PCF-filtrering." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Post Processing" +msgstr "Aktivera joysticks" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "" @@ -3328,6 +3398,11 @@ msgstr "Aktivera modsäkerhet" 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 "Aktivera slumpmässig användarinmatning (används endast för testning)." + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "Aktivera slumpmässig användarinmatning (används endast för testning)." @@ -3357,6 +3432,11 @@ msgstr "" "till nya servrar, men de kanske inte stöder alla nya funktioner du förväntar " "dig." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable touchscreen" +msgstr "Pekskärm" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3369,14 +3449,6 @@ msgstr "" "texturer)\n" "när du ansluter till servern." -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" -"Aktivera vertexbuffertobjekt.\n" -"Detta bör avsevärt förbättra grafikprestandan." - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3415,6 +3487,19 @@ msgstr "Aktiverar animering av lagerföremål." msgid "Enables caching of facedir rotated meshes." msgstr "Aktiverar cachning av facedirroterade mesher." +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -3711,9 +3796,8 @@ msgid "Fullscreen mode." msgstr "Fullskärmsläge." #: src/settings_translation_file.cpp -#, fuzzy msgid "GUI" -msgstr "GUIs" +msgstr "GUI" #: src/settings_translation_file.cpp msgid "GUI scaling" @@ -4232,7 +4316,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Language" -msgstr "" +msgstr "Språk" #: src/settings_translation_file.cpp msgid "Large cave depth" @@ -4264,9 +4348,10 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" #: src/settings_translation_file.cpp @@ -4412,10 +4497,6 @@ msgid "" "Make fog and sky colors depend on daytime (dawn/sunset) and view direction." msgstr "" -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "" @@ -4464,7 +4545,9 @@ 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." +"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 @@ -4499,10 +4582,6 @@ msgstr "" msgid "Mapblock mesh generation threads" msgstr "" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "" @@ -4745,6 +4824,10 @@ msgstr "" msgid "Minimap scan height" msgstr "" +#: src/settings_translation_file.cpp +msgid "Minimum dig repetition interval" +msgstr "" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "" @@ -4813,6 +4896,11 @@ msgstr "" msgid "Mouse sensitivity multiplier." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Movement threshold" +msgstr "Grottröskel" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "" @@ -4922,10 +5010,6 @@ msgstr "" msgid "Occlusion Culling" msgstr "" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -4938,6 +5022,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "OpenGL debug" +msgstr "" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "" @@ -5047,6 +5135,15 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Protocol version minimum" +msgstr "Protokollversionen matchar inte. " + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -5062,6 +5159,10 @@ msgstr "" msgid "Random input" msgstr "" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "" @@ -5249,8 +5350,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5387,7 +5488,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" @@ -5420,6 +5521,10 @@ msgid "" "Bright colors will bleed over the neighboring objects." 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 "Set to true to enable waving leaves." msgstr "" @@ -5459,8 +5564,7 @@ msgstr "Shaders" msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" #: src/settings_translation_file.cpp @@ -5530,13 +5634,6 @@ msgid "" "recommended." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "" @@ -5572,7 +5669,7 @@ 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 Change Keys." +"cinematic mode by using the key set in Controls." msgstr "" #: src/settings_translation_file.cpp @@ -5593,6 +5690,16 @@ msgstr "" msgid "Soft shadow radius" msgstr "Radie för mjuk skugga" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sound" +msgstr "Ljudvolym avstängd" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sound Extensions Blacklist" +msgstr "ContentDB Flaggsvartlista" + #: src/settings_translation_file.cpp msgid "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -5749,17 +5856,37 @@ msgid "" "when calling `/profiler save [format]` without format." 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 "" "The file path relative to your world path in which profiles will be saved to." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "" #: src/settings_translation_file.cpp -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" #: src/settings_translation_file.cpp @@ -5770,6 +5897,12 @@ msgid "" "Default is 1.0 (1/2 node)." 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 "The network interface that the server listens on." msgstr "" @@ -5796,7 +5929,7 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" #: src/settings_translation_file.cpp @@ -5853,6 +5986,10 @@ msgstr "" msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "" +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -5899,14 +6036,15 @@ msgstr "Pekskärmskänslighet" msgid "Touchscreen sensitivity multiplier." msgstr "" -#: src/settings_translation_file.cpp -msgid "Touchscreen threshold" -msgstr "Tröskelvärde för pekskärm" - #: src/settings_translation_file.cpp msgid "Tradeoffs for performance" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Translucent liquids" +msgstr "Vajande vätskor" + #: src/settings_translation_file.cpp msgid "Transparency Sorting Distance" msgstr "" @@ -5942,7 +6080,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 "" #: src/settings_translation_file.cpp @@ -6043,10 +6183,6 @@ msgstr "" msgid "User Interfaces" msgstr "" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "" @@ -6133,12 +6269,26 @@ msgstr "" msgid "Volume" msgstr "" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +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 +#, fuzzy +msgid "Volume when unfocused" +msgstr "FPS när ofokuserad eller pausad" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volumetric lighting" +msgstr "Nodmarkering" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6378,12 +6528,18 @@ msgstr "cURL parallellgräns" #~ msgid "(game support required)" #~ msgstr "(kräver spelstöd)" +#~ msgid "- Address: " +#~ msgstr "- Bindningsadress: " + #~ msgid "- Creative Mode: " #~ msgstr "- Kreativt läge: " #~ msgid "- Damage: " #~ msgstr "- Aktivera skada: " +#~ msgid "- Port: " +#~ msgstr "- Port: " + #~ msgid "" #~ "0 = parallax occlusion with slope information (faster).\n" #~ "1 = relief mapping (slower, more accurate)." @@ -6422,6 +6578,13 @@ msgstr "cURL parallellgräns" #~ "Notera att adressen i fältet på huvudmenyn gör att denna inställning " #~ "ignoreras." +#~ msgid "" +#~ "Adjust dpi configuration to your screen (non X11/Android only) e.g. for " +#~ "4k screens." +#~ msgstr "" +#~ "Justera dpi-konfigurationen för din skärm (endast icke X11/Android) t.ex. " +#~ "för 4k-skärmar." + #~ msgid "" #~ "Adjust the gamma encoding for the light tables. Higher numbers are " #~ "brighter.\n" @@ -6471,6 +6634,9 @@ msgstr "cURL parallellgräns" #~ msgid "Bits per pixel (aka color depth) in fullscreen mode." #~ msgstr "Bits per pixel (dvs färgdjup) i fullskärmsläge." +#~ msgid "Block bounds shown for all blocks" +#~ msgstr "Blockgränser visas för alla block" + #~ msgid "Bump Mapping" #~ msgstr "Stötkartläggning" @@ -6492,6 +6658,9 @@ msgstr "cURL parallellgräns" #~ msgid "Camera update toggle key" #~ msgstr "Växeltagent för kamerauppdatering" +#~ msgid "Change Keys" +#~ msgstr "Ändra Tangenter" + #~ msgid "Change keys" #~ msgstr "Ändra tangenter" @@ -6555,6 +6724,38 @@ msgstr "cURL parallellgräns" #~ msgstr "" #~ "Kontrollerar bredd av tunnlar, mindre värden skapar bredare tunnlar." +#, c-format +#~ msgid "" +#~ "Controls:\n" +#~ "- %s: move forwards\n" +#~ "- %s: move backwards\n" +#~ "- %s: move left\n" +#~ "- %s: move right\n" +#~ "- %s: jump/climb up\n" +#~ "- %s: dig/punch/use\n" +#~ "- %s: place/use\n" +#~ "- %s: sneak/climb down\n" +#~ "- %s: drop item\n" +#~ "- %s: inventory\n" +#~ "- Mouse: turn/look\n" +#~ "- Mouse wheel: select item\n" +#~ "- %s: chat\n" +#~ msgstr "" +#~ "Kontroller:\n" +#~ "- %s: rör dig framåt\n" +#~ "- %s: rör dig bakåt\n" +#~ "- %s: rör dig åt vänster\n" +#~ "- %s: rör dig åt höger\n" +#~ "- %s: hoppa/klättra\n" +#~ "- %s: gräv/slå/använd\n" +#~ "- %s: placera/använd\n" +#~ "- %s: smyg/rör dig nedåt\n" +#~ "- %s: släpp föremål\n" +#~ "- %s: förråd\n" +#~ "- Mus: vänd/titta\n" +#~ "- Mushjul: välj föremål\n" +#~ "- %s: chatt\n" + #~ msgid "Creative" #~ msgstr "Kreativt" @@ -6564,6 +6765,9 @@ msgstr "cURL parallellgräns" #~ msgid "Crosshair color (R,G,B)." #~ msgstr "Hårkorsförg (R,G,B)." +#~ msgid "DPI" +#~ msgstr "DPI" + #~ msgid "Damage" #~ msgstr "Skada" @@ -6640,6 +6844,13 @@ msgstr "cURL parallellgräns" #~ msgid "Enable register confirmation" #~ msgstr "Aktivera registreringsbekräftelse" +#~ msgid "" +#~ "Enable vertex buffer objects.\n" +#~ "This should greatly improve graphics performance." +#~ msgstr "" +#~ "Aktivera vertexbuffertobjekt.\n" +#~ "Detta bör avsevärt förbättra grafikprestandan." + #~ msgid "Enabled" #~ msgstr "Aktiverad" @@ -6756,6 +6967,9 @@ msgstr "cURL parallellgräns" #~ msgid "Install: file: \"$1\"" #~ msgstr "Installera: fil: \"$1\"" +#~ msgid "Invalid gamespec." +#~ msgstr "Ogiltig spelspecifikation." + #~ msgid "" #~ "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" #~ msgstr "" @@ -6790,9 +7004,6 @@ msgstr "cURL parallellgräns" #~ msgid "No Mipmap" #~ msgstr "Ingen Mipmap" -#~ msgid "Node Highlighting" -#~ msgstr "Nodmarkering" - #~ msgid "Node Outlining" #~ msgstr "Nodkontur" @@ -6880,6 +7091,9 @@ 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" @@ -6940,8 +7154,14 @@ msgstr "cURL parallellgräns" #~ msgid "You died." #~ msgstr "Du dog." +#~ msgid "You have no games installed." +#~ msgstr "Du har inga spel installerade." + #~ msgid "Z" #~ msgstr "Z" #~ msgid "needs_fallback_font" #~ msgstr "no" + +#~ msgid "ok" +#~ msgstr "ok" diff --git a/po/sw/minetest.po b/po/sw/minetest.po index 88681384a..3b53f318f 100644 --- a/po/sw/minetest.po +++ b/po/sw/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Swahili (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: Swahili ]" -msgstr "" - -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" +msgid "[all | ] [-t]" msgstr "" #: builtin/fstk/ui.lua @@ -112,6 +108,10 @@ msgstr "Kosa limetokea:" msgid "Main menu" msgstr "Menyu kuu" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Unganisha upya" @@ -140,187 +140,194 @@ msgstr "Sisi tu mkono itifaki toleo la $1." msgid "We support protocol versions between version $1 and $2." msgstr "Tunaunga mkono matoleo ya itifaki kati ya toleo la $1 na $2." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." -msgstr "" +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "Failed to download \"$1\"" +msgstr "Imeshindwa kusakinisha $1 hadi $2" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" -msgstr "" +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "Failed to download $1" +msgstr "Imeshindwa kusakinisha $1 hadi $2" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "" +"\n" +"Sakinisha Moduli: filetype visivyotegemezwa \"$1\" au nyaraka kuvunjwa" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua #, fuzzy msgid "$1 downloading..." msgstr "Inapakia..." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Already installed" -msgstr "Muhimu tayari katika matumizi" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua #, fuzzy msgid "Back to Main Menu" msgstr "Menyu kuu" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#, fuzzy +msgid "Downloading..." +msgstr "Inapakia..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "Michezo" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +msgstr "Sakinisha" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp +msgid "Loading..." +msgstr "Inapakia..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Mods" +msgstr "Mods" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#, fuzzy +msgid "Texture packs" +msgstr "Texturepacks" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +#, fuzzy +msgid "Uninstall" +msgstr "Sakinisha" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "" + +#: 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 "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +#, fuzzy +msgid "Already installed" +msgstr "Muhimu tayari katika matumizi" + +#: builtin/mainmenu/content/dlg_install.lua #, fuzzy msgid "Base Game:" msgstr "Ficha mchezo" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "Katisha" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "Mategemezi:" -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Downloading..." -msgstr "Inapakia..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to download \"$1\"" -msgstr "Imeshindwa kusakinisha $1 hadi $2" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to download $1" -msgstr "Imeshindwa kusakinisha $1 hadi $2" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "" -"\n" -"Sakinisha Moduli: filetype visivyotegemezwa \"$1\" au nyaraka kuvunjwa" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "Michezo" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "Sakinisha" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #, fuzzy msgid "Install $1" msgstr "Sakinisha" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #, fuzzy msgid "Install missing dependencies" msgstr "Inaanzilisha fundo" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "Inapakia..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "Mods" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Texture packs" -msgstr "Texturepacks" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -#, fuzzy -msgid "Uninstall" -msgstr "Sakinisha" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" msgstr "" #: builtin/mainmenu/content/pkgmgr.lua @@ -489,11 +496,21 @@ msgstr "Kuunda" msgid "Decorations" msgstr "Instrumentation" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua #, fuzzy msgid "Development Test is meant for developers." msgstr "Tahadhari: Mtihani wa maendeleo ndogo ni maana kwa watengenezaji." +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua #, fuzzy msgid "Dungeons" @@ -877,10 +894,6 @@ msgstr "" msgid "Back" msgstr "Nyuma" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "Badilisha funguo" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -890,7 +903,8 @@ msgstr "Kuzungumza" msgid "Clear" msgstr "Wazi" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "Vidhibiti" @@ -1112,6 +1126,16 @@ msgstr "Sakinisha" msgid "Install games from ContentDB" msgstr "" +#: builtin/mainmenu/tab_local.lua +msgid "Minetest 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 " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "Mpya" @@ -1148,9 +1172,8 @@ msgid "Start Game" msgstr "Ficha mchezo" #: builtin/mainmenu/tab_local.lua -#, fuzzy -msgid "You have no games installed." -msgstr "Una subgames hakuna imewekwa." +msgid "You need to install a game before you can create a world." +msgstr "" #: builtin/mainmenu/tab_online.lua #, fuzzy @@ -1237,19 +1260,11 @@ msgstr "Kupakia unamu..." msgid "Rebuilding shaders..." msgstr "Kuijenga upya shaders..." -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "Kosa la muunganisho (wakati muafaka?)" - #: src/client/clientlauncher.cpp #, fuzzy msgid "Could not find or load game: " msgstr "Haikuweza kupata wala kupakia mchezo\"" -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "Gamespec batili." - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "Menyu kuu" @@ -1275,7 +1290,11 @@ msgstr "" msgid "Provided world path doesn't exist: " msgstr "Njia ya dunia iliyotolewa haipo:" -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "Vyombo vya habari..." + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp msgid "" "\n" "Check debug.txt for details." @@ -1283,20 +1302,10 @@ msgstr "" "\n" "Angalia debug.txt kwa maelezo." -#: src/client/game.cpp -#, fuzzy -msgid "- Address: " -msgstr "Kumfunga anwani" - #: src/client/game.cpp msgid "- Mode: " msgstr "" -#: src/client/game.cpp -#, fuzzy -msgid "- Port: " -msgstr "Bandari" - #: src/client/game.cpp #, fuzzy msgid "- Public: " @@ -1336,10 +1345,6 @@ msgstr "Ufunguo wa mbele" msgid "Block bounds hidden" msgstr "" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "" @@ -1389,6 +1394,10 @@ msgstr "" msgid "Connecting to server..." msgstr "Inaunganisha seva..." +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "Kosa la muunganisho (wakati muafaka?)" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "" @@ -1397,44 +1406,14 @@ msgstr "" msgid "Continue" msgstr "Kuendelea" -#: src/client/game.cpp -#, fuzzy, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" -"Vidhibiti vya chaguo-msingi:\n" -"-WASD: hoja\n" -"- nafasi: kuruka/kupanda\n" -"- Hamisha:taarifa/kwenda chini\n" -"- q: tone kipengee\n" -"- nikasema hesabu\n" -"- kipanya: kugeuka/kuangalia\n" -"- kipanya kushoto: kuchimba/punch\n" -"- kipanya kulia: mahali/matumizi\n" -"- kipanya gurudumu: Teua kipengee\n" -"- T: mazungumzo\n" - #: src/client/game.cpp #, fuzzy msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1531,6 +1510,10 @@ msgstr "Walemavu" msgid "Fog enabled" msgstr "kuwezeshwa" +#: src/client/game.cpp +msgid "Fog enabled by game or mod" +msgstr "" + #: src/client/game.cpp msgid "Game info:" msgstr "" @@ -1553,10 +1536,6 @@ msgstr "Fasili ya kipengele..." msgid "KiB/s" msgstr "Kibu/s" -#: src/client/game.cpp -msgid "Media..." -msgstr "Vyombo vya habari..." - #: src/client/game.cpp msgid "MiB/s" msgstr "MiB/s" @@ -1718,10 +1697,6 @@ msgstr "" msgid "Zoom currently disabled by game or mod" msgstr "" -#: src/client/game.cpp -msgid "ok" -msgstr "Sawa kabisa" - #: src/client/gameui.cpp msgid "Chat currently disabled by game or mod" msgstr "" @@ -2066,6 +2041,15 @@ msgstr "" msgid "Minimap in texture mode" msgstr "Unamu wa kima cha chini cha ukubwa wa Vichujio" +#: src/client/shader.cpp +#, fuzzy, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "Imeshindwa kusakinisha $1 hadi $2" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2270,6 +2254,19 @@ msgstr "Kuza" msgid "press key" msgstr "Bonyeza Kibonye" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +#, fuzzy +msgid "Unable to open URL" +msgstr "Imeshindwa kusakinisha $1 hadi $2" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "Mabadiliko" @@ -2304,6 +2301,7 @@ msgstr "Kiwango sauti:" #. 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 "sw" @@ -2512,14 +2510,6 @@ msgstr "Kiolwa amilifu Tuma masafa" msgid "Adds particles when digging a node." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" -"Rekebisha usakinishaji wa dpi kwenye kiwamba chako (yasiyo X11/Android tu) " -"mfano kwa 4 k skrini." - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2543,6 +2533,10 @@ msgstr "Jina la ulimwengu" msgid "Advanced" msgstr "Pevu" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2601,6 +2595,17 @@ msgstr "" msgid "Apple trees noise" 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 "Arm inertia" msgstr "" @@ -2622,12 +2627,21 @@ msgid "" "clients.\n" "Small values potentially improve performance a lot, at the expense of " "visible\n" -"rendering glitches (some blocks will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +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 @@ -2698,6 +2712,11 @@ msgstr "Kelele za mto" msgid "Biome noise" msgstr "Kelele za mto" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Block cull optimize distance" +msgstr "Umbo la Max Tuma umbali" + #: src/settings_translation_file.cpp #, fuzzy msgid "Block send optimize distance" @@ -2936,6 +2955,12 @@ msgstr "Ukungu wa rangi" msgid "Colored shadows" msgstr "Ukungu wa rangi" +#: 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -3079,10 +3104,6 @@ msgid "" "Also controls the object crosshair color" msgstr "" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "DPI" - #: src/settings_translation_file.cpp #, fuzzy msgid "Debug log file size threshold" @@ -3135,6 +3156,24 @@ msgid "" "but also uses more resources." 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 " +"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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" +"Wezesha Usiruhusu wateja wa zamani kutoka kuunganisha.\n" +"Wateja wakubwa ni patanifu katika maana ya kwamba wao si mapenzi ajali " +"wakati wa kuunganisha kwenye seva mpya, lakini inaweza kusaidia nduni zote " +"mpya ambayo ni kutarajia." + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "" @@ -3328,6 +3367,11 @@ msgstr "Wezesha yote" msgid "Enable Bloom Debug" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Debanding" +msgstr "Wezesha uharibifu" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3347,6 +3391,11 @@ msgid "" "filtering." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Post Processing" +msgstr "Wezesha vifimbocheza" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "" @@ -3391,6 +3440,11 @@ msgstr "Kuwezesha usalama Moduli" 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 "Wezesha ingizo la mtumiaji nasibu (kutumika tu kwa ajili ya kupima)." + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "Wezesha ingizo la mtumiaji nasibu (kutumika tu kwa ajili ya kupima)." @@ -3420,6 +3474,11 @@ msgstr "" "wakati wa kuunganisha kwenye seva mpya, lakini inaweza kusaidia nduni zote " "mpya ambayo ni kutarajia." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable touchscreen" +msgstr "Touchthreshold (px)" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3431,12 +3490,6 @@ msgstr "" "Seva ya mbali kutoa njia kwa kiasi kikubwa kasi ya kupakua midia (k.m unamu) " "wakati wa kuunganisha kwenye seva." -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3473,6 +3526,19 @@ msgstr "Huwezesha uhuishaji wa vitu inventering." msgid "Enables caching of facedir rotated meshes." msgstr "Huwezesha uwekaji kache kwa facedir Iliyozungushwa meshes." +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -4383,9 +4449,10 @@ msgstr "" #: src/settings_translation_file.cpp #, fuzzy msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" "Urefu wa alama ya tiki seva na nafasi ambayo vitu ni kwa ujumla kusasaishwa " "kwenye mtandao." @@ -4554,10 +4621,6 @@ msgstr "" "Kufanya rangi wa ukungu na anga hutegemea mchana (alfajiri/machweo) na " "kuonyesha mwelekeo." -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "" @@ -4619,7 +4682,9 @@ 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." +"the 'jungles' flag is ignored.\n" +"The 'temples' flag disables generation of desert temples. Normal dungeons " +"will appear instead." msgstr "" "Ramani kizazi sifa maalum ya Mwandishi ramani v6.\n" "Wakati snowbiomes vimewezeshwa misitu otomatiki imewezeshwa, bendera ya " @@ -4669,11 +4734,6 @@ msgstr "Kikomo cha kizazi cha ramani" msgid "Mapblock mesh generation threads" msgstr "Kikomo cha kizazi cha ramani" -#: src/settings_translation_file.cpp -#, fuzzy -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "Kikomo cha kizazi cha ramani" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "Mkatiko Muda Mapblock wakipakua" @@ -4949,6 +5009,11 @@ msgstr "" msgid "Minimap scan height" msgstr "Ramani tambazo urefu" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Minimum dig repetition interval" +msgstr "Bofya kulia marudio nafasi" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "" @@ -5023,6 +5088,11 @@ msgstr "Unyeti wa kipanya" msgid "Mouse sensitivity multiplier." msgstr "Mengi ya unyeti wa kipanya." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Movement threshold" +msgstr "Kilele cha mlima gorofa Mwandishi ramani" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "" @@ -5146,10 +5216,6 @@ msgstr "" msgid "Occlusion Culling" msgstr "" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -5162,6 +5228,11 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "OpenGL debug" +msgstr "Utatuaji wa Mwandishi ramani" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "" @@ -5277,6 +5348,15 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Protocol version minimum" +msgstr "Itifaki ya toleo haifanani." + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -5296,6 +5376,10 @@ msgstr "Huwafufua ardhi kufanya mabonde kuzunguka mito" msgid "Random input" msgstr "Ingizo la nasibu" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "" @@ -5506,8 +5590,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5649,8 +5733,9 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" "Seti lugha. Acha tupu kwa kutumia lugha ya mfumo.\n" @@ -5688,6 +5773,10 @@ msgid "" "Bright colors will bleed over the neighboring objects." 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 #, fuzzy msgid "Set to true to enable waving leaves." @@ -5738,8 +5827,7 @@ msgstr "Shaders" msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" "Shaders kuruhusu athari pevu onekana na inaweza kuongeza utendaji wa baadhi " "ya kadi ya video.\n" @@ -5818,13 +5906,6 @@ msgid "" "recommended." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "" @@ -5862,7 +5943,7 @@ msgstr "Taa laini" #, fuzzy msgid "" "Smooths rotation of camera when in cinematic mode, 0 to disable. Enter " -"cinematic mode by using the key set in Change Keys." +"cinematic mode by using the key set in Controls." msgstr "Smooths mzunguko wa kamera katika hali-tumizi cinematic. 0 kulemaza." #: src/settings_translation_file.cpp @@ -5886,6 +5967,14 @@ msgstr "" msgid "Soft shadow radius" msgstr "Fonti kivuli Alfa" +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "Sauti" + +#: src/settings_translation_file.cpp +msgid "Sound Extensions Blacklist" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -6064,6 +6153,12 @@ msgstr "" "Umbizo wa chaguo-msingi ambayo maumbo ni kuokoka, wakati wito '/ profiler\n" "Hifadhi [umbizo]' bila umbizo." +#: 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 #, fuzzy msgid "" @@ -6071,12 +6166,26 @@ msgid "" msgstr "" "Kijia cha faili jamaa yako worldpath ambayo maumbo utaakibishwa kwenye.\n" +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "" #: src/settings_translation_file.cpp -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" #: src/settings_translation_file.cpp @@ -6087,6 +6196,15 @@ msgid "" "Default is 1.0 (1/2 node)." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"The minimum time in seconds it takes between digging nodes when holding\n" +"the dig button." +msgstr "" +"Wakati katika sekunde inachukua kati ya vibonyezo mara kwa mara sahihi " +"wakati wa kufanya kitufe cha kulia." + #: src/settings_translation_file.cpp msgid "The network interface that the server listens on." msgstr "Interface mtandao kwamba seva husikiliza juu." @@ -6116,7 +6234,7 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" #: src/settings_translation_file.cpp @@ -6186,6 +6304,10 @@ msgstr "" msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "" +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -6243,15 +6365,15 @@ msgstr "Unyeti wa kipanya" msgid "Touchscreen sensitivity multiplier." msgstr "Mengi ya unyeti wa kipanya." -#: src/settings_translation_file.cpp -#, fuzzy -msgid "Touchscreen threshold" -msgstr "Touchthreshold (px)" - #: src/settings_translation_file.cpp msgid "Tradeoffs for performance" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Translucent liquids" +msgstr "Waving fundo" + #: src/settings_translation_file.cpp msgid "Transparency Sorting Distance" msgstr "" @@ -6290,7 +6412,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 "" #: src/settings_translation_file.cpp @@ -6392,10 +6516,6 @@ msgstr "" msgid "User Interfaces" msgstr "" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "VBO" - #: src/settings_translation_file.cpp #, fuzzy msgid "VSync" @@ -6492,6 +6612,10 @@ msgstr "" msgid "Volume" msgstr "Kiasi" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +msgstr "" + #: src/settings_translation_file.cpp #, fuzzy msgid "" @@ -6501,6 +6625,16 @@ msgstr "" "Huwezesha parallax occlusion uramanishi.\n" "Inahitaji shaders kwa kuwezeshwa." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volume when unfocused" +msgstr "Ramprogrammen juu wakati mchezo umesitishwa." + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volumetric lighting" +msgstr "Taa laini" + #: src/settings_translation_file.cpp #, fuzzy msgid "" @@ -6774,6 +6908,10 @@ msgstr "muda wa kuisha wa cURL" msgid "cURL parallel limit" msgstr "cURL kikomo sambamba" +#, fuzzy +#~ msgid "- Address: " +#~ msgstr "Kumfunga anwani" + #, fuzzy #~ msgid "- Creative Mode: " #~ msgstr "Hali ya ubunifu" @@ -6782,6 +6920,10 @@ msgstr "cURL kikomo sambamba" #~ msgid "- Damage: " #~ msgstr "Uharibifu" +#, fuzzy +#~ msgid "- Port: " +#~ msgstr "Bandari" + #~ msgid "" #~ "0 = parallax occlusion with slope information (faster).\n" #~ "1 = relief mapping (slower, more accurate)." @@ -6813,6 +6955,13 @@ msgstr "cURL kikomo sambamba" #~ "Acha hii wazi kuanzisha seva ya ndani.\n" #~ "Kumbuka kwamba uga wa anwani katika Menyu kuu Puuza kipimo hiki." +#~ msgid "" +#~ "Adjust dpi configuration to your screen (non X11/Android only) e.g. for " +#~ "4k screens." +#~ msgstr "" +#~ "Rekebisha usakinishaji wa dpi kwenye kiwamba chako (yasiyo X11/Android " +#~ "tu) mfano kwa 4 k skrini." + #, fuzzy #~ msgid "" #~ "Adjust the gamma encoding for the light tables. Higher numbers are " @@ -6863,6 +7012,9 @@ msgstr "cURL kikomo sambamba" #~ msgid "Camera update toggle key" #~ msgstr "Kibonye guro Usasishaji wa kamera" +#~ msgid "Change Keys" +#~ msgstr "Badilisha funguo" + #, fuzzy #~ msgid "Change keys" #~ msgstr "Badilisha funguo" @@ -6904,6 +7056,35 @@ msgstr "cURL kikomo sambamba" #~ msgstr "" #~ "Vidhibiti vya upana wa vichuguu, thamani ndogo huunda vichuguu pana." +#, fuzzy, c-format +#~ msgid "" +#~ "Controls:\n" +#~ "- %s: move forwards\n" +#~ "- %s: move backwards\n" +#~ "- %s: move left\n" +#~ "- %s: move right\n" +#~ "- %s: jump/climb up\n" +#~ "- %s: dig/punch/use\n" +#~ "- %s: place/use\n" +#~ "- %s: sneak/climb down\n" +#~ "- %s: drop item\n" +#~ "- %s: inventory\n" +#~ "- Mouse: turn/look\n" +#~ "- Mouse wheel: select item\n" +#~ "- %s: chat\n" +#~ msgstr "" +#~ "Vidhibiti vya chaguo-msingi:\n" +#~ "-WASD: hoja\n" +#~ "- nafasi: kuruka/kupanda\n" +#~ "- Hamisha:taarifa/kwenda chini\n" +#~ "- q: tone kipengee\n" +#~ "- nikasema hesabu\n" +#~ "- kipanya: kugeuka/kuangalia\n" +#~ "- kipanya kushoto: kuchimba/punch\n" +#~ "- kipanya kulia: mahali/matumizi\n" +#~ "- kipanya gurudumu: Teua kipengee\n" +#~ "- T: mazungumzo\n" + #, fuzzy #~ msgid "Creative" #~ msgstr "Kuunda" @@ -6914,6 +7095,9 @@ msgstr "cURL kikomo sambamba" #~ msgid "Crosshair color (R,G,B)." #~ msgstr "Rangi ya crosshair (R, G, B)." +#~ msgid "DPI" +#~ msgstr "DPI" + #~ msgid "Damage" #~ msgstr "Uharibifu" @@ -7164,6 +7348,9 @@ msgstr "cURL kikomo sambamba" #~ msgid "Instrumentation" #~ msgstr "Instrumentation" +#~ msgid "Invalid gamespec." +#~ msgstr "Gamespec batili." + #~ msgid "Inventory key" #~ msgstr "Ufunguo wa hesabu" @@ -7903,6 +8090,10 @@ msgstr "cURL kikomo sambamba" #~ msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles." #~ msgstr "Hufanya DirectX kazi na LuaJIT. Lemaza ikiwa husababisha matatizo." +#, fuzzy +#~ msgid "Mapblock mesh generator's MapBlock cache size in MB" +#~ msgstr "Kikomo cha kizazi cha ramani" + #~ msgid "Menus" #~ msgstr "Menyu" @@ -8112,9 +8303,6 @@ msgstr "cURL kikomo sambamba" #~ msgid "Smooths rotation of camera. 0 to disable." #~ msgstr "Smooths mzunguko wa kamera. 0 kulemaza." -#~ msgid "Sound" -#~ msgstr "Sauti" - #, fuzzy #~ msgid "Special key" #~ msgstr "Zawadi muhimu" @@ -8172,6 +8360,10 @@ msgstr "cURL kikomo sambamba" #~ msgid "Touch threshold (px):" #~ msgstr "Touchthreshold (px)" +#, fuzzy +#~ msgid "Touchscreen threshold" +#~ msgstr "Touchthreshold (px)" + #~ msgid "Trilinear Filter" #~ msgstr "Kichujio trilinear" @@ -8194,6 +8386,9 @@ msgstr "cURL kikomo sambamba" #~ msgid "Use bilinear filtering when scaling textures down." #~ msgstr "Tumia uchujaji bilinear wakati upimaji unamu." +#~ msgid "VBO" +#~ msgstr "VBO" + #~ msgid "Vertical screen synchronization." #~ msgstr "Ulandanishi wa kiwamba wima." @@ -8242,5 +8437,12 @@ msgstr "cURL kikomo sambamba" #~ msgid "You died." #~ msgstr "Umekufa." +#, fuzzy +#~ msgid "You have no games installed." +#~ msgstr "Una subgames hakuna imewekwa." + #~ msgid "needs_fallback_font" #~ msgstr "no" + +#~ msgid "ok" +#~ msgstr "Sawa kabisa" diff --git a/po/th/minetest.po b/po/th/minetest.po index 913c5eaa5..ff44d072f 100644 --- a/po/th/minetest.po +++ b/po/th/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Thai (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" "PO-Revision-Date: 2022-03-18 01:05+0000\n" "Last-Translator: Thomas Wiegand \n" "Language-Team: Thai ' เพื่อรับข้อมูลเพิ่มเติม หรือใช้ '.help all' เพื่อแสดงรายการคำสั่งทั้งหมด" #: builtin/common/chatcommands.lua -msgid "[all | ]" +#, fuzzy +msgid "[all | ] [-t]" msgstr "[ทั้งหมด | ]" -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" -msgstr "ตกลง" - #: builtin/fstk/ui.lua msgid "" msgstr "<ไม่มี>" @@ -104,6 +102,10 @@ msgstr "เกิดข้อผิดพลาดขึ้น:" msgid "Main menu" msgstr "เมนูหลัก" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "ตกลง" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "เชื่อมต่อใหม่" @@ -132,19 +134,27 @@ msgstr "เราสนับสนุนโพรโทคอลเวอร์ msgid "We support protocol versions between version $1 and $2." msgstr "เราสนับสนุนโพรโทคอลระหว่างเวอร์ชัน $1 และ $2" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "มี \"$1\" อยู่แล้ว คุณต้องการเขียนทับหรือไม่ ?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" +msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." -msgstr "การอ้างอิง $1 และ $2 จะถูกติดตั้ง." +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "Failed to download \"$1\"" +msgstr "ไม่สามารถดาวน์โหลด $1" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" -msgstr "$1 โดย $2" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr "ไม่สามารถดาวน์โหลด $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "ติดตั้ง: ประเภทไฟล์ที่ไม่รองรับหรือไฟล์เก็บถาวรที่ใช้งานไม่ได้" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" @@ -152,158 +162,157 @@ msgstr "" "$1 กำลังดาวน์โหลด,\n" "$2 เข้าคิว" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." msgstr "$1 โหลด ..." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "$1 ไม่พบการพึ่งพาที่จำเป็น." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "$1 จะถูกติดตั้ง และการขึ้นต่อกัน $2 จะถูกข้ามไป." - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "แพคเกจทั้งหมด" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "ติดตั้งแล้ว" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "กลับไปยังเมนูหลัก" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "ContentDB ไม่พร้อมใช้งานเมื่อรวบรวม Minetest โดยไม่มี cURL" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "โหลด ..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "เกม" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +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 "Mods" +msgstr "ม็อด" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "ไม่สามารถเรียกแพคเกจได้" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "ไม่มีผลลัพธ์" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "ไม่มีการปรับปรุง" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "เข้าคิว" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "เทกซ์เจอร์แพ็ค" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "ถอนการติดตั้ง" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "อัปเดต" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "อัปเดต All [$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 และ $2 จะถูกติดตั้ง." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "$1 โดย $2" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "$1 ไม่พบการพึ่งพาที่จำเป็น." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "$1 จะถูกติดตั้ง และการขึ้นต่อกัน $2 จะถูกข้ามไป." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "ติดตั้งแล้ว" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "เกมพื้นฐาน:" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "ยกเลิก" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "ContentDB ไม่พร้อมใช้งานเมื่อรวบรวม Minetest โดยไม่มี cURL" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "ไฟล์อ้างอิง:" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "โหลด ..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to download \"$1\"" -msgstr "ไม่สามารถดาวน์โหลด $1" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "ไม่สามารถดาวน์โหลด $1" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "ติดตั้ง: ประเภทไฟล์ที่ไม่รองรับหรือไฟล์เก็บถาวรที่ใช้งานไม่ได้" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "เกม" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "ติดตั้ง" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "ติดตั้ง $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "ไฟล์อ้างอิงที่เลือกใช้ได้" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "กำลังโหลด..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "ม็อด" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "ไม่สามารถเรียกแพคเกจได้" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "ไม่มีผลลัพธ์" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "ไม่มีการปรับปรุง" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "ไม่พบ" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "เขียนทับ" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "โปรดตรวจสอบว่าเกมหลักถูกต้อง." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" -msgstr "เข้าคิว" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" +msgstr "มี \"$1\" อยู่แล้ว คุณต้องการเขียนทับหรือไม่ ?" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "เทกซ์เจอร์แพ็ค" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "ถอนการติดตั้ง" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "อัปเดต" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "อัปเดต All [$1]" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "ดูข้อมูลเพิ่มเติมในเว็บเบราว์เซอร์" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" -msgstr "" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" +msgstr "เขียนทับ" #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" @@ -454,11 +463,21 @@ msgstr "สร้าง" msgid "Decorations" msgstr "ของตกแต่ง" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua #, fuzzy msgid "Development Test is meant for developers." msgstr "คำเตือน: การทดสอบพัฒนาน้อยที่สุดมีความหมายสำหรับนักพัฒนา." +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "ดันเจี้ยน" @@ -826,10 +845,6 @@ msgstr "" msgid "Back" msgstr "หลัง" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "เปลี่ยนคีย์" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -839,7 +854,8 @@ msgstr "แช" msgid "Clear" msgstr "ล้าง" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "ควบคุม" @@ -1055,6 +1071,16 @@ msgstr "ติดตั้ง $1" msgid "Install games from ContentDB" msgstr "ติดตั้งเกมจาก ContentDB" +#: builtin/mainmenu/tab_local.lua +msgid "Minetest 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 " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "ใหม่" @@ -1088,8 +1114,8 @@ msgid "Start Game" msgstr "เริ่มเกม" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." -msgstr "คุณไม่มีเกมที่ติดตั้ง" +msgid "You need to install a game before you can create a world." +msgstr "" #: builtin/mainmenu/tab_online.lua msgid "Address" @@ -1170,18 +1196,10 @@ msgstr "โหลดพื้นผิว..." msgid "Rebuilding shaders..." msgstr "บูรณะ shaders..." -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "ข้อผิดพลาดการเชื่อมต่อ (หมดเวลา?)" - #: src/client/clientlauncher.cpp msgid "Could not find or load game: " msgstr "ไม่พบหรือโหลดเกม: " -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "ข้อมูลจำเพาะเกี่ยวกับเกม ไม่ถูกต้อง." - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "เมนูหลัก" @@ -1206,7 +1224,11 @@ msgstr "รหัสผ่านให้ไฟล์ไม่สามารถ msgid "Provided world path doesn't exist: " msgstr "โลกมีเส้นไม่มี: " -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "สื่อ..." + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp msgid "" "\n" "Check debug.txt for details." @@ -1214,18 +1236,10 @@ msgstr "" "\n" "ตรวจสอบรายละเอียด debug.txt." -#: src/client/game.cpp -msgid "- Address: " -msgstr "-ที่อยู่: " - #: src/client/game.cpp msgid "- Mode: " msgstr "-โหมด: " -#: src/client/game.cpp -msgid "- Port: " -msgstr "-พอร์ต: " - #: src/client/game.cpp msgid "- Public: " msgstr "-ประชาชน: " @@ -1260,10 +1274,6 @@ msgstr "เปิดใช้งานการส่งต่ออัตโน msgid "Block bounds hidden" msgstr "บล็อกขอบเขตที่ซ่อนอยู่" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "แสดงขอบเขตบล็อกสำหรับบล็อกทั้งหมด" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "ขอบเขตบล็อกที่แสดงสำหรับบล็อกปัจจุบัน" @@ -1309,6 +1319,10 @@ msgstr "การเขียนสคริปต์ฝั่งไคลเอ msgid "Connecting to server..." msgstr "เชื่อมต่อกับเซิร์ฟเวอร์" +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "ข้อผิดพลาดการเชื่อมต่อ (หมดเวลา?)" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "การเชื่อมต่อล้มเหลวโดยไม่ทราบสาเหตุ" @@ -1317,47 +1331,14 @@ msgstr "การเชื่อมต่อล้มเหลวโดยไม msgid "Continue" msgstr "ต่อ" -#: src/client/game.cpp -#, fuzzy, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" -"การควบคุม:\n" -"- %s: เคลื่อนที่ไปข้างหน้า\n" -"- %s: เคลื่อนที่ไปข้างหลัง\n" -"- %s: เคลื่อนที่ไปทางซ้าย\n" -"- %s: เคลื่อนที่ไปทางขวา\n" -"- %s: กระโดด/ปีนขึ้น\n" -"- %s: ขุด/ชก\n" -"- %s: วาง/ใช้\n" -"- %s: ช่องเก็บของ\n" -"- %s: เมาส์: หัน/มอง\n" -"- %s: เมาส์ซ้าย: ขุด/ชก\n" -"- เมาส์ขวา: วาง/ใช้\n" -"- ลูกกลิ้งเมาส์: เลือกไอเทม\n" -"- %s: เปิดช่องแชท\n" - #: src/client/game.cpp #, fuzzy msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1449,6 +1430,11 @@ msgstr "หมอกปิดการใช้งาน" msgid "Fog enabled" msgstr "หมอกเปิดใช้งาน" +#: src/client/game.cpp +#, fuzzy +msgid "Fog enabled by game or mod" +msgstr "ซูมถูกปิดใช้งานในปัจจุบันโดยเกมหรือตัวดัดแปลง" + #: src/client/game.cpp msgid "Game info:" msgstr "ข้อมูลเกม:" @@ -1469,10 +1455,6 @@ msgstr "ข้อกำหนดของสินค้า..." msgid "KiB/s" msgstr "KiB/s" -#: src/client/game.cpp -msgid "Media..." -msgstr "สื่อ..." - #: src/client/game.cpp msgid "MiB/s" msgstr "MiB/s" @@ -1630,10 +1612,6 @@ msgstr "แสดงโครงลวด" msgid "Zoom currently disabled by game or mod" msgstr "ซูมถูกปิดใช้งานในปัจจุบันโดยเกมหรือตัวดัดแปลง" -#: src/client/game.cpp -msgid "ok" -msgstr "ตกลง" - #: src/client/gameui.cpp #, fuzzy msgid "Chat currently disabled by game or mod" @@ -1968,6 +1946,15 @@ msgstr "แผนที่ย่อในโหมด surface, ซูม x%d" msgid "Minimap in texture mode" msgstr "แผนที่ย่อในโหมดพื้นผิว" +#: src/client/shader.cpp +#, fuzzy, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "ไม่สามารถเปิดหน้าเว็บ" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2158,6 +2145,19 @@ msgstr "ซูม" msgid "press key" msgstr "กดปุ่ม" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +#, fuzzy +msgid "Unable to open URL" +msgstr "ไม่สามารถเปิดหน้าเว็บ" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "เปลี่ยน" @@ -2191,6 +2191,7 @@ msgstr "ระดับเสียง: %d%%" #. 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 "th" @@ -2412,14 +2413,6 @@ msgstr "ช่วงการส่งวัตถุที่ใช้งาน msgid "Adds particles when digging a node." msgstr "เพิ่มอนุภาคเมื่อขุดโหนด." -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" -"ปรับการกำหนดค่า dpi ให้กับหน้าจอของคุณ (ไม่ใช่ X11 / Android เท่านั้น) เช่น สำหรับหน้าจอ " -"4k." - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "ปรับความหนาแน่นของการแสดงผลที่ตรวจพบ ซึ่งใช้สำหรับปรับขนาดองค์ประกอบ UI" @@ -2448,6 +2441,10 @@ msgstr "ผนวกชื่อรายการ" msgid "Advanced" msgstr "สูง" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2509,6 +2506,17 @@ msgstr "ต่อท้ายชื่อรายการในคำแนะ msgid "Apple trees noise" 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 "Arm inertia" msgstr "แขนเฉื่อย" @@ -2526,18 +2534,37 @@ msgid "Ask to reconnect after crash" msgstr "ขอให้เชื่อมต่ออีกครั้งหลังจากเกิดข้อผิดพลาด" #: src/settings_translation_file.cpp +#, fuzzy 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 will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +msgstr "" +"ในระยะนี้เซิร์ฟเวอร์จะปรับให้เหมาะสมที่สุดว่าจะส่งบล็อกใดบ้าง\n" +"ลูกค้า.\n" +"ค่าเล็กน้อยอาจช่วยปรับปรุงประสิทธิภาพได้มาก โดยที่ค่าใช้จ่ายที่มองเห็นได้\n" +"ข้อผิดพลาดในการแสดงผล (บางช่วงจะไม่แสดงใต้น้ำและในถ้ำ\n" +"และบางครั้งบนบก).\n" +"การตั้งค่านี้เป็นค่าที่มากกว่า max_block_send_distance ปิดการใช้งานนี้\n" +"การเพิ่มประสิทธิภาพ.\n" +"ระบุไว้ใน mapblocks (16 โหนด)." + +#: src/settings_translation_file.cpp +#, fuzzy +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 "" "ในระยะนี้เซิร์ฟเวอร์จะปรับให้เหมาะสมที่สุดว่าจะส่งบล็อกใดบ้าง\n" "ลูกค้า.\n" @@ -2610,6 +2637,11 @@ msgstr "ไบโอมส์" msgid "Biome noise" msgstr "เสียงไบโอม" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Block cull optimize distance" +msgstr "บล็อกส่งระยะทางเพิ่มประสิทธิภาพ" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "บล็อกส่งระยะทางเพิ่มประสิทธิภาพ" @@ -2829,6 +2861,12 @@ msgstr "หมอกสี" msgid "Colored shadows" 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -2990,10 +3028,6 @@ msgstr "" "สีเป้า (R,G,B).\n" "ยังควบคุมสีเป้าเล็งของวัตถุ" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "DPI" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "เกณฑ์ขนาดไฟล์บันทึกการดีบัก" @@ -3047,6 +3081,23 @@ msgstr "" "สิ่งนี้จำลองเอฟเฟกต์เงาอ่อนโดยใช้ PCF หรือดิสก์ปัวซอง\n" "แต่ยังใช้ทรัพยากรมากขึ้น" +#: 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 " +"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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" +"เปิดใช้งานเพื่อไม่อนุญาตให้ลูกค้าเก่าเชื่อมต่อ.\n" +"ลูกค้าที่เก่ากว่าเข้ากันได้ในแง่ที่ว่าพวกเขาจะไม่ผิดพลาดเมื่อเชื่อมต่อ.\n" +"ไปยังเซิร์ฟเวอร์ใหม่ แต่อาจไม่รองรับคุณสมบัติใหม่ทั้งหมดที่คุณคาดหวัง." + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "กำหนดพื้นที่ที่ต้นไม้มีแอปเปิ้ล." @@ -3237,6 +3288,11 @@ msgstr "เปิดใช้งานทั้งหมด" msgid "Enable Bloom Debug" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Debanding" +msgstr "เปิดใช้งานความเสียหาย" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3262,6 +3318,11 @@ msgstr "" "เปิดใช้งานการกรองดิสก์ปัวซอง.\n" "บนทรูใช้ดิสก์ปัวซองเพื่อสร้าง \"เงาอ่อน\" มิฉะนั้นจะใช้การกรอง PCF." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Post Processing" +msgstr "เปิดใช้งานจอยสติ๊ก" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "" @@ -3306,6 +3367,11 @@ msgstr "เปิดใช้งานการรักษาความปล 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 "เปิดใช้งานการป้อนข้อมูลผู้ใช้แบบสุ่ม (ใช้สำหรับการทดสอบเท่านั้น)." + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "เปิดใช้งานการป้อนข้อมูลผู้ใช้แบบสุ่ม (ใช้สำหรับการทดสอบเท่านั้น)." @@ -3334,6 +3400,11 @@ msgstr "" "ลูกค้าที่เก่ากว่าเข้ากันได้ในแง่ที่ว่าพวกเขาจะไม่ผิดพลาดเมื่อเชื่อมต่อ.\n" "ไปยังเซิร์ฟเวอร์ใหม่ แต่อาจไม่รองรับคุณสมบัติใหม่ทั้งหมดที่คุณคาดหวัง." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable touchscreen" +msgstr "ขีด จำกัด หน้าจอสัมผัส" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3345,14 +3416,6 @@ msgstr "" "เซิร์ฟเวอร์ระยะไกลนำเสนอวิธีดาวน์โหลดสื่อที่รวดเร็วยิ่งขึ้น (เช่นพื้นผิว)\n" "เมื่อเชื่อมต่อกับเซิร์ฟเวอร์" -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" -"เปิดใช้งานวัตถุบัฟเฟอร์จุดยอด.\n" -"สิ่งนี้ควรปรับปรุงประสิทธิภาพกราฟิกอย่างมาก." - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3391,6 +3454,19 @@ msgstr "เปิดใช้งานภาพเคลื่อนไหวข msgid "Enables caching of facedir rotated meshes." msgstr "เปิดใช้งานการแคชของตาข่ายที่หมุนได้." +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -4310,9 +4386,10 @@ msgstr "" #: src/settings_translation_file.cpp #, fuzzy msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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" "เครือข่าย" @@ -4486,10 +4563,6 @@ msgid "" msgstr "" "ทำให้หมอกและสีของท้องฟ้าขึ้นอยู่กับเวลากลางวัน (รุ่งอรุณ / พระอาทิตย์ตก) และทิศทางการดู." -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "ทำให้ของเหลวทั้งหมดขุ่น" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "ระดับการบีบอัดแผนที่สำหรับการจัดเก็บดิสก์" @@ -4545,11 +4618,14 @@ msgid "Map generation attributes specific to Mapgen v5." msgstr "แอตทริบิวต์การสร้างแผนที่เฉพาะสำหรับ Mapgen 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" "When the 'snowbiomes' flag is enabled jungles are automatically enabled and\n" -"the 'jungles' flag is ignored." +"the 'jungles' flag is ignored.\n" +"The 'temples' flag disables generation of desert temples. Normal dungeons " +"will appear instead." msgstr "" "แอตทริบิวต์การสร้างแผนที่เฉพาะสำหรับ Mapgen v6.\n" "ธง 'สโนว์ไบโอม' เปิดใช้งาน 5 ระบบไบโอมใหม่.\n" @@ -4593,10 +4669,6 @@ msgstr "การสร้างตาข่าย Mapblock ล่าช้า" msgid "Mapblock mesh generation threads" msgstr "การสร้างตาข่าย Mapblock ล่าช้า" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "ขนาดแคช MapBlock ของตัวสร้างตาข่าย Mapblock เป็น MB" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "Mapblock ยกเลิกการโหลดหมดเวลา" @@ -4862,6 +4934,11 @@ msgstr "ระดับการบันทึกขั้นต่ำที่ msgid "Minimap scan height" msgstr "ความสูงการสแกนแผนที่ขั้นต่ำ" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Minimum dig repetition interval" +msgstr "กระแทกซ้ำช่วง" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "ขีดจำกัดขั้นต่ำของการสุ่มจำนวนถ้ำขนาดใหญ่ต่อ mapchunk." @@ -4932,6 +5009,11 @@ msgstr "ความไวของเมาส์" msgid "Mouse sensitivity multiplier." msgstr "คูณความไวเมาส์." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Movement threshold" +msgstr "ธรณีประตูถ้ำ" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "เสียงโคลน" @@ -5068,10 +5150,6 @@ msgstr "" msgid "Occlusion Culling" msgstr "การคัดแยกการบดเคี้ยวทางฝั่งเซิร์ฟเวอร์" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "ของเหลวทึบแสง" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -5086,6 +5164,11 @@ msgstr "" "เปิดเมนูหยุดชั่วคราวเมื่อโฟกัสของหน้าต่างหายไป ไม่หยุดถ้า formspec เป็น\n" "เปิด." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "OpenGL debug" +msgstr "ดีบัก Mapgen" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "ตัวเลือกการแทนที่สำหรับสีของเว็บลิงค์แชท." @@ -5212,6 +5295,15 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "สัดส่วนของถ้ำขนาดใหญ่ที่มีของเหลว." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Protocol version minimum" +msgstr "เวอร์ชันโปรโทคอลไม่ตรงกัน " + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -5229,6 +5321,10 @@ msgstr "ยกระดับภูมิประเทศให้เป็น msgid "Random input" msgstr "อินพุตสุ่ม" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "ข้อความแชทล่าสุด" @@ -5439,8 +5535,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5586,8 +5682,9 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" "ตั้งค่าภาษา เว้นว่างไว้เพื่อใช้ภาษาของระบบ.\n" @@ -5633,6 +5730,10 @@ msgid "" "Bright colors will bleed over the neighboring objects." 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 #, fuzzy msgid "Set to true to enable waving leaves." @@ -5681,11 +5782,11 @@ msgid "Shaders" msgstr "เฉดสี" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" "Shaders อนุญาตเอฟเฟกต์ภาพขั้นสูงและอาจเพิ่มประสิทธิภาพในวิดีโอบางรายการ\n" "บัตร\n" @@ -5768,16 +5869,6 @@ msgstr "" "การเปลี่ยนแปลงค่านี้มีไว้เพื่อการใช้งานพิเศษ ไม่เปลี่ยนแปลงคือ\n" "ที่แนะนำ.." -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" -"ขนาดของแคช MapBlock ของตัวสร้างตาข่าย การเพิ่มความประสงค์นี้\n" -"เพิ่มแคชการเข้าชม% ลดการคัดลอกข้อมูลจากหลัก\n" -"ด้ายจึงลดกระวนกระวายใจ" - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "วงโคจรของท้องฟ้าเอียง" @@ -5814,7 +5905,7 @@ msgstr "แสงที่ราบรื่น" #, fuzzy msgid "" "Smooths rotation of camera when in cinematic mode, 0 to disable. Enter " -"cinematic mode by using the key set in Change Keys." +"cinematic mode by using the key set in Controls." msgstr "มากการหมุนของกล้องในโหมดโรงภาพยนตร์ 0 เพื่อปิดใช้งาน." #: src/settings_translation_file.cpp @@ -5836,6 +5927,15 @@ msgstr "ความเร็วในการด้อม ในโหนด msgid "Soft shadow radius" msgstr "ตัวอักษรเงาอัลฟา" +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "เสียง" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sound Extensions Blacklist" +msgstr "ContentDB ตั้งค่าสถานะบัญชีดำ" + #: src/settings_translation_file.cpp msgid "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -6038,19 +6138,39 @@ msgstr "" "รูปแบบเริ่มต้นที่จะบันทึกโปรไฟล์,\n" "เมื่อเรียก `/profiler save [รูปแบบ]` โดยไม่มีรูปแบบ." +#: 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 #, fuzzy msgid "" "The file path relative to your world path in which profiles will be saved to." msgstr "เส้นทางของไฟล์ที่สัมพันธ์กับ worldpath ของคุณซึ่งโปรไฟล์จะถูกบันทึกไว้." +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "ตัวระบุของจอยสติ๊กที่จะใช้" #: src/settings_translation_file.cpp #, fuzzy -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "ความยาวเป็นพิกเซลที่ใช้ในการเริ่มทำงานบนหน้าจอสัมผัส." #: src/settings_translation_file.cpp @@ -6067,6 +6187,15 @@ msgstr "" "ค่าเริ่มต้นคือ 1.0 (1/2 โหนด).\n" "ต้องเปิดใช้งานโบกของเหลว." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"The minimum time in seconds it takes between digging nodes when holding\n" +"the dig button." +msgstr "" +"เวลาเป็นวินาทีที่ใช้ระหว่างตำแหน่งโหนดที่เกิดซ้ำเมื่อกดค้างไว้\n" +"ปุ่มสถานที่" + #: src/settings_translation_file.cpp msgid "The network interface that the server listens on." msgstr "อินเทอร์เฟซเครือข่ายที่เซิร์ฟเวอร์ฟัง." @@ -6101,7 +6230,7 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" "แบ็กเอนด์การเรนเดอร์.\n" "จำเป็นต้องรีสตาร์ทหลังจากเปลี่ยนแปลงสิ่งนี้.\n" @@ -6182,6 +6311,10 @@ msgstr "" msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "เสียง 2D จำนวน 3 จาก 4 เสียงที่ร่วมกันกำหนดความสูงของช่วงเนินเขา/ภูเขา." +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -6236,15 +6369,15 @@ msgstr "ความไวของเมาส์" msgid "Touchscreen sensitivity multiplier." msgstr "คูณความไวเมาส์." -#: src/settings_translation_file.cpp -#, fuzzy -msgid "Touchscreen threshold" -msgstr "ขีด จำกัด หน้าจอสัมผัส" - #: src/settings_translation_file.cpp msgid "Tradeoffs for performance" msgstr "การประนีประนอมเพื่อประสิทธิภาพ" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Translucent liquids" +msgstr "ของเหลวทึบแสง" + #: src/settings_translation_file.cpp msgid "Transparency Sorting Distance" msgstr "" @@ -6283,7 +6416,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 "" #: src/settings_translation_file.cpp @@ -6394,10 +6529,6 @@ msgstr "" msgid "User Interfaces" msgstr "" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "VBO" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "VSync / การซิงโครไนซ์แนวตั้ง" @@ -6488,6 +6619,10 @@ msgstr "จอยสติกเสมือนเรียกใช้ปุ่ msgid "Volume" msgstr "ปริมาณ" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Volume of all sounds.\n" @@ -6496,6 +6631,16 @@ msgstr "" "เปิดใช้งานการแมปการบดเคี้ยวของรัลแลกซ์.\n" "ต้องมี shaders เพื่อเปิดใช้งาน." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volume when unfocused" +msgstr "เฟรมต่อวินาที (FPS) สูงสุดเมื่อเกมหยุดชั่วคราว" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volumetric lighting" +msgstr "แสงที่ราบรื่น" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6777,12 +6922,18 @@ msgstr "cURL หมดเวลาโต้ตอบ" msgid "cURL parallel limit" msgstr "cURL ขีด จำกัด ขนาน" +#~ msgid "- Address: " +#~ msgstr "-ที่อยู่: " + #~ msgid "- Creative Mode: " #~ msgstr "-โหมดสร้างสรรค์: " #~ msgid "- Damage: " #~ msgstr "-ความเสียหาย: " +#~ msgid "- Port: " +#~ msgstr "-พอร์ต: " + #~ msgid "" #~ "0 = parallax occlusion with slope information (faster).\n" #~ "1 = relief mapping (slower, more accurate)." @@ -6817,6 +6968,13 @@ msgstr "cURL ขีด จำกัด ขนาน" #~ "เว้นว่างไว้เพื่อเริ่มเซิร์ฟเวอร์ภายใน\n" #~ "โปรดทราบว่าฟิลด์ที่อยู่ในเมนูหลักจะแทนที่การตั้งค่านี้" +#~ msgid "" +#~ "Adjust dpi configuration to your screen (non X11/Android only) e.g. for " +#~ "4k screens." +#~ msgstr "" +#~ "ปรับการกำหนดค่า dpi ให้กับหน้าจอของคุณ (ไม่ใช่ X11 / Android เท่านั้น) เช่น " +#~ "สำหรับหน้าจอ 4k." + #~ msgid "" #~ "Adjust the gamma encoding for the light tables. Higher numbers are " #~ "brighter.\n" @@ -6856,6 +7014,9 @@ msgstr "cURL ขีด จำกัด ขนาน" #~ msgid "Bits per pixel (aka color depth) in fullscreen mode." #~ msgstr "บิตต่อพิกเซล (ความลึกของสี aka) ในโหมดเต็มหน้าจอ." +#~ msgid "Block bounds shown for all blocks" +#~ msgstr "แสดงขอบเขตบล็อกสำหรับบล็อกทั้งหมด" + #~ msgid "Bump Mapping" #~ msgstr "การแม็ป ชน" @@ -6880,6 +7041,9 @@ msgstr "cURL ขีด จำกัด ขนาน" #~ msgid "Center of light curve mid-boost." #~ msgstr "กึ่งกลางของเส้นโค้งแสง - กลางเพิ่ม" +#~ msgid "Change Keys" +#~ msgstr "เปลี่ยนคีย์" + #, fuzzy #~ msgid "Change keys" #~ msgstr "เปลี่ยนคีย์" @@ -6927,6 +7091,38 @@ msgstr "cURL ขีด จำกัด ขนาน" #~ msgid "Controls sinking speed in liquid." #~ msgstr "ควบคุมความเร็วการจมในของเหลว." +#, fuzzy, c-format +#~ msgid "" +#~ "Controls:\n" +#~ "- %s: move forwards\n" +#~ "- %s: move backwards\n" +#~ "- %s: move left\n" +#~ "- %s: move right\n" +#~ "- %s: jump/climb up\n" +#~ "- %s: dig/punch/use\n" +#~ "- %s: place/use\n" +#~ "- %s: sneak/climb down\n" +#~ "- %s: drop item\n" +#~ "- %s: inventory\n" +#~ "- Mouse: turn/look\n" +#~ "- Mouse wheel: select item\n" +#~ "- %s: chat\n" +#~ msgstr "" +#~ "การควบคุม:\n" +#~ "- %s: เคลื่อนที่ไปข้างหน้า\n" +#~ "- %s: เคลื่อนที่ไปข้างหลัง\n" +#~ "- %s: เคลื่อนที่ไปทางซ้าย\n" +#~ "- %s: เคลื่อนที่ไปทางขวา\n" +#~ "- %s: กระโดด/ปีนขึ้น\n" +#~ "- %s: ขุด/ชก\n" +#~ "- %s: วาง/ใช้\n" +#~ "- %s: ช่องเก็บของ\n" +#~ "- %s: เมาส์: หัน/มอง\n" +#~ "- %s: เมาส์ซ้าย: ขุด/ชก\n" +#~ "- เมาส์ขวา: วาง/ใช้\n" +#~ "- ลูกกลิ้งเมาส์: เลือกไอเทม\n" +#~ "- %s: เปิดช่องแชท\n" + #~ msgid "Creative" #~ msgstr "ความคิดสร้างสรรค์" @@ -6936,6 +7132,9 @@ msgstr "cURL ขีด จำกัด ขนาน" #~ msgid "Crosshair color (R,G,B)." #~ msgstr "สีของครอสแฮร์ (R,G,B)." +#~ msgid "DPI" +#~ msgstr "DPI" + #~ msgid "Damage" #~ msgstr "ความเสียหาย" @@ -7008,6 +7207,13 @@ msgstr "cURL ขีด จำกัด ขนาน" #~ msgid "Enable register confirmation" #~ msgstr "เปิดใช้งานการยืนยันการลงทะเบียน" +#~ msgid "" +#~ "Enable vertex buffer objects.\n" +#~ "This should greatly improve graphics performance." +#~ msgstr "" +#~ "เปิดใช้งานวัตถุบัฟเฟอร์จุดยอด.\n" +#~ "สิ่งนี้ควรปรับปรุงประสิทธิภาพกราฟิกอย่างมาก." + #~ msgid "Enabled" #~ msgstr "เปิดใช้งานแล้ว" @@ -7294,6 +7500,9 @@ msgstr "cURL ขีด จำกัด ขนาน" #~ msgid "Instrumentation" #~ msgstr "เครื่องมือวัด" +#~ msgid "Invalid gamespec." +#~ msgstr "ข้อมูลจำเพาะเกี่ยวกับเกม ไม่ถูกต้อง." + #~ msgid "Inventory key" #~ msgstr "รหัสสินค้าคงคลัง" @@ -7971,6 +8180,12 @@ msgstr "cURL ขีด จำกัด ขนาน" #~ msgid "Main" #~ msgstr "หลัก" +#~ msgid "Makes all liquids opaque" +#~ msgstr "ทำให้ของเหลวทั้งหมดขุ่น" + +#~ msgid "Mapblock mesh generator's MapBlock cache size in MB" +#~ msgstr "ขนาดแคช MapBlock ของตัวสร้างตาข่าย Mapblock เป็น MB" + #~ msgid "Menus" #~ msgstr "เมนู" @@ -8188,15 +8403,21 @@ msgstr "cURL ขีด จำกัด ขนาน" #~ msgid "Simple Leaves" #~ msgstr "ใบเรียบง่าย" +#~ msgid "" +#~ "Size of the MapBlock cache of the mesh generator. Increasing this will\n" +#~ "increase the cache hit %, reducing the data being copied from the main\n" +#~ "thread, thus reducing jitter." +#~ msgstr "" +#~ "ขนาดของแคช MapBlock ของตัวสร้างตาข่าย การเพิ่มความประสงค์นี้\n" +#~ "เพิ่มแคชการเข้าชม% ลดการคัดลอกข้อมูลจากหลัก\n" +#~ "ด้ายจึงลดกระวนกระวายใจ" + #~ msgid "Smooth Lighting" #~ msgstr "โคมไฟเรียบ" #~ msgid "Smooths rotation of camera. 0 to disable." #~ msgstr "มากการหมุนของกล้อง 0 เพื่อปิดใช้งาน" -#~ msgid "Sound" -#~ msgstr "เสียง" - #~ msgid "Special" #~ msgstr "พิเศษ" @@ -8255,6 +8476,10 @@ msgstr "cURL ขีด จำกัด ขนาน" #~ msgid "Touch threshold (px):" #~ msgstr "ขีด จำกัด: (px)" +#, fuzzy +#~ msgid "Touchscreen threshold" +#~ msgstr "ขีด จำกัด หน้าจอสัมผัส" + #~ msgid "Trilinear Filter" #~ msgstr "กรอง trilinear" @@ -8292,6 +8517,9 @@ msgstr "cURL ขีด จำกัด ขนาน" #~ "หากตั้งค่าเป็น 0 MSAA จะถูกปิดใช้งาน.\n" #~ "จำเป็นต้องรีสตาร์ทหลังจากเปลี่ยนตัวเลือกนี้." +#~ msgid "VBO" +#~ msgstr "VBO" + #~ msgid "Vertical screen synchronization." #~ msgstr "การซิงโครไนซ์หน้าจอแนวตั้ง" @@ -8361,8 +8589,14 @@ msgstr "cURL ขีด จำกัด ขนาน" #~ msgid "You died." #~ msgstr "คุณตายแล้ว" +#~ msgid "You have no games installed." +#~ msgstr "คุณไม่มีเกมที่ติดตั้ง" + #~ msgid "Z" #~ msgstr "Z" #~ msgid "needs_fallback_font" #~ msgstr "yes" + +#~ msgid "ok" +#~ msgstr "ตกลง" diff --git a/po/tok/minetest.po b/po/tok/minetest.po new file mode 100644 index 000000000..5fa9991f0 --- /dev/null +++ b/po/tok/minetest.po @@ -0,0 +1,6196 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the minetest package. +# FIRST AUTHOR , YEAR. +# +msgid "" +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" +"Language-Team: Toki Pona \n" +"Language: tok\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.6-dev\n" + +#: builtin/client/chatcommands.lua +msgid "Clear the out chat queue" +msgstr "o weka e linja toki" + +#: builtin/client/chatcommands.lua +#, fuzzy +msgid "Empty command." +msgstr "toki lawa sina li weka." + +#: builtin/client/chatcommands.lua +msgid "Exit to main menu" +msgstr "o tawa" + +#: builtin/client/chatcommands.lua +msgid "Invalid command: " +msgstr "ni li toki lawa ala: " + +#: builtin/client/chatcommands.lua +msgid "Issued command: " +msgstr "" + +#: builtin/client/chatcommands.lua +msgid "List online players" +msgstr "o lukin e jan mute lon" + +#: builtin/client/chatcommands.lua +msgid "Online players: " +msgstr "jan mute lon " + +#: builtin/client/chatcommands.lua +msgid "The out chat queue is now empty." +msgstr "tenpo ni la linja toki li weka." + +#: builtin/client/chatcommands.lua +msgid "This command is disabled by server." +msgstr "ilo lawa li lawa e ni: toki lawa ni li ken ala." + +#: builtin/client/death_formspec.lua src/client/game.cpp +msgid "Respawn" +msgstr "o kama sin" + +#: builtin/client/death_formspec.lua src/client/game.cpp +msgid "You died" +msgstr "sina moli" + +#: builtin/common/chatcommands.lua +msgid "Available commands:" +msgstr "" + +#: builtin/common/chatcommands.lua +msgid "Available commands: " +msgstr "toki lawa mute ni li lon: " + +#: builtin/common/chatcommands.lua +msgid "Command not available: " +msgstr "" + +#: builtin/common/chatcommands.lua +msgid "Get help for commands (-t: output in chat)" +msgstr "" + +#: builtin/common/chatcommands.lua +msgid "" +"Use '.help ' to get more information, or '.help all' to list everything." +msgstr "" +"sina sona ala e toki lawa la o sitelen e ni: '.help '. anu la sina wile " +"sona e toki lawa ale la o sitelen e ni: '.help all'." + +#: builtin/common/chatcommands.lua +#, fuzzy +msgid "[all | ] [-t]" +msgstr "[all | ]" + +#: builtin/fstk/ui.lua +msgid "" +msgstr "" + +#: builtin/fstk/ui.lua +msgid "An error occurred in a Lua script:" +msgstr "" + +#: builtin/fstk/ui.lua +msgid "An error occurred:" +msgstr "" + +#: builtin/fstk/ui.lua +msgid "Main menu" +msgstr "" + +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "pona" + +#: builtin/fstk/ui.lua +msgid "Reconnect" +msgstr "" + +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch. " +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "Server enforces protocol version $1. " +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "Server supports protocol versions between $1 and $2. " +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "We only support protocol version $1." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "We support protocol versions between version $1 and $2." +msgstr "" + +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" +msgstr "" + +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download \"$1\"" +msgstr "" + +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr "" + +#: builtin/mainmenu/content/contentdb.lua +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "" +"$1 downloading,\n" +"$2 queued" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "$1 downloading..." +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "All packages" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Back to Main Menu" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "musi" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +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 "Mods" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "" + +#: 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 "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Base Game:" +msgstr "musi lawa:" + +#: 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 "" + +#: builtin/mainmenu/content/dlg_install.lua +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua +msgid "Dependencies:" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install $1" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install missing dependencies" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Not found" +msgstr "ala lon" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Please check that the base game is correct." +msgstr "" + +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" +msgstr "" + +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" +msgstr "" + +#: builtin/mainmenu/content/pkgmgr.lua +msgid "$1 (Enabled)" +msgstr "" + +#: builtin/mainmenu/content/pkgmgr.lua +msgid "$1 mods" +msgstr "" + +#: builtin/mainmenu/content/pkgmgr.lua +msgid "Failed to install $1 to $2" +msgstr "" + +#: builtin/mainmenu/content/pkgmgr.lua +msgid "Install: Unable to find suitable folder name for $1" +msgstr "" + +#: builtin/mainmenu/content/pkgmgr.lua +msgid "Unable to find a valid mod, modpack, or game" +msgstr "" + +#: builtin/mainmenu/content/pkgmgr.lua +msgid "Unable to install a $1 as a $2" +msgstr "" + +#: builtin/mainmenu/content/pkgmgr.lua +msgid "Unable to install a $1 as a texture pack" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "(Enabled, has error)" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "(Unsatisfied)" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Disable all" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Disable modpack" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable all" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable modpack" +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 "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Find More Mods" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "No (optional) dependencies" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "No game description provided." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "No hard dependencies" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "No modpack description provided." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "No optional dependencies" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua +msgid "Optional dependencies:" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +#: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua +#: src/gui/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" +msgstr "ma:" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "A world named \"$1\" already exists" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Additional terrain" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Altitude chill" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Altitude dry" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Biome blending" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Biomes" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Caverns" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Caves" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Decorations" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Development Test is meant for developers." +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Dungeons" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Flat terrain" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Floating landmasses in the sky" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Floatlands (experimental)" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Generate non-fractal terrain: Oceans and underground" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Hills" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Humid rivers" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Increases humidity around rivers" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Install another game" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Lakes" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Low humidity and high heat causes shallow or dry rivers" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen flags" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mapgen-specific flags" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mountains" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mud flow" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Network of tunnels and caves" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "No game selected" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Reduces heat with altitude" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Reduces humidity with altitude" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Rivers" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Sea level rivers" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua +msgid "Seed" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Smooth transition between biomes" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Structures appearing on the terrain (no effect on trees and jungle grass " +"created by v6)" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Structures appearing on the terrain, typically trees and plants" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert, Jungle" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert, Jungle, Tundra, Taiga" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Terrain surface erosion" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Trees and jungle grass" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Vary river depth" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Very large caverns deep in the underground" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "" + +#: builtin/mainmenu/dlg_delete_content.lua +msgid "Are you sure you want to delete \"$1\"?" +msgstr "" + +#: builtin/mainmenu/dlg_delete_content.lua +#: builtin/mainmenu/dlg_delete_world.lua builtin/mainmenu/tab_local.lua +msgid "Delete" +msgstr "" + +#: builtin/mainmenu/dlg_delete_content.lua +msgid "pkgmgr: failed to delete \"$1\"" +msgstr "" + +#: builtin/mainmenu/dlg_delete_content.lua +msgid "pkgmgr: invalid path \"$1\"" +msgstr "" + +#: builtin/mainmenu/dlg_delete_world.lua +msgid "Delete World \"$1\"?" +msgstr "" + +#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "" + +#: builtin/mainmenu/dlg_register.lua +msgid "Joining $1" +msgstr "" + +#: builtin/mainmenu/dlg_register.lua +msgid "Missing name" +msgstr "" + +#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua +#: builtin/mainmenu/tab_online.lua +msgid "Name" +msgstr "" + +#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua +#: builtin/mainmenu/tab_online.lua +msgid "Password" +msgstr "" + +#: builtin/mainmenu/dlg_register.lua +msgid "Passwords do not match" +msgstr "" + +#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua +msgid "Register" +msgstr "" + +#: builtin/mainmenu/dlg_reinstall_mtg.lua +msgid "Dismiss" +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." +msgstr "" + +#: 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 "" + +#: builtin/mainmenu/dlg_reinstall_mtg.lua +msgid "Minetest Game is no longer installed by default" +msgstr "" + +#: builtin/mainmenu/dlg_reinstall_mtg.lua +msgid "Reinstall Minetest Game" +msgstr "" + +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Accept" +msgstr "" + +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" +msgstr "" + +#: 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 "" + +#: builtin/mainmenu/dlg_version_info.lua +msgid "A new $1 version is available" +msgstr "" + +#: 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 "" + +#: builtin/mainmenu/dlg_version_info.lua +msgid "Later" +msgstr "" + +#: builtin/mainmenu/dlg_version_info.lua +msgid "Never" +msgstr "" + +#: builtin/mainmenu/dlg_version_info.lua +msgid "Visit website" +msgstr "" + +#: builtin/mainmenu/init.lua +msgid "Settings" +msgstr "" + +#: builtin/mainmenu/serverlistmgr.lua +msgid "Public server list is disabled" +msgstr "" + +#: builtin/mainmenu/serverlistmgr.lua +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" + +#: builtin/mainmenu/settings/components.lua +msgid "Browse" +msgstr "" + +#: builtin/mainmenu/settings/components.lua +msgid "Edit" +msgstr "" + +#: builtin/mainmenu/settings/components.lua +msgid "Select directory" +msgstr "" + +#: builtin/mainmenu/settings/components.lua +msgid "Select file" +msgstr "" + +#: builtin/mainmenu/settings/components.lua +msgid "Set" +msgstr "" + +#: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua +msgid "(No description of setting given)" +msgstr "" + +#: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua +msgid "2D Noise" +msgstr "" + +#: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua +msgid "Lacunarity" +msgstr "" + +#: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua +msgid "Octaves" +msgstr "" + +#: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua +#: src/settings_translation_file.cpp +msgid "Offset" +msgstr "" + +#: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua +msgid "Persistence" +msgstr "" + +#: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua +#: src/settings_translation_file.cpp +msgid "Scale" +msgstr "" + +#: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua +msgid "X spread" +msgstr "" + +#: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua +msgid "Y spread" +msgstr "" + +#: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua +msgid "Z spread" +msgstr "" + +#. ~ "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 "" + +#. ~ "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 "" + +#. ~ "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 "" + +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "(Use system language)" +msgstr "" + +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "Accessibility" +msgstr "" + +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "Back" +msgstr "" + +#: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp +#: src/settings_translation_file.cpp +msgid "Chat" +msgstr "" + +#: builtin/mainmenu/settings/dlg_settings.lua builtin/mainmenu/tab_online.lua +msgid "Clear" +msgstr "" + +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp +msgid "Controls" +msgstr "" + +#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +msgid "General" +msgstr "" + +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "Movement" +msgstr "" + +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "Reset setting to default" +msgstr "" + +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "Reset setting to default ($1)" +msgstr "" + +#: builtin/mainmenu/settings/dlg_settings.lua builtin/mainmenu/tab_online.lua +msgid "Search" +msgstr "" + +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "Show advanced settings" +msgstr "" + +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "Show technical names" +msgstr "" + +#: builtin/mainmenu/settings/settingtypes.lua +msgid "Client Mods" +msgstr "" + +#: builtin/mainmenu/settings/settingtypes.lua +msgid "Content: Games" +msgstr "" + +#: builtin/mainmenu/settings/settingtypes.lua +msgid "Content: Mods" +msgstr "" + +#: builtin/mainmenu/settings/shadows_component.lua +msgid "(The game will need to enable shadows as well)" +msgstr "" + +#: builtin/mainmenu/settings/shadows_component.lua +msgid "Custom" +msgstr "" + +#: builtin/mainmenu/settings/shadows_component.lua +msgid "Disabled" +msgstr "" + +#: builtin/mainmenu/settings/shadows_component.lua +#: src/settings_translation_file.cpp +msgid "Dynamic shadows" +msgstr "" + +#: builtin/mainmenu/settings/shadows_component.lua +msgid "High" +msgstr "" + +#: builtin/mainmenu/settings/shadows_component.lua +msgid "Low" +msgstr "" + +#: builtin/mainmenu/settings/shadows_component.lua +msgid "Medium" +msgstr "" + +#: builtin/mainmenu/settings/shadows_component.lua +msgid "Very High" +msgstr "" + +#: builtin/mainmenu/settings/shadows_component.lua +msgid "Very Low" +msgstr "" + +#: builtin/mainmenu/tab_about.lua +msgid "About" +msgstr "" + +#: builtin/mainmenu/tab_about.lua +msgid "Active Contributors" +msgstr "" + +#: builtin/mainmenu/tab_about.lua +msgid "Active renderer:" +msgstr "" + +#: builtin/mainmenu/tab_about.lua +msgid "Core Developers" +msgstr "" + +#: builtin/mainmenu/tab_about.lua +msgid "Core Team" +msgstr "" + +#: builtin/mainmenu/tab_about.lua +msgid "Irrlicht device:" +msgstr "" + +#: builtin/mainmenu/tab_about.lua +msgid "Open User Data Directory" +msgstr "" + +#: 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 "" + +#: builtin/mainmenu/tab_about.lua +msgid "Previous Contributors" +msgstr "" + +#: builtin/mainmenu/tab_about.lua +msgid "Previous Core Developers" +msgstr "" + +#: builtin/mainmenu/tab_about.lua +msgid "Share debug log" +msgstr "" + +#: builtin/mainmenu/tab_content.lua +msgid "Browse online content" +msgstr "" + +#: builtin/mainmenu/tab_content.lua +msgid "Browse online content [$1]" +msgstr "" + +#: builtin/mainmenu/tab_content.lua +msgid "Content" +msgstr "" + +#: builtin/mainmenu/tab_content.lua +msgid "Content [$1]" +msgstr "" + +#: builtin/mainmenu/tab_content.lua +msgid "Disable Texture Pack" +msgstr "" + +#: builtin/mainmenu/tab_content.lua +msgid "Installed Packages:" +msgstr "" + +#: builtin/mainmenu/tab_content.lua +msgid "No dependencies." +msgstr "" + +#: builtin/mainmenu/tab_content.lua +msgid "No package description available" +msgstr "" + +#: builtin/mainmenu/tab_content.lua +msgid "Rename" +msgstr "" + +#: builtin/mainmenu/tab_content.lua +msgid "Update available?" +msgstr "" + +#: builtin/mainmenu/tab_content.lua +msgid "Use Texture Pack" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Announce Server" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Bind Address" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Creative Mode" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Enable Damage" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Host Game" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Host Server" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Install a game" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Install games from ContentDB" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Minetest 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 " +"games." +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "New" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "No world created or selected!" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Play Game" +msgstr "" + +#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua +msgid "Port" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Select Mods" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Select World:" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Server Port" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Start Game" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "You need to install a game before you can create a world." +msgstr "" + +#: builtin/mainmenu/tab_online.lua +msgid "Address" +msgstr "" + +#: builtin/mainmenu/tab_online.lua +msgid "Creative mode" +msgstr "" + +#. ~ PvP = Player versus Player +#: builtin/mainmenu/tab_online.lua +msgid "Damage / PvP" +msgstr "" + +#: builtin/mainmenu/tab_online.lua +msgid "Favorites" +msgstr "" + +#: builtin/mainmenu/tab_online.lua +msgid "Incompatible Servers" +msgstr "" + +#: builtin/mainmenu/tab_online.lua +msgid "Join Game" +msgstr "" + +#: builtin/mainmenu/tab_online.lua +msgid "Login" +msgstr "" + +#: builtin/mainmenu/tab_online.lua +msgid "Ping" +msgstr "" + +#: builtin/mainmenu/tab_online.lua +msgid "Public Servers" +msgstr "" + +#: builtin/mainmenu/tab_online.lua +msgid "Refresh" +msgstr "" + +#: builtin/mainmenu/tab_online.lua +msgid "Remove favorite" +msgstr "" + +#: builtin/mainmenu/tab_online.lua +msgid "Server Description" +msgstr "" + +#: src/client/client.cpp +msgid "Connection aborted (protocol error?)." +msgstr "" + +#: src/client/client.cpp src/client/game.cpp +msgid "Connection timed out." +msgstr "" + +#: src/client/client.cpp +msgid "Done!" +msgstr "" + +#: src/client/client.cpp +msgid "Initializing nodes" +msgstr "" + +#: src/client/client.cpp +msgid "Initializing nodes..." +msgstr "" + +#: src/client/client.cpp +msgid "Loading textures..." +msgstr "" + +#: src/client/client.cpp +msgid "Rebuilding shaders..." +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Could not find or load game: " +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Main Menu" +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "No world selected and no address provided. Nothing to do." +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Player name too long." +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Please choose a name!" +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Provided password file failed to open: " +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Provided world path doesn't exist: " +msgstr "" + +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +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 "- Mode: " +msgstr "" + +#: src/client/game.cpp +msgid "- Public: " +msgstr "" + +#. ~ PvP = Player versus Player +#: src/client/game.cpp +msgid "- PvP: " +msgstr "" + +#: src/client/game.cpp +msgid "- Server Name: " +msgstr "" + +#: src/client/game.cpp +msgid "A serialization error occurred:" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + +#: src/client/game.cpp +msgid "Automatic forward disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Automatic forward enabled" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Camera update disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Camera update enabled" +msgstr "" + +#: src/client/game.cpp +msgid "Can't show block bounds (disabled by game or mod)" +msgstr "" + +#: src/client/game.cpp +msgid "Change Password" +msgstr "" + +#: src/client/game.cpp +msgid "Cinematic mode disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Cinematic mode enabled" +msgstr "" + +#: src/client/game.cpp +msgid "Client disconnected" +msgstr "" + +#: src/client/game.cpp +msgid "Client side scripting is disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Connecting to server..." +msgstr "" + +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "" + +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + +#: src/client/game.cpp +msgid "Continue" +msgstr "" + +#: 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 "" + +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + +#: src/client/game.cpp +msgid "Creating client..." +msgstr "" + +#: src/client/game.cpp +msgid "Creating server..." +msgstr "" + +#: src/client/game.cpp +msgid "Debug info and profiler graph hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Debug info shown" +msgstr "" + +#: src/client/game.cpp +msgid "Debug info, profiler graph, and wireframe hidden" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Error creating client: %s" +msgstr "" + +#: src/client/game.cpp +msgid "Exit to Menu" +msgstr "" + +#: src/client/game.cpp +msgid "Exit to OS" +msgstr "" + +#: src/client/game.cpp +msgid "Fast mode disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Fast mode enabled" +msgstr "" + +#: src/client/game.cpp +msgid "Fast mode enabled (note: no 'fast' privilege)" +msgstr "" + +#: src/client/game.cpp +msgid "Fly mode disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Fly mode enabled" +msgstr "" + +#: src/client/game.cpp +msgid "Fly mode enabled (note: no 'fly' privilege)" +msgstr "" + +#: src/client/game.cpp +msgid "Fog disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Fog enabled" +msgstr "" + +#: src/client/game.cpp +msgid "Fog enabled by game or mod" +msgstr "" + +#: src/client/game.cpp +msgid "Game info:" +msgstr "" + +#: src/client/game.cpp +msgid "Game paused" +msgstr "" + +#: src/client/game.cpp +msgid "Hosting server" +msgstr "" + +#: src/client/game.cpp +msgid "Item definitions..." +msgstr "" + +#: src/client/game.cpp +msgid "KiB/s" +msgstr "" + +#: src/client/game.cpp +msgid "MiB/s" +msgstr "" + +#: src/client/game.cpp +msgid "Minimap currently disabled by game or mod" +msgstr "" + +#: src/client/game.cpp +msgid "Multiplayer" +msgstr "" + +#: src/client/game.cpp +msgid "Noclip mode disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Noclip mode enabled" +msgstr "" + +#: src/client/game.cpp +msgid "Noclip mode enabled (note: no 'noclip' privilege)" +msgstr "" + +#: src/client/game.cpp +msgid "Node definitions..." +msgstr "" + +#: src/client/game.cpp +msgid "Off" +msgstr "" + +#: src/client/game.cpp +msgid "On" +msgstr "" + +#: src/client/game.cpp +msgid "Pitch move mode disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Pitch move mode enabled" +msgstr "" + +#: src/client/game.cpp +msgid "Profiler graph shown" +msgstr "" + +#: src/client/game.cpp +msgid "Remote server" +msgstr "" + +#: src/client/game.cpp +msgid "Resolving address..." +msgstr "" + +#: src/client/game.cpp +msgid "Shutting down..." +msgstr "" + +#: src/client/game.cpp +msgid "Singleplayer" +msgstr "" + +#: src/client/game.cpp +msgid "Sound Volume" +msgstr "" + +#: src/client/game.cpp +msgid "Sound muted" +msgstr "" + +#: src/client/game.cpp +msgid "Sound system is disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Sound system is not supported on this build" +msgstr "" + +#: src/client/game.cpp +msgid "Sound unmuted" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Unlimited viewing range disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Unlimited viewing range enabled" +msgstr "" + +#: src/client/game.cpp +msgid "Unlimited viewing range enabled, but forbidden by game or mod" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Viewing changed to %d (the minimum)" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Viewing changed to %d (the minimum), but limited to %d by game or mod" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Viewing range changed to %d" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Viewing range changed to %d (the maximum)" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "" +"Viewing range changed to %d (the maximum), but limited to %d by game or mod" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Viewing range changed to %d, but limited to %d by game or mod" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Volume changed to %d%%" +msgstr "" + +#: src/client/game.cpp +msgid "Wireframe shown" +msgstr "" + +#: src/client/game.cpp +msgid "Zoom currently disabled by game or mod" +msgstr "" + +#: src/client/gameui.cpp +msgid "Chat currently disabled by game or mod" +msgstr "" + +#: src/client/gameui.cpp +msgid "Chat hidden" +msgstr "" + +#: src/client/gameui.cpp +msgid "Chat shown" +msgstr "" + +#: src/client/gameui.cpp +msgid "HUD hidden" +msgstr "" + +#: src/client/gameui.cpp +msgid "HUD shown" +msgstr "" + +#: src/client/gameui.cpp +msgid "Profiler hidden" +msgstr "" + +#: src/client/gameui.cpp +#, c-format +msgid "Profiler shown (page %d of %d)" +msgstr "" + +#: src/client/keycode.cpp +msgid "Apps" +msgstr "" + +#: src/client/keycode.cpp +msgid "Backspace" +msgstr "" + +#. ~ Usually paired with the Pause key +#: src/client/keycode.cpp +msgid "Break Key" +msgstr "" + +#: src/client/keycode.cpp +msgid "Caps Lock" +msgstr "" + +#: src/client/keycode.cpp +msgid "Clear Key" +msgstr "" + +#: src/client/keycode.cpp +msgid "Control Key" +msgstr "" + +#: src/client/keycode.cpp +msgid "Delete Key" +msgstr "" + +#: src/client/keycode.cpp +msgid "Down Arrow" +msgstr "" + +#: src/client/keycode.cpp +msgid "End" +msgstr "" + +#: src/client/keycode.cpp +msgid "Erase EOF" +msgstr "" + +#: src/client/keycode.cpp +msgid "Execute" +msgstr "" + +#: src/client/keycode.cpp +msgid "Help" +msgstr "" + +#: src/client/keycode.cpp +msgid "Home" +msgstr "" + +#: src/client/keycode.cpp +msgid "IME Accept" +msgstr "" + +#: src/client/keycode.cpp +msgid "IME Convert" +msgstr "" + +#: src/client/keycode.cpp +msgid "IME Escape" +msgstr "" + +#: src/client/keycode.cpp +msgid "IME Mode Change" +msgstr "" + +#: src/client/keycode.cpp +msgid "IME Nonconvert" +msgstr "" + +#: src/client/keycode.cpp +msgid "Insert" +msgstr "" + +#: src/client/keycode.cpp +msgid "Left Arrow" +msgstr "" + +#: src/client/keycode.cpp +msgid "Left Button" +msgstr "" + +#: src/client/keycode.cpp +msgid "Left Control" +msgstr "" + +#: src/client/keycode.cpp +msgid "Left Menu" +msgstr "" + +#: src/client/keycode.cpp +msgid "Left Shift" +msgstr "" + +#: src/client/keycode.cpp +msgid "Left Windows" +msgstr "" + +#. ~ Key name, common on Windows keyboards +#: src/client/keycode.cpp +msgid "Menu Key" +msgstr "" + +#: src/client/keycode.cpp +msgid "Middle Button" +msgstr "" + +#: src/client/keycode.cpp +msgid "Num Lock" +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 "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 "OEM Clear" +msgstr "" + +#: src/client/keycode.cpp +msgid "Page Down" +msgstr "" + +#: src/client/keycode.cpp +msgid "Page Up" +msgstr "" + +#. ~ Usually paired with the Break key +#: src/client/keycode.cpp +msgid "Pause Key" +msgstr "" + +#: src/client/keycode.cpp +msgid "Play" +msgstr "" + +#. ~ "Print screen" key +#: src/client/keycode.cpp +msgid "Print" +msgstr "" + +#: src/client/keycode.cpp +msgid "Return Key" +msgstr "" + +#: src/client/keycode.cpp +msgid "Right Arrow" +msgstr "" + +#: src/client/keycode.cpp +msgid "Right Button" +msgstr "" + +#: src/client/keycode.cpp +msgid "Right Control" +msgstr "" + +#: src/client/keycode.cpp +msgid "Right Menu" +msgstr "" + +#: src/client/keycode.cpp +msgid "Right Shift" +msgstr "" + +#: src/client/keycode.cpp +msgid "Right Windows" +msgstr "" + +#: src/client/keycode.cpp +msgid "Scroll Lock" +msgstr "" + +#. ~ Key name +#: src/client/keycode.cpp +msgid "Select" +msgstr "" + +#: src/client/keycode.cpp +msgid "Shift Key" +msgstr "" + +#: src/client/keycode.cpp +msgid "Sleep" +msgstr "" + +#: src/client/keycode.cpp +msgid "Snapshot" +msgstr "" + +#: src/client/keycode.cpp +msgid "Space" +msgstr "" + +#: src/client/keycode.cpp +msgid "Tab" +msgstr "" + +#: src/client/keycode.cpp +msgid "Up Arrow" +msgstr "" + +#: src/client/keycode.cpp +msgid "X Button 1" +msgstr "" + +#: src/client/keycode.cpp +msgid "X Button 2" +msgstr "" + +#: src/client/keycode.cpp +msgid "Zoom Key" +msgstr "" + +#: src/client/minimap.cpp +msgid "Minimap hidden" +msgstr "" + +#: src/client/minimap.cpp +#, c-format +msgid "Minimap in radar mode, Zoom x%d" +msgstr "" + +#: src/client/minimap.cpp +#, c-format +msgid "Minimap in surface mode, Zoom x%d" +msgstr "" + +#: src/client/minimap.cpp +msgid "Minimap in texture mode" +msgstr "" + +#: src/client/shader.cpp +#, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +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/content/mod_configuration.cpp +msgid "Some mods have unsatisfied dependencies:" +msgstr "" + +#: src/gui/guiChatConsole.cpp +msgid "Failed to open webpage" +msgstr "" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + +#: src/gui/guiFormSpecMenu.cpp +msgid "Proceed" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "\"Aux1\" = climb down" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Autoforward" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp +msgid "Automatic jumping" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Aux1" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Backward" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Block bounds" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Change camera" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Command" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Console" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Dec. range" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Dec. volume" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Inc. range" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Inc. volume" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Inventory" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Keybindings." +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Left" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Local command" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Mute" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Next item" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Prev. item" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Right" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Screenshot" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Sneak" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle HUD" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle chat log" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle fog" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle minimap" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle noclip" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle pitchmove" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Zoom" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Unable to open URL" +msgstr "" + +#: src/gui/guiPasswordChange.cpp +msgid "Change" +msgstr "" + +#: src/gui/guiPasswordChange.cpp +msgid "New Password" +msgstr "" + +#: src/gui/guiPasswordChange.cpp +msgid "Old Password" +msgstr "" + +#: src/gui/guiPasswordChange.cpp +msgid "Passwords do not match!" +msgstr "" + +#: src/gui/guiVolumeChange.cpp +msgid "Exit" +msgstr "" + +#: src/gui/guiVolumeChange.cpp +msgid "Muted" +msgstr "" + +#: src/gui/guiVolumeChange.cpp +#, c-format +msgid "Sound Volume: %d%%" +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 "" +"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 "" + +#: src/server.cpp +#, c-format +msgid "%s while shutting down: " +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 "" +"(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 "2D noise that controls the shape/size of ridged mountains." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "2D noise that controls the shape/size of rolling hills." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "2D noise that controls the shape/size of step mountains." +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 "2D noise that controls the size/occurrence of rolling hills." +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 "2D noise that locates the river valleys and channels." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D clouds" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D mode parallax strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D noise defining giant caverns." +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 "" +"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 "3D noise defining structure of river canyon walls." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D noise defining terrain." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D noise for mountain overhangs, cliffs, etc. Usually small variations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D noise that determines number of dungeons per mapchunk." +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 "" +"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 "A message to be displayed to all clients when the server crashes." +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 "ABM interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "ABM time budget" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Absolute limit of queued blocks to emerge" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Acceleration in air" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Acceleration of gravity, in nodes per second per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active Block Modifiers" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active block management interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active block range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active object send range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Adds particles when digging a node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +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 "Admin name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Advanced" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +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 "Always fly fast" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ambient occlusion gamma" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Amplifies the valleys." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Anisotropic filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Announce server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Announce to this serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Anti-aliasing scale" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Antialiasing method" +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 "Apple trees noise" +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 "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 "Ask to reconnect after crash" +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 "" +"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 "Audio" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Automatically jump up single-node obstacles." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Automatically report to the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Autoscaling mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Aux1 key for climbing/descending" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Base ground level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Base terrain height." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Base texture size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Basic privileges" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Beach noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Beach noise threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bilinear filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bind address" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Biome API" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Biome noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Block cull optimize distance" +msgstr "" + +#: src/settings_translation_file.cpp +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 "" + +#: src/settings_translation_file.cpp +msgid "Bold and italic font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bold and italic monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bold font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bold monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Build inside player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Builtin" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing in cinematic mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cave noise" +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 "Cave width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cave1 noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cave2 noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cavern limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cavern noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cavern taper" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cavern threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cavern upper limit" +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 "Chat command time message threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat commands" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat log level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat message count limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat message format" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat message kick threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat message max length" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat weblinks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chunk size" +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 "Client" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client Mesh Chunksize" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client and Server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client modding" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client side modding restrictions" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client-side Modding" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client-side node lookup range restriction" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Climbing speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud radius" +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 "Clouds in menu" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Colored fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Colored shadows" +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 "" +"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" +"so see a full list at https://content.minetest.net/help/content_flags/" +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 "" +"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 "" +"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 "" +"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 "Connect glass" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Connect to external media server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Connects glass if supported by node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Console alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Console color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Console height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Content Repository" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "ContentDB Flag Blacklist" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "ContentDB Max Concurrent Downloads" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "ContentDB URL" +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 "" +"Controls sinking speed in liquid when idling. Negative values will cause\n" +"you to rise instead." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Controls steepness/depth of lake depressions." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Controls steepness/height of hills." +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 "Crash message" +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 "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 "Debug log file size threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debug log level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debugging" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dedicated server step" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default acceleration" +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 "Default password" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default privileges" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default report format" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default stack size" +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 "" +"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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines areas where trees have apples." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines areas with sandy beaches." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines distribution of higher terrain and steepness of cliffs." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines distribution of higher terrain." +msgstr "" + +#: src/settings_translation_file.cpp +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 "" + +#: src/settings_translation_file.cpp +msgid "Defines location and terrain of optional hills and lakes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the base ground level." +msgstr "" + +#: src/settings_translation_file.cpp +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 "" + +#: 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 "Defines the width of the river channel." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the width of the river valley." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines tree areas and tree density." +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 "Delay in sending blocks after building" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Delay showing tooltips, stated in milliseconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Deprecated Lua API handling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Depth below which you'll find giant caverns." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Depth below which you'll find large caves." +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 "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 "Desynchronize block animation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Developer Options" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Digging particles" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Disable anticheat" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Disallow empty passwords" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +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" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Domain name of server, to be displayed in the serverlist." +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 "Dump the mapgen debug information." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dungeon maximum Y" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dungeon minimum Y" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dungeon noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable Automatic Exposure" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable Bloom" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable Bloom Debug" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable Debanding" +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 "" +"Enable Lua modding support on client.\n" +"This support is experimental and API can change." +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 "Enable Post Processing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable Raytraced Culling" +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 "" +"Enable colored shadows.\n" +"On true translucent nodes cast colored shadows. This is expensive." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable console window" +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 "Enable mod channels support." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable mod security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable mouse wheel (scroll) for item selection in hotbar." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable random mod loading (mainly used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +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." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable split login/register" +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 "Enable touchscreen" +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 "" +"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 "" +"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 "" +"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 "Enables animation of inventory items." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables caching of facedir rotated meshes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +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 "Engine Profiler" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Engine profiling data print interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Entity methods" +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 "Exposure compensation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FPS when unfocused or paused" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Factor noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fall bobbing factor" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode speed" +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 "" +"File in client/serverlist/ that contains your favorite servers displayed in " +"the\n" +"Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Filler depth" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Filler depth noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Filmic tone mapping" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Filtering and Antialiasing" +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 "First of two 3D noises that together define tunnels." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fixed map seed" +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 "Floatland density" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland maximum Y" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland minimum Y" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland taper exponent" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland tapering distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland water level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog start" +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 "Font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size divisible by" +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 of the monospace font where 1 unit = 1 pixel at 96 DPI" +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 "" +"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 "" +"Format of player chat messages. The following strings are valid " +"placeholders:\n" +"@name, @message, @timestamp (optional)" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Format of screenshots." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec Full-Screen Background Color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec Full-Screen Background Opacity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec full-screen background color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec full-screen background opacity (between 0 and 255)." +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 "Fractal type" +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 "" +"From how far blocks are generated for clients, stated in mapblocks (16 " +"nodes)." +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 "" +"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 "Full screen" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter txr2img" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gamepads" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Global callbacks" +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 "" +"Gradient of light curve at maximum light level.\n" +"Controls the contrast of the highest light levels." +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 "Graphics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Graphics Effects" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Graphics and Audio" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gravity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ground level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ground noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "HTTP mods" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "HUD" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "HUD scaling" +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 "" +"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 "Heat blend noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Heat noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height component of the initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height select noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hill steepness" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hill threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hilliness1 noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hilliness2 noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hilliness3 noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hilliness4 noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Homepage of server, to be displayed in the serverlist." +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 "" +"Horizontal and vertical acceleration in fast mode,\n" +"in nodes per second per second." +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 "Hotbar: Enable mouse wheel for selection" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar: Invert mouse wheel direction" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "How deep to make rivers." +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 "" +"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 "" +"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 "How wide to make rivers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Humidity blend noise" +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 "IPv6" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 server" +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 "" +"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 "" +"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down " +"and\n" +"descending." +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 "" +"If enabled, actions are recorded for rollback.\n" +"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" +"Only enable this if you know what you are doing." +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 "" +"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 "" +"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 "" +"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 "" +"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 "" +"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 "If this is set, players will always (re)spawn at the given position." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ignore world errors" +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 "In-game chat console background color (R,G,B)." +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 "Initial vertical speed when jumping, in nodes per second." +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 "Instrument chat commands on registration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Instrument global callback functions on registration.\n" +"(anything you pass to a minetest.register_*() function)" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Instrument the action function of Active Block Modifiers on registration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Instrument the action function of Loading Block Modifiers on registration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Instrument the methods of entities on registration." +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 "Interval of sending time of day to clients, stated in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Inventory items animations" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert mouse" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert mouse wheel (scroll) direction for item selection in hotbar." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert vertical mouse movement." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Italic font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Italic monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Item entity TTL" +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 "Joystick ID" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Joystick button repetition interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Joystick dead zone" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Joystick frustum sensitivity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Joystick type" +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 "" +"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 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 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 x" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Julia y" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Julia z" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Jumping speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Keyboard and Mouse" +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 "Lake steepness" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Lake threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Language" +msgstr "toki" + +#: src/settings_translation_file.cpp +msgid "Large cave depth" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Large cave maximum number" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Large cave minimum number" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Large cave proportion flooded" +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 "" +"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 "" + +#: src/settings_translation_file.cpp +msgid "Length of liquid waves." +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 "Length of time between NodeTimer execution cycles, stated in seconds." +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 "" +"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 "Light curve boost" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Light curve boost center" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Light curve boost spread" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Light curve gamma" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Light curve high gradient" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Light curve low gradient" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Lighting" +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 "" +"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 "Liquid fluidity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid loop max" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid queue purge time" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid sinking" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update interval in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update tick" +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 "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 "" + +#: src/settings_translation_file.cpp +msgid "Lower Y limit of floatlands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Main menu script" +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 "Map Compression Level for Disk Storage" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map Compression Level for Network Transfer" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map directory" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map generation attributes specific to Mapgen Carpathian." +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 "" +"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 "" +"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 "Map generation attributes specific to Mapgen v5." +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 "" +"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 "" + +#: src/settings_translation_file.cpp +msgid "Map generation limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map save interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map shadows update frames" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock mesh generation delay" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock mesh generation threads" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock unload timeout" +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 "Mapgen Flat" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Flat specific flags" +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 "Mapgen V5" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen V5 specific flags" +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 "Mapgen V7" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen V7 specific flags" +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 "Mapgen debug" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block generate distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block send distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max liquids processed per step." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. clearobjects extra blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. packets per iteration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS" +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 "Maximum distance to render shadows." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum forceloaded blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum hotbar width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum limit of random number of large caves per mapchunk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum limit of random number of small caves per mapchunk." +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 "" +"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 "Maximum number of blocks that can be queued for loading." +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 "" +"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 "" +"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 "" +"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 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 "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of players that can be connected simultaneously." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of recent chat messages to show" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of statically stored objects in a block." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum objects per block" +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 "Maximum simultaneous block sends per client" +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 "" +"Maximum time a file download (e.g. a mod download) may take, stated in " +"milliseconds." +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 "Maximum users" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mesh cache" +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 "Method used to highlight selected object." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap scan height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum dig repetition interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum limit of random number of large caves per mapchunk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum limit of random number of small caves per mapchunk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mipmapping" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Miscellaneous" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mod Profiler" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mod Security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mod channels" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modifies the size of the HUD elements." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font size divisible by" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mountain height noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mountain noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mountain variation noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mountain zero level" +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 "Movement threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mud noise" +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 "Mute sound" +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 "" +"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 "" +"Name of the server, to be displayed when players join and in the serverlist." +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 "Networking" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New users need to input this password." +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 "NodeTimer interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noises" +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 "" +"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 "Number of messages a player may send per 10 seconds." +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 " +"threads." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Occlusion Culler" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Occlusion Culling" +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 "" +"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 "OpenGL debug" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +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 "" +"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 "" +"Path to shader directory. If no path is defined, default location will be " +"used." +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 "" +"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 "Pause on lost window focus" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Per-player limit of queued blocks load from disk" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Per-player limit of queued blocks to generate" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Physics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Place repetition interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Poisson filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Post Processing" +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 "Prevent mods from doing insecure things like running shell commands." +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 "Privileges that players with basic_privs can grant" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Prometheus listener address" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Prometheus listener address.\n" +"If Minetest 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 "Proportion of large caves that contain liquid." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Protocol version minimum" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +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 "Raises terrain to make valleys around the rivers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Random input" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Recent Chat Messages" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Regular font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Remember screen size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Remote media" +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 "Replaces the default main menu with a custom one." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Report path" +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 "Ridge mountain spread noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ridge noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ridge underwater noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ridged mountain size noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "River channel depth" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "River channel width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "River depth" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "River noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "River size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "River valley width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rollback recording" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rolling hill size noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rolling hills spread noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Safe digging and placing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Sandy beaches occur when np_beach exceeds this value." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Save the map received by the client on disk." +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 "Saving map received from server" +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 "Screen" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screenshot folder" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screenshot format" +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 "Screenshots" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Seabed 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 "Second of two 3D noises that together define tunnels." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous" +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 "Selection box border color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box width" +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 "Server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server Gameplay" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server Security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server address" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server description" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server port" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server-side occlusion culling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server/Env Performance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Serverlist URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Serverlist and MOTD" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Serverlist file" +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 "" +"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 "" +"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 "" +"Set the maximum length of a chat message (in characters) sent by clients." +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 "" +"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 "Set to true to enable Shadow Mapping." +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 "Set to true to enable volumetric lighting effect (a.k.a. \"Godrays\")." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Set to true to enable waving leaves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Set to true to enable waving liquids (like water)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Set to true to enable waving plants." +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 "" +"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 "Shader path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shaders" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Shaders allow advanced visual effects and may increase performance on some " +"video\n" +"cards." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shadow filter quality" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shadow map max distance in nodes to render shadows" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shadow map texture in 32 bits" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shadow map texture size" +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 "Shadow strength gamma" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Show debug info" +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 "Show name tag backgrounds by default" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shutdown message" +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 "" +"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 "Sky Body Orbit Tilt" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Slice w" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Slope and fill work together to modify the heights." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Small cave maximum number" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Small cave minimum number" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Small-scale humidity variation for blending biomes on borders." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Small-scale temperature variation for blending biomes on borders." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooth lighting" +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 "" +"Smooths rotation of camera, also called look or mouse smoothing. 0 to " +"disable." +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 "Soft shadow radius" +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 "" +"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 "" +"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 "" +"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 "" +"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 "Static spawn point" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Steepness noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Step mountain size noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Step mountain spread noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strength of 3D mode parallax." +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 "Strict protocol checking" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strip color codes" +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 "Synchronous SQLite" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Temperature variation for biomes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Terrain alternative noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Terrain base noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Terrain height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Terrain higher noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Terrain noise" +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 "" +"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 "Terrain persistence noise" +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 "" +"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 "The URL for the content repository" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The dead zone of the joystick" +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 "" +"The delay in milliseconds after which a touch interaction is considered a " +"long tap." +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 "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The identifier of the joystick to use" +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 "" +"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 "" +"The minimum time in seconds it takes between digging nodes when holding\n" +"the dig button." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The network interface that the server listens on." +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 "" +"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 "" +"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." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The sensitivity of the joystick axes for moving the\n" +"in-game view frustum around." +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 "" +"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 "" +"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 "" +"The time in seconds it takes between repeated events\n" +"when holding down a joystick button combination." +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 "The type of joystick" +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 "Third of 4 2D noises that together define hill/mountain range height." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +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 "Time of day when a new world is started, in millihours (0-23999)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time send interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time speed" +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 "" +"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 "Tooltip delay" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Touchscreen" +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 "Tradeoffs for performance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Translucent liquids" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Transparency Sorting Distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trees noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trilinear filtering" +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 "Trusted mods" +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 "" +"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 "" + +#: src/settings_translation_file.cpp +msgid "URL to the server list displayed in the Multiplayer Tab." +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 "Unlimited player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unload unused server data" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Update information URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Upper Y limit of dungeons." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Upper Y limit of floatlands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use 3D cloud look instead of flat." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use a cloud animation for the main menu background." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use anisotropic filtering when looking at textures from an angle." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use bilinear filtering when scaling textures." +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 "" +"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 "" +"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 "" +"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 "" +"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 "User Interfaces" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "VSync" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Valley depth" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Valley fill" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Valley profile" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Valley slope" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Variation of biome filler depth." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Variation of maximum mountain height (in nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Variation of number of caves." +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 "Varies depth of biome surface nodes." +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 "Varies steepness of cliffs." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical climbing speed, in nodes per second." +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 "Video driver" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View bobbing factor" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View distance in nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Virtual joystick triggers Aux1 button" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Volume" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +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 "Volumetric lighting" +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 "Walking and flying speed, in nodes per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Walking 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 "Water level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water surface level of the world." +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 "Waving liquids" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving liquids wave height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving liquids wave speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving liquids wavelength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving plants" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Weblink color" +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 "" +"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 "" +"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 "" +"Whether name tag backgrounds should be shown by default.\n" +"Mods may still set a background." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether node texture animations should be desynchronized per mapblock." +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 "Whether the window is maximized." +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 "Whether to fog out the end of the visible area." +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 "" +"Whether to show the client debug info (has the same effect as hitting F5)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Width component of the initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Width of the selection box lines around nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Window maximized" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Windows systems only: Start Minetest 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 "" +"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 "World start time" +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 "World-aligned textures mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y of flat ground." +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 "Y of upper limit of large caves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y-distance over which caverns expand to full size." +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 "Y-level of average terrain surface." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y-level of cavern upper limit." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y-level of higher terrain that creates cliffs." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y-level of lower terrain and seabed." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y-level of seabed." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL file download timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL interactive timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL parallel limit" +msgstr "" diff --git a/po/tr/minetest.po b/po/tr/minetest.po index 384dfce8a..c8cc43b5d 100644 --- a/po/tr/minetest.po +++ b/po/tr/minetest.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: Turkish (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" -"PO-Revision-Date: 2023-05-22 21:48+0000\n" -"Last-Translator: Furkan Baytekin \n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" +"PO-Revision-Date: 2024-03-24 17:01+0000\n" +"Last-Translator: Oğuz Ersen \n" "Language-Team: Turkish \n" "Language: tr\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.18-dev\n" +"X-Generator: Weblate 5.5-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -71,7 +71,8 @@ msgid "Command not available: " msgstr "Komut kullanılamıyor: " #: builtin/common/chatcommands.lua -msgid "Get help for commands" +#, fuzzy +msgid "Get help for commands (-t: output in chat)" msgstr "Komutlar için yardım alın" #: builtin/common/chatcommands.lua @@ -82,13 +83,10 @@ msgstr "" "help all' kullanın." #: builtin/common/chatcommands.lua -msgid "[all | ]" +#, fuzzy +msgid "[all | ] [-t]" msgstr "[all | ]" -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" -msgstr "Tamam" - #: builtin/fstk/ui.lua msgid "" msgstr "" @@ -105,6 +103,10 @@ msgstr "Bir hata oluştu:" msgid "Main menu" msgstr "Ana menü" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "Tamam" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Bağlan" @@ -133,19 +135,26 @@ msgstr "Yalnızca $1 protokol sürümü desteklenmektedir." msgid "We support protocol versions between version $1 and $2." msgstr "Yalnızca $1 ve $2 arası protokol sürümleri desteklenmektedir." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "\"$1\" zaten var.Değiştirilsin mi?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" +msgstr "\"$1\" yüklenirken hata oluştu: $2" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." -msgstr "$ 1 ve $ 2 destek dosyaları yüklenecek." +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download \"$1\"" +msgstr "\"$1\" indirilemedi" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" -msgstr "$1 'e $2" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr "$1 indirilemedi" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "\"$1\" ayıklanamadı (desteklenmeyen dosya türü veya bozuk arşiv)" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" @@ -153,156 +162,157 @@ msgstr "" "$1 indiriliyor,\n" "$2 sırada" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." msgstr "$1 indiriliyor..." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "$1 için destek dosyaları bulanamadı." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "$1 indirilecek, ve $2 destek dosyaları atlanacak." - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "Tüm paketler" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "Zaten kuruldu" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "Ana Menüye Dön" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "Minetest cURL olmadan derlendiğinde ContentDB kullanılamaz" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "İndiriliyor..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "Oyunlar" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +msgstr "Kur" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp +msgid "Loading..." +msgstr "Yükleniyor..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Mods" +msgstr "Modlar" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "Paket alınamadı" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "Sonuç yok" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "Güncelleme yok" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "Sıraya alındı" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "Doku paketleri" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "$1 paketi bulunamadı." + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "Kaldır" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "Güncelleme" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "Hepsini güncelle [$1]" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "View more information in a web browser" +msgstr "Tarayıcı'da daha fazla bilgi edinin" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "You need to install a game before you can install a mod" +msgstr "Bir mod kurabilmeniz için önce bir oyun kurmanız gerekir" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 and $2 dependencies will be installed." +msgstr "$ 1 ve $ 2 destek dosyaları yüklenecek." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "$1 'e $2" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "$1 için destek dosyaları bulanamadı." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "$1 indirilecek, ve $2 destek dosyaları atlanacak." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "Zaten kuruldu" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "Yerel oyun:" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "İptal" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "Minetest cURL olmadan derlendiğinde ContentDB kullanılamaz" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "Gereklilikler:" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "İndiriliyor..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "\"$1\" yüklenirken hata oluştu: $2" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download \"$1\"" -msgstr "\"$1\" indirilemedi" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "$1 indirilemedi" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "\"$1\" ayıklanamadı (desteklenmeyen dosya türü veya bozuk arşiv)" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "Oyunlar" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "Kur" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "$1 kur" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "Eksik bağımlılıkları kur" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "Yükleniyor..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "Modlar" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "Paket alınamadı" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "Sonuç yok" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "Güncelleme yok" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "Bulunamadı" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "Üzerine yaz" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "Lütfen asıl oyunun doğru olup olmadığını gözden geçirin." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" -msgstr "Sıraya alındı" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" +msgstr "\"$1\" zaten var.Değiştirilsin mi?" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "Doku paketleri" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "Kaldır" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "Güncelleme" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "Hepsini güncelle [$1]" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "Tarayıcı'da daha fazla bilgi edinin" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" -msgstr "" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" +msgstr "Üzerine yaz" #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" @@ -322,14 +332,12 @@ msgid "Install: Unable to find suitable folder name for $1" msgstr "Mod Kur:$1 mod paketi için uygun bir klasör adı bulunamadı" #: builtin/mainmenu/content/pkgmgr.lua -#, fuzzy msgid "Unable to find a valid mod, modpack, or game" -msgstr "Geçerli bir mod veya mod paketi bulunamadı" +msgstr "Geçerli bir mod, mod paketi veya oyun bulunamadı" #: builtin/mainmenu/content/pkgmgr.lua -#, fuzzy msgid "Unable to install a $1 as a $2" -msgstr "Bir mod bir $1 olarak kurulamadı" +msgstr "$1, bir $2 olarak kurulamadı" #: builtin/mainmenu/content/pkgmgr.lua msgid "Unable to install a $1 as a texture pack" @@ -341,11 +349,11 @@ msgstr "(Etkinleştirildi, hata var)" #: builtin/mainmenu/dlg_config_world.lua msgid "(Unsatisfied)" -msgstr "" +msgstr "(Karşılanmadı)" #: builtin/mainmenu/dlg_config_world.lua msgid "Disable all" -msgstr "Hepsini devre dışı bırak" +msgstr "Tümünü devre dışı bırak" #: builtin/mainmenu/dlg_config_world.lua msgid "Disable modpack" @@ -453,10 +461,20 @@ msgstr "Oluştur" msgid "Decorations" msgstr "Dekorasyonlar" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." msgstr "Geliştirme Testi, geliştiriciler içindir." +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "Zindanlar" @@ -625,12 +643,11 @@ msgstr "Parolayı Doğrula" #: builtin/mainmenu/dlg_register.lua msgid "Joining $1" -msgstr "" +msgstr "$1'e katılıyor" #: builtin/mainmenu/dlg_register.lua -#, fuzzy msgid "Missing name" -msgstr "Mapgen adı" +msgstr "Eksik ad" #: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua #: builtin/mainmenu/tab_online.lua @@ -652,7 +669,7 @@ msgstr "Kaydol" #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "Dismiss" -msgstr "" +msgstr "Kapat" #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "" @@ -660,21 +677,25 @@ msgid "" "\"Minetest Game\". Since Minetest 5.8.0, Minetest ships without a default " "game." msgstr "" +"Minetest motoru uzun bir süre boyunca \"Minetest Game\" adında öntanımlı bir " +"oyunla birlikte geliyordu. Minetest 5.8.0 sürümünden bu yana, Minetest " +"öntanımlı bir oyun olmadan gelmektedir." #: 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 "" +"Minetest Game dünyalarınızda oynamaya devam etmek istiyorsanız, Minetest " +"Game'i yeniden kurmanız gerekir." #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "Minetest Game is no longer installed by default" -msgstr "" +msgstr "Minetest Game artık öntanımlı olarak kurulu değil" #: builtin/mainmenu/dlg_reinstall_mtg.lua -#, fuzzy msgid "Reinstall Minetest Game" -msgstr "Başka bir oyun yükleyin" +msgstr "Minetest Game'i yeniden kur" #: builtin/mainmenu/dlg_rename_modpack.lua msgid "Accept" @@ -694,20 +715,19 @@ msgstr "" #: builtin/mainmenu/dlg_version_info.lua msgid "A new $1 version is available" -msgstr "" +msgstr "Yeni bir $1 sürümü var" #: builtin/mainmenu/dlg_version_info.lua -#, fuzzy 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 "" -"İndirili versiyon: $1\n" -"Yeni versiyon: $2\n" -"$3'ü ziyaret et ve nasıl en yeni versiyona geçebileceğini ve en yeni " -"özellikler ve ayıklanmış hatalarla güncel kalabileceğini öğren." +"Kurulu sürüm: $1\n" +"Yeni sürüm: $2\n" +"En yeni sürümü nasıl edinebileceğinizi öğrenmek ve özellikler ve hata " +"düzeltmeleriyle güncel kalmak için $3 adresini ziyaret edin." #: builtin/mainmenu/dlg_version_info.lua msgid "Later" @@ -823,20 +843,16 @@ msgstr "rahat" #: builtin/mainmenu/settings/dlg_settings.lua msgid "(Use system language)" -msgstr "" +msgstr "(Sistem dilini kullan)" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Accessibility" -msgstr "" +msgstr "Erişilebilirlik" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Back" msgstr "Geri" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "Tuşları değiştir" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -846,27 +862,26 @@ msgstr "Sohbet" msgid "Clear" msgstr "Temizle" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "Kontroller" #: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp msgid "General" -msgstr "" +msgstr "Genel" #: builtin/mainmenu/settings/dlg_settings.lua -#, fuzzy msgid "Movement" -msgstr "Hızlı hareket" +msgstr "Hareket" #: builtin/mainmenu/settings/dlg_settings.lua -#, fuzzy msgid "Reset setting to default" -msgstr "Öntanımlıyı Geri Yükle" +msgstr "Ayarı öntanımlıya sıfırla" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Reset setting to default ($1)" -msgstr "" +msgstr "Ayarı öntanımlı değere sıfırla ($1)" #: builtin/mainmenu/settings/dlg_settings.lua builtin/mainmenu/tab_online.lua msgid "Search" @@ -874,34 +889,31 @@ msgstr "Ara" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Show advanced settings" -msgstr "" +msgstr "Gelişmiş ayarları göster" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Show technical names" msgstr "Teknik adları göster" #: builtin/mainmenu/settings/settingtypes.lua -#, fuzzy msgid "Client Mods" -msgstr "Mod seçin" +msgstr "İstemci Modları" #: builtin/mainmenu/settings/settingtypes.lua -#, fuzzy msgid "Content: Games" -msgstr "İçerik" +msgstr "İçerik: Oyunlar" #: builtin/mainmenu/settings/settingtypes.lua -#, fuzzy msgid "Content: Mods" -msgstr "İçerik" +msgstr "İçerik: Modlar" #: builtin/mainmenu/settings/shadows_component.lua msgid "(The game will need to enable shadows as well)" -msgstr "" +msgstr "(Oyunun gölgeleri de etkinleştirmesi gerekecektir)" #: builtin/mainmenu/settings/shadows_component.lua msgid "Custom" -msgstr "" +msgstr "Özel" #: builtin/mainmenu/settings/shadows_component.lua msgid "Disabled" @@ -951,11 +963,11 @@ msgstr "Çekirdek Geliştiriciler" #: builtin/mainmenu/tab_about.lua msgid "Core Team" -msgstr "" +msgstr "Çekirdek Takım" #: builtin/mainmenu/tab_about.lua msgid "Irrlicht device:" -msgstr "" +msgstr "Irrlicht aygıtı:" #: builtin/mainmenu/tab_about.lua msgid "Open User Data Directory" @@ -978,27 +990,24 @@ msgid "Previous Core Developers" msgstr "Önceki Çekirdek Geliştiriciler" #: builtin/mainmenu/tab_about.lua -#, fuzzy msgid "Share debug log" -msgstr "Hata ayıklama bilgisini göster" +msgstr "Hata ayıklama günlüğünü paylaş" #: builtin/mainmenu/tab_content.lua msgid "Browse online content" msgstr "Çevrim içi içeriğe göz at" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Browse online content [$1]" -msgstr "Çevrim içi içeriğe göz at" +msgstr "Çevrim içi içeriğe göz at [$1]" #: builtin/mainmenu/tab_content.lua msgid "Content" msgstr "İçerik" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Content [$1]" -msgstr "İçerik" +msgstr "İçerik [$1]" #: builtin/mainmenu/tab_content.lua msgid "Disable Texture Pack" @@ -1021,9 +1030,8 @@ msgid "Rename" msgstr "Yeniden adlandır" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Update available?" -msgstr "" +msgstr "Güncelleme var mı?" #: builtin/mainmenu/tab_content.lua msgid "Use Texture Pack" @@ -1061,6 +1069,17 @@ msgstr "Bir oyun yükleyin" msgid "Install games from ContentDB" msgstr "ContentDB'den oyunlar yükle" +#: builtin/mainmenu/tab_local.lua +#, fuzzy +msgid "Minetest doesn't come with a game by default." +msgstr "Minetest Game artık öntanımlı olarak kurulu değil" + +#: builtin/mainmenu/tab_local.lua +msgid "" +"Minetest is a game-creation platform that allows you to play many different " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "Yeni" @@ -1094,8 +1113,9 @@ msgid "Start Game" msgstr "Oyun Başlat" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." -msgstr "Kurulu oyununuz yok." +#, fuzzy +msgid "You need to install a game before you can create a world." +msgstr "Bir mod kurabilmeniz için önce bir oyun kurmanız gerekir" #: builtin/mainmenu/tab_online.lua msgid "Address" @@ -1148,9 +1168,8 @@ msgid "Server Description" msgstr "Sunucu Açıklaması" #: src/client/client.cpp -#, fuzzy msgid "Connection aborted (protocol error?)." -msgstr "Bağlantı hatası (zaman aşımı?)" +msgstr "Bağlantı iptal edildi (protokol hatası?)." #: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." @@ -1176,18 +1195,10 @@ msgstr "Dokular yükleniyor..." msgid "Rebuilding shaders..." msgstr "Gölgelemeler yeniden oluşturuluyor..." -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "Bağlantı hatası (zaman aşımı?)" - #: src/client/clientlauncher.cpp msgid "Could not find or load game: " msgstr "Oyun bulunamadı veya yüklenemedi: " -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "Geçersiz oyun özellikleri." - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "Ana Menü" @@ -1212,7 +1223,11 @@ msgstr "Sağlanan parola dosyası açılamadı: " msgid "Provided world path doesn't exist: " msgstr "Belirtilen dünya konumu yok: " -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "Medya..." + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp msgid "" "\n" "Check debug.txt for details." @@ -1220,18 +1235,10 @@ msgstr "" "\n" "Hata ayrıntıları için debug.txt dosyasına bakın." -#: src/client/game.cpp -msgid "- Address: " -msgstr "- Adres: " - #: src/client/game.cpp msgid "- Mode: " msgstr "- Kip: " -#: src/client/game.cpp -msgid "- Port: " -msgstr "- Port: " - #: src/client/game.cpp msgid "- Public: " msgstr "- Herkese Açık: " @@ -1266,10 +1273,6 @@ msgstr "Kendiliğinden ileri etkin" msgid "Block bounds hidden" msgstr "Blok sınırları gizli" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "Blok sınırları tüm bloklar için gösteriliyor" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "Blok sınırları geçerli blok için gösteriliyor" @@ -1315,6 +1318,10 @@ msgstr "İstemci tarafı betik devre dışı" msgid "Connecting to server..." msgstr "Sunucuya bağlanılıyor..." +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "Bağlantı hatası (zaman aşımı?)" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "Bilinmeyen bir nedenle bağlantı başarısız oldu" @@ -1323,47 +1330,14 @@ msgstr "Bilinmeyen bir nedenle bağlantı başarısız oldu" msgid "Continue" msgstr "Devam et" -#: src/client/game.cpp -#, fuzzy, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" -"Kontroller:\n" -"- %s: ileri hareket\n" -"- %s: geri hareket\n" -"- %s: sola hareket\n" -"- %s: sağa hareket\n" -"- %s: zıpla/tırman\n" -"- %s: kaz/vur\n" -"- %s: yerleştir/kullan\n" -"- %s: sız/aşağı in\n" -"- %s: ögeyi at\n" -"- %s: envanter\n" -"- Fare: dön/bak\n" -"- Fare tekerleği: öge seç\n" -"- %s: sohbet\n" - #: src/client/game.cpp #, fuzzy msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1411,9 +1385,9 @@ msgid "Debug info, profiler graph, and wireframe hidden" msgstr "Hata ayıklama bilgisi, profilci grafiği ve tel kafes gizli" #: src/client/game.cpp -#, fuzzy, c-format +#, c-format msgid "Error creating client: %s" -msgstr "İstemci yaratılıyor..." +msgstr "İstemci oluşturulurken hata: %s" #: src/client/game.cpp msgid "Exit to Menu" @@ -1455,6 +1429,11 @@ msgstr "Sis devre dışı" msgid "Fog enabled" msgstr "Sis etkin" +#: src/client/game.cpp +#, fuzzy +msgid "Fog enabled by game or mod" +msgstr "Yakınlaştırma şu anda oyun veya mod tarafından devre dışı" + #: src/client/game.cpp msgid "Game info:" msgstr "Oyun Bilgisi:" @@ -1475,10 +1454,6 @@ msgstr "Öge tanımları..." msgid "KiB/s" msgstr "KiB/s" -#: src/client/game.cpp -msgid "Media..." -msgstr "Medya..." - #: src/client/game.cpp msgid "MiB/s" msgstr "MiB/s" @@ -1579,18 +1554,18 @@ msgid "Unable to listen on %s because IPv6 is disabled" msgstr "IPv6 devre dışı bırakıldığından %s adresinde dinlenemiyor" #: src/client/game.cpp -#, fuzzy msgid "Unlimited viewing range disabled" -msgstr "Sınırsız görüntüleme uzaklığı etkin" +msgstr "Sınırsız görüntüleme uzaklığı devre dışı" #: src/client/game.cpp -#, fuzzy msgid "Unlimited viewing range enabled" msgstr "Sınırsız görüntüleme uzaklığı etkin" #: src/client/game.cpp msgid "Unlimited viewing range enabled, but forbidden by game or mod" msgstr "" +"Sınırsız görüntüleme uzaklığı etkinleştirildi, ancak oyun veya mod " +"tarafından yasaklandı" #: src/client/game.cpp #, fuzzy, c-format @@ -1601,6 +1576,8 @@ msgstr "Görüntüleme uzaklığı minimumda: %d" #, c-format msgid "Viewing changed to %d (the minimum), but limited to %d by game or mod" msgstr "" +"Görüntüleme %d ( en düşük) olarak değiştirildi, ancak oyun veya mod " +"tarafından %d ile sınırlandırıldı" #: src/client/game.cpp #, c-format @@ -1617,6 +1594,8 @@ msgstr "Görüntüleme uzaklığı değişti: %d" msgid "" "Viewing range changed to %d (the maximum), but limited to %d by game or mod" msgstr "" +"Görüntüleme uzaklığı %d ( en yüksek) olarak değiştirildi, ancak oyun veya " +"mod tarafından %d ile sınırlandırıldı" #: src/client/game.cpp #, fuzzy, c-format @@ -1636,14 +1615,9 @@ msgstr "Telkafes gösteriliyor" msgid "Zoom currently disabled by game or mod" msgstr "Yakınlaştırma şu anda oyun veya mod tarafından devre dışı" -#: src/client/game.cpp -msgid "ok" -msgstr "tamam" - #: src/client/gameui.cpp -#, fuzzy msgid "Chat currently disabled by game or mod" -msgstr "Yakınlaştırma şu anda oyun veya mod tarafından devre dışı" +msgstr "Sohbet şu anda oyun veya mod tarafından devre dışı" #: src/client/gameui.cpp msgid "Chat hidden" @@ -1689,23 +1663,20 @@ msgid "Caps Lock" msgstr "Caps Lock" #: src/client/keycode.cpp -#, fuzzy msgid "Clear Key" -msgstr "Temizle" +msgstr "Temizle Tuşu" #: src/client/keycode.cpp -#, fuzzy msgid "Control Key" -msgstr "CTRL" +msgstr "Kontrol Tuşu" #: src/client/keycode.cpp -#, fuzzy msgid "Delete Key" -msgstr "Sil" +msgstr "Sil Tuşu" #: src/client/keycode.cpp msgid "Down Arrow" -msgstr "" +msgstr "Aşağı Ok" #: src/client/keycode.cpp msgid "End" @@ -1752,9 +1723,8 @@ msgid "Insert" msgstr "Ekle" #: src/client/keycode.cpp -#, fuzzy msgid "Left Arrow" -msgstr "Sol CTRL" +msgstr "Sol Ok" #: src/client/keycode.cpp msgid "Left Button" @@ -1778,9 +1748,8 @@ msgstr "Sol Windows" #. ~ Key name, common on Windows keyboards #: src/client/keycode.cpp -#, fuzzy msgid "Menu Key" -msgstr "Menü" +msgstr "Menü Tuşu" #: src/client/keycode.cpp msgid "Middle Button" @@ -1866,9 +1835,8 @@ msgstr "Sayfa yukarı" #. ~ Usually paired with the Break key #: src/client/keycode.cpp -#, fuzzy msgid "Pause Key" -msgstr "Duraklat" +msgstr "Duraklat Tuşu" #: src/client/keycode.cpp msgid "Play" @@ -1880,14 +1848,12 @@ msgid "Print" msgstr "Yazdır" #: src/client/keycode.cpp -#, fuzzy msgid "Return Key" -msgstr "Return" +msgstr "Return Tuşu" #: src/client/keycode.cpp -#, fuzzy msgid "Right Arrow" -msgstr "Sağ CTRL" +msgstr "Sağ Ok" #: src/client/keycode.cpp msgid "Right Button" @@ -1919,9 +1885,8 @@ msgid "Select" msgstr "Seç" #: src/client/keycode.cpp -#, fuzzy msgid "Shift Key" -msgstr "Shift" +msgstr "Shift Tuşu" #: src/client/keycode.cpp msgid "Sleep" @@ -1941,7 +1906,7 @@ msgstr "Tab" #: src/client/keycode.cpp msgid "Up Arrow" -msgstr "" +msgstr "Yukarı Ok" #: src/client/keycode.cpp msgid "X Button 1" @@ -1952,9 +1917,8 @@ msgid "X Button 2" msgstr "X Düğme 2" #: src/client/keycode.cpp -#, fuzzy msgid "Zoom Key" -msgstr "Yakınlaştır" +msgstr "Yakınlaştır Tuşu" #: src/client/minimap.cpp msgid "Minimap hidden" @@ -1974,27 +1938,39 @@ msgstr "Yüzey kipinde mini harita, Yakınlaştırma x%d" msgid "Minimap in texture mode" msgstr "Doku kipinde mini harita" +#: src/client/shader.cpp +#, fuzzy, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "Web sayfası açılamadı" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +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 "" +msgstr "%s eksik:" #: src/content/mod_configuration.cpp msgid "" "Install and enable the required mods, or disable the mods causing errors." msgstr "" +"Gerekli modları kurun ve etkinleştirin veya hataya neden olan modları devre " +"dışı bırakın." #: src/content/mod_configuration.cpp msgid "" "Note: this may be caused by a dependency cycle, in which case try updating " "the mods." msgstr "" +"Not: Bu bir bağımlılık döngüsünden kaynaklanıyor olabilir, bu durumda " +"modları güncellemeyi deneyin." #: src/content/mod_configuration.cpp -#, fuzzy msgid "Some mods have unsatisfied dependencies:" -msgstr "Katı bağımlılık yok" +msgstr "Bazı modların karşılanmayan bağımlılıkları var:" #: src/gui/guiChatConsole.cpp msgid "Failed to open webpage" @@ -2086,7 +2062,7 @@ msgstr "Tuş zaten kullanımda" #: src/gui/guiKeyChangeMenu.cpp msgid "Keybindings." -msgstr "" +msgstr "Tuş atamaları." #: src/gui/guiKeyChangeMenu.cpp msgid "Left" @@ -2164,6 +2140,19 @@ msgstr "Yakınlaştır" msgid "press key" msgstr "tuşa bas" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +#, fuzzy +msgid "Unable to open URL" +msgstr "Web sayfası açılamadı" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "Değiştir" @@ -2197,6 +2186,7 @@ msgstr "Ses Seviyesi: %%%d" #. 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 "tr" @@ -2204,11 +2194,12 @@ msgstr "tr" msgid "" "Name is not registered. To create an account on this server, click 'Register'" msgstr "" +"Ad kayıtlı değil. Bu sunucuda bir hesap oluşturmak için 'Kaydol' düğmesine " +"tıklayın" #: src/network/clientpackethandler.cpp -#, fuzzy msgid "Name is taken. Please choose another name" -msgstr "Lütfen bir ad seçin!" +msgstr "Ad alındı. Lütfen başka bir ad seçin" #: src/server.cpp #, fuzzy, c-format @@ -2283,7 +2274,7 @@ msgstr "Nehir vadilerini ve kanallarını belirleyen 2B gürültü." #: src/settings_translation_file.cpp msgid "3D" -msgstr "" +msgstr "3B" #: src/settings_translation_file.cpp msgid "3D clouds" @@ -2419,14 +2410,6 @@ msgstr "Etkin nesne gönderme uzaklığı" msgid "Adds particles when digging a node." msgstr "Nodları kazarken parçacıklar ekler." -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" -"Ekranınızın (yalnızca Android/X11 olmayan) dpi yapılandırmasını ayarlayın " -"ör: 4k ekranlar için." - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2449,14 +2432,17 @@ msgstr "" "için her zaman test edin) katı yüzenkara katmanı yaratır." #: src/settings_translation_file.cpp -#, fuzzy msgid "Admin name" -msgstr "Öge adını ekle" +msgstr "Yönetici adı" #: src/settings_translation_file.cpp msgid "Advanced" msgstr "Gelişmiş" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2472,9 +2458,8 @@ msgstr "" "doğal gece ışığı üzerinde çok az etkisi vardır." #: src/settings_translation_file.cpp -#, fuzzy msgid "Always fly fast" -msgstr "Daima uçma ve hızlı" +msgstr "Her zaman hızlı uç" #: src/settings_translation_file.cpp msgid "Ambient occlusion gamma" @@ -2497,14 +2482,12 @@ msgid "Announce to this serverlist." msgstr "Bu sunucu listesine duyur." #: src/settings_translation_file.cpp -#, fuzzy msgid "Anti-aliasing scale" -msgstr "Düzgünleştirme:" +msgstr "Düzgünleştirme ölçeği" #: src/settings_translation_file.cpp -#, fuzzy msgid "Antialiasing method" -msgstr "Düzgünleştirme:" +msgstr "Düzgünleştirme yöntemi" #: src/settings_translation_file.cpp msgid "Append item name" @@ -2518,6 +2501,17 @@ msgstr "Öge adını araç ipucuna ekle." msgid "Apple trees noise" msgstr "Elma ağaçları gürültüsü" +#: 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 "Arm inertia" msgstr "Kol eylemsizliği" @@ -2535,18 +2529,39 @@ msgid "Ask to reconnect after crash" msgstr "Çökmeden sonra yeniden bağlanmak için sor" #: src/settings_translation_file.cpp +#, fuzzy 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 will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +msgstr "" +"Bu uzaklıkta sunucu istemcilere gönderilecek blokları agresifçe\n" +"iyileştirecektir.\n" +"Küçük değerler potansiyel olarak görülebilir işleyici hataları pahasına " +"(bazı bloklar\n" +"su altında, mağaralarda ve de bazen karada işlenmeyecek) performansı " +"oldukça\n" +"iyileştirecektir. \n" +"Bu değeri max_block_send_distance değerinden yükseğe ayarlamak bu\n" +"iyileştirmeyi devre dışı kılar.\n" +"Harita bloğu (16 nod) cinsinden." + +#: src/settings_translation_file.cpp +#, fuzzy +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 "" "Bu uzaklıkta sunucu istemcilere gönderilecek blokları agresifçe\n" "iyileştirecektir.\n" @@ -2561,7 +2576,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Audio" -msgstr "" +msgstr "Ses" #: src/settings_translation_file.cpp msgid "Automatically jump up single-node obstacles." @@ -2588,9 +2603,8 @@ msgid "Base terrain height." msgstr "Taban arazi yüksekliği." #: src/settings_translation_file.cpp -#, fuzzy msgid "Base texture size" -msgstr "Minimum doku boyutu" +msgstr "Temel doku boyutu" #: src/settings_translation_file.cpp msgid "Basic privileges" @@ -2613,14 +2627,18 @@ msgid "Bind address" msgstr "Bağlı adres" #: src/settings_translation_file.cpp -#, fuzzy msgid "Biome API" -msgstr "Biyomlar" +msgstr "Biyom API" #: src/settings_translation_file.cpp msgid "Biome noise" msgstr "Biyom Gürültüsü" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Block cull optimize distance" +msgstr "Blok gönderme iyileştirme uzaklığı" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "Blok gönderme iyileştirme uzaklığı" @@ -2671,9 +2689,8 @@ msgid "Builtin" msgstr "Yerleşik" #: src/settings_translation_file.cpp -#, fuzzy msgid "Camera" -msgstr "Kamera değiştir" +msgstr "Kamera" #: src/settings_translation_file.cpp msgid "Camera smoothing" @@ -2804,9 +2821,8 @@ msgid "Client side modding restrictions" msgstr "İstemci tarafı modlama kısıtlamaları" #: src/settings_translation_file.cpp -#, fuzzy msgid "Client-side Modding" -msgstr "İstemci modlama" +msgstr "İstemci tarafı modlama" #: src/settings_translation_file.cpp #, fuzzy @@ -2842,6 +2858,12 @@ msgstr "Renkli sis" msgid "Colored shadows" msgstr "Renkli gölgeler" +#: 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -2927,9 +2949,8 @@ msgid "Console height" msgstr "Konsol yüksekliği" #: src/settings_translation_file.cpp -#, fuzzy msgid "Content Repository" -msgstr "Çevrim İçi İçerik Deposu" +msgstr "İçerik Deposu" #: src/settings_translation_file.cpp msgid "ContentDB Flag Blacklist" @@ -2958,6 +2979,8 @@ msgid "" "Controls sinking speed in liquid when idling. Negative values will cause\n" "you to rise instead." msgstr "" +"Boştayken sıvı içinde batma hızını belirler. Negatif değerler batmak\n" +"yerine yükselmenize neden olur." #: src/settings_translation_file.cpp msgid "Controls steepness/depth of lake depressions." @@ -2993,7 +3016,7 @@ msgid "" "This also applies to the object crosshair." msgstr "" "Artı saydamlığı (solukluk, 0 ile 255 arasında).\n" -"Ayrıca nesne artı rengi için de geçerlidir" +"Ayrıca nesne artı rengi için de geçerlidir." #: src/settings_translation_file.cpp msgid "Crosshair color" @@ -3007,10 +3030,6 @@ msgstr "" "Artı rengi (R,G,B).\n" "Ayrıca nesne artı rengini de değiştirir" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "DPI" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "Hata ayıklama günlük dosyası boyut eşiği" @@ -3021,7 +3040,7 @@ msgstr "Hata ayıklama günlük düzeyi" #: src/settings_translation_file.cpp msgid "Debugging" -msgstr "" +msgstr "Hata ayıklama" #: src/settings_translation_file.cpp msgid "Dedicated server step" @@ -3065,6 +3084,23 @@ msgstr "" "eder,\n" "ancak aynı zamanda daha fazla kaynak kullanır." +#: 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 " +"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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" +"Eski istemcilerin bağlanmasına izin vermemek için etkinleştirin.\n" +"Eski istemciler yeni sunuculara bağlanırken çökmeyecek kadar uyumludur,\n" +"ancak beklediğiniz tüm yeni özellikleri desteklemiyor olabilir." + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "Ağaçların elması olacağı alanları belirler." @@ -3128,6 +3164,9 @@ msgid "" "methods.\n" "Value of 2 means taking 2x2 = 4 samples." msgstr "" +"FSAA ve SSAA düzgünleştirme yöntemleri için örnekleme ızgarasının boyutunu " +"tanımlar.\n" +"2 değeri 2x2 = 4 örnek alınması anlamına gelir." #: src/settings_translation_file.cpp msgid "Defines the width of the river channel." @@ -3196,9 +3235,8 @@ msgid "Desynchronize block animation" msgstr "Blok animasyonlarını eşzamansız yap" #: src/settings_translation_file.cpp -#, fuzzy msgid "Developer Options" -msgstr "Dekorasyonlar" +msgstr "Geliştirici Seçenekleri" #: src/settings_translation_file.cpp msgid "Digging particles" @@ -3263,6 +3301,11 @@ msgstr "Hepsini etkinleştir" msgid "Enable Bloom Debug" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Debanding" +msgstr "Hasar Etkin" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3289,6 +3332,11 @@ msgstr "" "Doğru ise \"yumuşak gölgeler\" yapmak için Poisson diski kullanır. Değilse " "PCF filtreleme kullanır." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Post Processing" +msgstr "Joystick'leri etkinleştir" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "" @@ -3320,7 +3368,7 @@ msgstr "Joystick'leri etkinleştir" #: src/settings_translation_file.cpp msgid "Enable joysticks. Requires a restart to take effect" -msgstr "" +msgstr "Joystick'leri etkinleştir. Etkili olması için yeniden başlatma gerekir" #: src/settings_translation_file.cpp msgid "Enable mod channels support." @@ -3334,6 +3382,11 @@ msgstr "Mod güvenliğini etkinleştir" 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 "Rastgele kullanıcı girişini etkinleştir (yalnızca test için)." + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "Rastgele kullanıcı girişini etkinleştir (yalnızca test için)." @@ -3348,7 +3401,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Enable split login/register" -msgstr "" +msgstr "Ayrı oturum açmayı/kaydolmayı etkinleştir" #: src/settings_translation_file.cpp msgid "" @@ -3362,6 +3415,11 @@ msgstr "" "Eski istemciler yeni sunuculara bağlanırken çökmeyecek kadar uyumludur,\n" "ancak beklediğiniz tüm yeni özellikleri desteklemiyor olabilir." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable touchscreen" +msgstr "Dokunmatik ekran" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3373,14 +3431,6 @@ msgstr "" "Sunucuya bağlanırken uzak sunucular medya (ör: dokular) indirmek için daha\n" "hızlı bir yol sunar." -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" -"Köşe arabellek nesnelerini etkinleştirin.\n" -"Bu grafik performansını büyük ölçüde artırır." - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3420,6 +3470,19 @@ msgstr "Envanter ögelerinin animasyonunu etkinleştirir." msgid "Enables caching of facedir rotated meshes." msgstr "Yüz yönü döndürülmüş kafeslerin önbelleklenmesini etkinleştirir." +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -3463,7 +3526,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "FPS" -msgstr "" +msgstr "FPS" #: src/settings_translation_file.cpp msgid "FPS when unfocused or paused" @@ -3519,9 +3582,8 @@ msgid "Filmic tone mapping" msgstr "Filmsel ton eşleme" #: src/settings_translation_file.cpp -#, fuzzy msgid "Filtering and Antialiasing" -msgstr "Düzgünleştirme:" +msgstr "Filtreleme ve Düzgünleştirme" #: src/settings_translation_file.cpp msgid "First of 4 2D noises that together define hill/mountain range height." @@ -3585,9 +3647,8 @@ msgid "Fog start" msgstr "Sis başlangıcı" #: src/settings_translation_file.cpp -#, fuzzy msgid "Font" -msgstr "Yazı tipi boyutu" +msgstr "Yazı tipi" #: src/settings_translation_file.cpp msgid "Font bold by default" @@ -3725,7 +3786,7 @@ msgstr "Tam ekran kipi." #: src/settings_translation_file.cpp msgid "GUI" -msgstr "" +msgstr "Grafiksel arayüz" #: src/settings_translation_file.cpp msgid "GUI scaling" @@ -3781,14 +3842,12 @@ msgid "Graphics" msgstr "Grafik" #: src/settings_translation_file.cpp -#, fuzzy msgid "Graphics Effects" -msgstr "Grafik" +msgstr "Grafik Efektleri" #: src/settings_translation_file.cpp -#, fuzzy msgid "Graphics and Audio" -msgstr "Grafik" +msgstr "Grafikler ve Ses" #: src/settings_translation_file.cpp msgid "Gravity" @@ -3808,7 +3867,7 @@ msgstr "HTTP modları" #: src/settings_translation_file.cpp msgid "HUD" -msgstr "" +msgstr "HUD" #: src/settings_translation_file.cpp #, fuzzy @@ -3851,10 +3910,8 @@ msgid "Heat noise" msgstr "Isı gürültüsü" #: src/settings_translation_file.cpp -#, fuzzy msgid "Height component of the initial window size." -msgstr "" -"İlk pencere boyutunun yükseklik bileşeni. Tam ekran kipinde yok sayılır." +msgstr "İlk pencere boyutunun yükseklik bileşeni." #: src/settings_translation_file.cpp msgid "Height noise" @@ -4305,7 +4362,7 @@ msgstr "Zıplama hızı" #: src/settings_translation_file.cpp msgid "Keyboard and Mouse" -msgstr "" +msgstr "Klavye ve Fare" #: src/settings_translation_file.cpp msgid "Kick players who sent more than X messages per 10 seconds." @@ -4358,17 +4415,17 @@ msgstr "" #: src/settings_translation_file.cpp #, fuzzy msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" "Sunucunun tık uzunluğu ve nesnelerin genellikle ağ üzerinden güncelleneceği\n" "aralık." #: src/settings_translation_file.cpp -#, fuzzy msgid "Length of liquid waves." -msgstr "Dalgalanan sıvılar dalga hızı" +msgstr "Sıvı dalgalarının uzunluğu." #: src/settings_translation_file.cpp #, fuzzy @@ -4435,9 +4492,8 @@ msgid "Light curve low gradient" msgstr "Işık eğrisi düşük gradyan" #: src/settings_translation_file.cpp -#, fuzzy msgid "Lighting" -msgstr "Yumuşak Aydınlatma" +msgstr "Aydınlatma" #: src/settings_translation_file.cpp msgid "" @@ -4535,10 +4591,6 @@ msgstr "" "Sis ve gökyüzü renklerini gün saatine (şafak/günbatımı) ve bakış yönüne " "bağlı değiştir." -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "Tüm sıvıları opak yapar" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "Hafıza deposu için harita sıkıştırma düzeyi" @@ -4594,11 +4646,14 @@ msgid "Map generation attributes specific to Mapgen v5." msgstr "Mapgen v5'e özgü harita üretim değerleri." #: 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" "When the 'snowbiomes' flag is enabled jungles are automatically enabled and\n" -"the 'jungles' flag is ignored." +"the 'jungles' flag is ignored.\n" +"The 'temples' flag disables generation of desert temples. Normal dungeons " +"will appear instead." msgstr "" "Mapgen v6'ya özgü harita üretim değerleri.\n" "'snowbiomes' bayrağı yeni 5 biyom sistemini etkinleştirir.\n" @@ -4644,10 +4699,6 @@ msgstr "Harita bloğu ızgara üretim gecikmesi" msgid "Mapblock mesh generation threads" msgstr "Harita bloğu ızgara üretim gecikmesi" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "Harita Bloğu ızgara üretecinin Harita Bloğu önbellek boyutu MB" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "Harita bloğu boşaltma zaman aşımı" @@ -4917,6 +4968,11 @@ msgstr "Sohbete yazılacak en az günlük düzeyi." msgid "Minimap scan height" msgstr "Mini harita tarama yüksekliği" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Minimum dig repetition interval" +msgstr "Yerleştirme tekrarlama aralığı" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "Her harita yığını için rastgele büyük mağara sayısının alt sınırı." @@ -4931,7 +4987,7 @@ msgstr "Mip eşleme" #: src/settings_translation_file.cpp msgid "Miscellaneous" -msgstr "" +msgstr "Çeşitli" #: src/settings_translation_file.cpp #, fuzzy @@ -4939,9 +4995,8 @@ msgid "Mod Profiler" msgstr "Profilci" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mod Security" -msgstr "Güvenlik" +msgstr "Mod Güvenliği" #: src/settings_translation_file.cpp msgid "Mod channels" @@ -4988,6 +5043,11 @@ msgstr "Fare hassasiyeti" msgid "Mouse sensitivity multiplier." msgstr "Fare hassasiyet çarpanı." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Movement threshold" +msgstr "Oyuk eşiği" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "Çamur gürültüsü" @@ -5041,7 +5101,6 @@ msgstr "" "Bu değer ana menüden başlatırken geçersiz kılınır." #: src/settings_translation_file.cpp -#, fuzzy msgid "Networking" msgstr "Ağ" @@ -5107,7 +5166,6 @@ msgstr "" "arasında bir dengedir." #: src/settings_translation_file.cpp -#, fuzzy msgid "Number of messages a player may send per 10 seconds." msgstr "Bir oyuncunun her 10 saniyede bir gönderebileceği ileti sayısı." @@ -5127,10 +5185,6 @@ msgstr "" msgid "Occlusion Culling" msgstr "Sunucu tarafı oklüzyon ayırma" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "Opak sıvılar" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -5147,9 +5201,14 @@ msgstr "" "Pencere odağı kaybolduğunda duraklat menüsünü aç. Bir formspec açıksa\n" "duraklamaz." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "OpenGL debug" +msgstr "Mapgen hata ayıklama" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." -msgstr "" +msgstr "Sohbet web bağlantısı rengi için isteğe bağlı geçersiz kılma." #: src/settings_translation_file.cpp #, fuzzy @@ -5288,6 +5347,15 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "Sıvı içeren büyük mağaraların oranı." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Protocol version minimum" +msgstr "Protokol sürümü uyumsuz. " + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -5306,6 +5374,10 @@ msgstr "Nehirler etrafında vadiler yapmak için araziyi yükseltir." msgid "Random input" msgstr "Rasgele giriş" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "Son Sohbet İletileri" @@ -5315,7 +5387,6 @@ msgid "Regular font path" msgstr "Normal yazı tipi konumu" #: src/settings_translation_file.cpp -#, fuzzy msgid "Remember screen size" msgstr "Ekran boyutunu hatırla" @@ -5455,9 +5526,8 @@ msgstr "" "ölçeklendiğinde bazı kenar piksellerde bulanıklığa neden olur." #: src/settings_translation_file.cpp -#, fuzzy msgid "Screen" -msgstr "Ekran:" +msgstr "Ekran" #: src/settings_translation_file.cpp msgid "Screen height" @@ -5490,9 +5560,8 @@ msgstr "" "Öntanımlı kalite için 0 kullanın." #: src/settings_translation_file.cpp -#, fuzzy msgid "Screenshots" -msgstr "Ekran yakala" +msgstr "Ekran görüntüleri" #: src/settings_translation_file.cpp msgid "Seabed noise" @@ -5517,8 +5586,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5588,9 +5657,8 @@ msgstr "" "18 = 4D \"Mandelbulb\" Julia seti." #: src/settings_translation_file.cpp -#, fuzzy msgid "Server" -msgstr "Sunucu URL'si" +msgstr "Sunucu" #: src/settings_translation_file.cpp #, fuzzy @@ -5598,9 +5666,8 @@ msgid "Server Gameplay" msgstr "Sunucu adı" #: src/settings_translation_file.cpp -#, fuzzy msgid "Server Security" -msgstr "Sunucu Açıklaması" +msgstr "Sunucu Güvenliği" #: src/settings_translation_file.cpp msgid "Server URL" @@ -5664,8 +5731,9 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" "Dili ayarlayın. Sistem dilini kullanmak için boş bırakın.\n" @@ -5715,6 +5783,10 @@ msgid "" "Bright colors will bleed over the neighboring objects." 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 #, fuzzy msgid "Set to true to enable waving leaves." @@ -5763,11 +5835,11 @@ msgid "Shaders" msgstr "Gölgelemeler" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" "Gölgelemeler gelişmiş görsel efektlere izin verir ve bazı ekran kartlarında " "performansı\n" @@ -5853,16 +5925,6 @@ msgstr "" "Bu değeri düşürmek mağara ve zindan yoğunluğunu azaltır.\n" "Bu değerin, değiştirilmesi özel kullanım içindir, değiştirilmemesi önerilir." -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" -"Izgara üretecinin Harita Bloğu önbellek boyutu. Bunu artırmak önbellek\n" -"vuruş yüzdesini artırır, ana işlem parçasından kopyalanan veriyi azaltır,\n" -"sonuç olarak yırtılmayı azaltır." - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "Gökyüzü Gövdesi Yörünge Eğimi" @@ -5899,7 +5961,7 @@ msgstr "Yumuşak aydınlatma" #, fuzzy msgid "" "Smooths rotation of camera when in cinematic mode, 0 to disable. Enter " -"cinematic mode by using the key set in Change Keys." +"cinematic mode by using the key set in Controls." msgstr "Sinematik kipte kamera dönüşünü yumuşatır. 0 devre dışı bırakır." #: src/settings_translation_file.cpp @@ -5921,6 +5983,15 @@ msgstr "Sızma hızı, saniye başına nod cinsinden." msgid "Soft shadow radius" msgstr "Yumuşak gölge yarıçapı" +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "Ses" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sound Extensions Blacklist" +msgstr "ContentDB: Kara Liste" + #: src/settings_translation_file.cpp msgid "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -6128,19 +6199,39 @@ msgstr "" "`/profiler save [biçim]` biçim olmadan çağırıldığında,\n" "profillerin kayıt edileceği öntanımlı biçim." +#: 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 #, fuzzy msgid "" "The file path relative to your world path in which profiles will be saved to." msgstr "Profillerin içine kaydedileceği, dünya konumuna bağlı dosya konumu." +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "Kullanılacak joystick'in tanımlayıcısı" #: src/settings_translation_file.cpp #, fuzzy -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" "Dokunmatik ekran etkileşiminin başlaması için gereken piksel cinsinde " "uzunluk." @@ -6159,6 +6250,16 @@ msgstr "" "Öntanımlı 1.0'dır (1/2 nod).\n" "Dalgalanan sıvılar etkin kılınmalıdır." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"The minimum time in seconds it takes between digging nodes when holding\n" +"the dig button." +msgstr "" +"Yerleştirme tuşuna basılı tutarken tekrarlanan düğüm yerleşimleri arasında " +"geçen\n" +"saniye cinsinden süre." + #: src/settings_translation_file.cpp msgid "The network interface that the server listens on." msgstr "Sunucunun dinlediği ağ arayüzü." @@ -6195,7 +6296,7 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" "İşleme arka ucu.\n" "Bunu değiştirdikten sonra yeniden başlatma gerekir.\n" @@ -6283,6 +6384,10 @@ msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "" "Birlikte tepe/dağ aralık yüksekliğini belirleyen 4 2D gürültüden üçüncüsü." +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -6328,29 +6433,26 @@ msgid "Tooltip delay" msgstr "İpucu gecikmesi" #: src/settings_translation_file.cpp -#, fuzzy msgid "Touchscreen" -msgstr "Dokunmatik ekran eşiği" +msgstr "Dokunmatik ekran" #: src/settings_translation_file.cpp -#, fuzzy msgid "Touchscreen sensitivity" -msgstr "Fare hassasiyeti" +msgstr "Dokunmatik ekran hassasiyeti" #: src/settings_translation_file.cpp -#, fuzzy msgid "Touchscreen sensitivity multiplier." -msgstr "Fare hassasiyet çarpanı." - -#: src/settings_translation_file.cpp -#, fuzzy -msgid "Touchscreen threshold" -msgstr "Dokunmatik ekran eşiği" +msgstr "Dokunmatik ekran hassasiyet çarpanı." #: src/settings_translation_file.cpp msgid "Tradeoffs for performance" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Translucent liquids" +msgstr "Opak sıvılar" + #: src/settings_translation_file.cpp msgid "Transparency Sorting Distance" msgstr "" @@ -6388,9 +6490,12 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"URL to JSON file which provides information about the newest Minetest release" -msgstr "" +"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 "En yeni Minetest sürümü hakkında bilgi sağlayan JSON dosyasının URL'si" #: src/settings_translation_file.cpp msgid "URL to the server list displayed in the Multiplayer Tab." @@ -6500,11 +6605,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "User Interfaces" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "VBO" +msgstr "Kullanıcı Arayüzleri" #: src/settings_translation_file.cpp msgid "VSync" @@ -6571,6 +6672,8 @@ msgid "" "Vertical screen synchronization. Your system may still force VSync on even " "if this is disabled." msgstr "" +"Dikey ekran eşzamanlaması. Bu devre dışı bırakılsa bile sisteminiz VSync'i " +"açmaya zorlayabilir." #: src/settings_translation_file.cpp msgid "Video driver" @@ -6596,6 +6699,10 @@ msgstr "Sanal joystick Aux1 düğmesini tetikler" msgid "Volume" msgstr "Ses" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Volume of all sounds.\n" @@ -6604,6 +6711,16 @@ msgstr "" "Tüm seslerin yüksekliği.\n" "Ses sistemi etkin kılınmalıdır." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volume when unfocused" +msgstr "Odaklanmadığında veya duraklatıldığında FPS" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volumetric lighting" +msgstr "Yumuşak aydınlatma" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6743,7 +6860,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Whether the window is maximized." -msgstr "" +msgstr "Pencerenin büyütülüp büyütülmeyeceği." #: src/settings_translation_file.cpp msgid "" @@ -6779,10 +6896,8 @@ msgstr "" "ile aynı etkiye sahiptir)." #: src/settings_translation_file.cpp -#, fuzzy msgid "Width component of the initial window size." -msgstr "" -"İlk pencere boyutunun genişlik bileşeni. Tam ekran kipinde yok sayılır." +msgstr "İlk pencere boyutunun genişlik bileşeni." #: src/settings_translation_file.cpp msgid "Width of the selection box lines around nodes." @@ -6790,7 +6905,7 @@ msgstr "Nodlar etrafındaki seçim kutusu çizgilerinin genişliği." #: src/settings_translation_file.cpp msgid "Window maximized" -msgstr "" +msgstr "Pencere büyütüldü" #: src/settings_translation_file.cpp msgid "" @@ -6888,7 +7003,7 @@ msgstr "Deniz yatağının Y-seviyesi." #: src/settings_translation_file.cpp msgid "cURL" -msgstr "" +msgstr "cURL" #: src/settings_translation_file.cpp msgid "cURL file download timeout" @@ -6902,12 +7017,18 @@ msgstr "cURL etkileşimli zaman aşımı" msgid "cURL parallel limit" msgstr "cURL paralel sınırı" +#~ msgid "- Address: " +#~ msgstr "- Adres: " + #~ msgid "- Creative Mode: " #~ msgstr "- Yaratıcı Kip: " #~ msgid "- Damage: " #~ msgstr "- Hasar: " +#~ msgid "- Port: " +#~ msgstr "- Port: " + #~ msgid "" #~ "0 = parallax occlusion with slope information (faster).\n" #~ "1 = relief mapping (slower, more accurate)." @@ -6942,6 +7063,13 @@ msgstr "cURL paralel sınırı" #~ "Yerel bir sunucu başlatmak için bunu boş bırakın.\n" #~ "Ana menüdeki adres alanının bu ayarı geçersiz kılacağını unutmayın." +#~ msgid "" +#~ "Adjust dpi configuration to your screen (non X11/Android only) e.g. for " +#~ "4k screens." +#~ msgstr "" +#~ "Ekranınızın (yalnızca Android/X11 olmayan) dpi yapılandırmasını ayarlayın " +#~ "ör: 4k ekranlar için." + #~ msgid "" #~ "Adjust the gamma encoding for the light tables. Higher numbers are " #~ "brighter.\n" @@ -6987,6 +7115,9 @@ msgstr "cURL paralel sınırı" #~ msgid "Bits per pixel (aka color depth) in fullscreen mode." #~ msgstr "Tam ekran kipinde piksel başına bit (renk derinliği)." +#~ msgid "Block bounds shown for all blocks" +#~ msgstr "Blok sınırları tüm bloklar için gösteriliyor" + #~ msgid "Bump Mapping" #~ msgstr "Tümsek Eşleme" @@ -7012,6 +7143,9 @@ msgstr "cURL paralel sınırı" #~ msgid "Center of light curve mid-boost." #~ msgstr "Işık eğrisi orta-artırmanın merkezi." +#~ msgid "Change Keys" +#~ msgstr "Tuşları değiştir" + #, fuzzy #~ msgid "Change keys" #~ msgstr "Tuşları değiştir" @@ -7085,6 +7219,38 @@ msgstr "cURL paralel sınırı" #~ "Tünellerin genişliğini denetler, daha küçük bir değer daha geniş tüneller " #~ "yaratır." +#, c-format +#~ msgid "" +#~ "Controls:\n" +#~ "- %s: move forwards\n" +#~ "- %s: move backwards\n" +#~ "- %s: move left\n" +#~ "- %s: move right\n" +#~ "- %s: jump/climb up\n" +#~ "- %s: dig/punch/use\n" +#~ "- %s: place/use\n" +#~ "- %s: sneak/climb down\n" +#~ "- %s: drop item\n" +#~ "- %s: inventory\n" +#~ "- Mouse: turn/look\n" +#~ "- Mouse wheel: select item\n" +#~ "- %s: chat\n" +#~ msgstr "" +#~ "Kontroller:\n" +#~ "- %s: ileri hareket\n" +#~ "- %s: geri hareket\n" +#~ "- %s: sola hareket\n" +#~ "- %s: sağa hareket\n" +#~ "- %s: zıpla/tırman\n" +#~ "- %s: kaz/vur/kullan\n" +#~ "- %s: yerleştir/kullan\n" +#~ "- %s: sız/aşağı in\n" +#~ "- %s: ögeyi at\n" +#~ "- %s: envanter\n" +#~ "- Fare: dön/bak\n" +#~ "- Fare tekerleği: öge seç\n" +#~ "- %s: sohbet\n" + #~ msgid "Creative" #~ msgstr "Yaratıcı" @@ -7094,6 +7260,9 @@ msgstr "cURL paralel sınırı" #~ msgid "Crosshair color (R,G,B)." #~ msgstr "Artı rengi (R,G,B)." +#~ msgid "DPI" +#~ msgstr "DPI" + #~ msgid "Damage" #~ msgstr "Hasar" @@ -7189,6 +7358,13 @@ msgstr "cURL paralel sınırı" #~ msgid "Enable register confirmation" #~ msgstr "Kayıt onayını etkinleştir" +#~ msgid "" +#~ "Enable vertex buffer objects.\n" +#~ "This should greatly improve graphics performance." +#~ msgstr "" +#~ "Köşe arabellek nesnelerini etkinleştirin.\n" +#~ "Bu grafik performansını büyük ölçüde artırır." + #~ msgid "Enabled" #~ msgstr "Etkin" @@ -7498,6 +7674,9 @@ msgstr "cURL paralel sınırı" #~ msgid "Instrumentation" #~ msgstr "Belgeleme" +#~ msgid "Invalid gamespec." +#~ msgstr "Geçersiz oyun özellikleri." + #~ msgid "Inventory key" #~ msgstr "Envanter tuşu" @@ -8191,6 +8370,12 @@ msgstr "cURL paralel sınırı" #~ "DirectX'in LuaJIT ile çalışmasını sağlar. Sorunlara neden olursa devre " #~ "dışı bırakın." +#~ msgid "Makes all liquids opaque" +#~ msgstr "Tüm sıvıları opak yapar" + +#~ msgid "Mapblock mesh generator's MapBlock cache size in MB" +#~ msgstr "Harita Bloğu ızgara üretecinin Harita Bloğu önbellek boyutu MB" + #~ msgid "Menus" #~ msgstr "Menüler" @@ -8429,15 +8614,22 @@ msgstr "cURL paralel sınırı" #~ msgid "Simple Leaves" #~ msgstr "Basit Yapraklar" +#~ msgid "" +#~ "Size of the MapBlock cache of the mesh generator. Increasing this will\n" +#~ "increase the cache hit %, reducing the data being copied from the main\n" +#~ "thread, thus reducing jitter." +#~ msgstr "" +#~ "Izgara üretecinin Harita Bloğu önbellek boyutu. Bunu artırmak önbellek\n" +#~ "vuruş yüzdesini artırır, ana işlem parçasından kopyalanan veriyi " +#~ "azaltır,\n" +#~ "sonuç olarak yırtılmayı azaltır." + #~ msgid "Smooth Lighting" #~ msgstr "Yumuşak Aydınlatma" #~ msgid "Smooths rotation of camera. 0 to disable." #~ msgstr "Kamera dönüşünü yumuşatır. 0 devre dışı bırakır." -#~ msgid "Sound" -#~ msgstr "Ses" - #~ msgid "Special" #~ msgstr "Özel" @@ -8497,6 +8689,9 @@ msgstr "cURL paralel sınırı" #~ msgid "Touch threshold (px):" #~ msgstr "Dokunuş eşiği: (px)" +#~ msgid "Touchscreen threshold" +#~ msgstr "Dokunmatik ekran eşiği" + #~ msgid "Trilinear Filter" #~ msgstr "Trilineer Filtre" @@ -8541,6 +8736,9 @@ msgstr "cURL paralel sınırı" #~ "0'da ise düzgünleştirme kapalıdır.\n" #~ "Ayarları değiştirdikten sonra yenileme gereklidir." +#~ msgid "VBO" +#~ msgstr "VBO" + #~ msgid "Variation of hill height and lake depth on floatland smooth terrain." #~ msgstr "" #~ "Tepe yüksekliğinin ve göl derinliğinin yüzenkara düz arazide değişimi." @@ -8632,8 +8830,14 @@ msgstr "cURL paralel sınırı" #~ msgid "You died." #~ msgstr "Öldün." +#~ msgid "You have no games installed." +#~ msgstr "Kurulu oyununuz yok." + #~ msgid "Z" #~ msgstr "Z" #~ msgid "needs_fallback_font" #~ msgstr "no" + +#~ msgid "ok" +#~ msgstr "tamam" diff --git a/po/tt/minetest.po b/po/tt/minetest.po index b6773dca5..0541722b9 100644 --- a/po/tt/minetest.po +++ b/po/tt/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" "PO-Revision-Date: 2023-10-29 05:22+0000\n" "Last-Translator: Timur Seber \n" "Language-Team: Tatar ]" +msgid "[all | ] [-t]" msgstr "[all | <команда>]" -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" -msgstr "Ярар" - #: builtin/fstk/ui.lua msgid "" msgstr "<мөмкин түгел>" @@ -108,6 +104,10 @@ msgstr "Хата килеп чыкты:" msgid "Main menu" msgstr "Төп меню" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "Ярар" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Яңадан тоташу" @@ -137,174 +137,181 @@ msgstr "" msgid "We support protocol versions between version $1 and $2." msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download \"$1\"" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "Төп менюга кире кайту" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "Уеннар" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +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 "Mods" +msgstr "Модлар" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "Яңартулар юк" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "Бетерү" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "Яңарту" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "" + +#: 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 "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "Баш тарту" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua #, fuzzy msgid "Dependencies:" msgstr "Бәйләнешләр:" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download \"$1\"" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "Уеннар" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "Урнаштыру" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "$1 урнаштыру" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "Йөкләнә..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "Модлар" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "Яңартулар юк" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "Табылмады" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "Бетерү" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "Яңарту" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" msgstr "" #: builtin/mainmenu/content/pkgmgr.lua @@ -452,10 +459,20 @@ msgstr "Булдыру" msgid "Decorations" msgstr "" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." msgstr "" +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "" @@ -818,10 +835,6 @@ msgstr "" msgid "Back" msgstr "" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp #, fuzzy @@ -832,7 +845,8 @@ msgstr "Чат" msgid "Clear" msgstr "Чистарту" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "" @@ -1036,6 +1050,16 @@ msgstr "Уен урнаштыру" msgid "Install games from ContentDB" msgstr "" +#: builtin/mainmenu/tab_local.lua +msgid "Minetest 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 " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "Яңа" @@ -1070,7 +1094,7 @@ msgid "Start Game" msgstr "" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." +msgid "You need to install a game before you can create a world." msgstr "" #: builtin/mainmenu/tab_online.lua @@ -1151,18 +1175,10 @@ msgstr "" msgid "Rebuilding shaders..." msgstr "" -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "" - #: src/client/clientlauncher.cpp msgid "Could not find or load game: " msgstr "" -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "" - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "Төп меню" @@ -1187,27 +1203,21 @@ msgstr "" msgid "Provided world path doesn't exist: " msgstr "" -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "Медиа-файллар..." + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp msgid "" "\n" "Check debug.txt for details." msgstr "" -#: src/client/game.cpp -#, fuzzy -msgid "- Address: " -msgstr "- Адрес: " - #: src/client/game.cpp #, fuzzy msgid "- Mode: " msgstr "- Режим: " -#: src/client/game.cpp -#, fuzzy -msgid "- Port: " -msgstr "- Порт: " - #: src/client/game.cpp msgid "- Public: " msgstr "" @@ -1242,10 +1252,6 @@ msgstr "" msgid "Block bounds hidden" msgstr "" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "" @@ -1290,6 +1296,10 @@ msgstr "" msgid "Connecting to server..." msgstr "" +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "" @@ -1298,32 +1308,13 @@ msgstr "" msgid "Continue" msgstr "Дәвам итү" -#: src/client/game.cpp -#, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" - #: src/client/game.cpp msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1403,6 +1394,10 @@ msgstr "" msgid "Fog enabled" msgstr "" +#: src/client/game.cpp +msgid "Fog enabled by game or mod" +msgstr "" + #: src/client/game.cpp msgid "Game info:" msgstr "" @@ -1423,10 +1418,6 @@ msgstr "" msgid "KiB/s" msgstr "КБ/с" -#: src/client/game.cpp -msgid "Media..." -msgstr "Медиа-файллар..." - #: src/client/game.cpp msgid "MiB/s" msgstr "МБ/с" @@ -1582,10 +1573,6 @@ msgstr "" msgid "Zoom currently disabled by game or mod" msgstr "" -#: src/client/game.cpp -msgid "ok" -msgstr "ярар" - #: src/client/gameui.cpp msgid "Chat currently disabled by game or mod" msgstr "" @@ -1912,6 +1899,15 @@ msgstr "" msgid "Minimap in texture mode" msgstr "" +#: src/client/shader.cpp +#, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2103,6 +2099,18 @@ msgstr "" msgid "press key" msgstr "" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Unable to open URL" +msgstr "" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "Үзгәртү" @@ -2136,6 +2144,7 @@ msgstr "Тавыш көче: %d%%" #. 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 "tt" @@ -2321,12 +2330,6 @@ msgstr "" msgid "Adds particles when digging a node." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2349,6 +2352,10 @@ msgstr "" msgid "Advanced" msgstr "Өстәмә" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2402,6 +2409,17 @@ msgstr "" msgid "Apple trees noise" 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 "Arm inertia" msgstr "" @@ -2423,12 +2441,21 @@ msgid "" "clients.\n" "Small values potentially improve performance a lot, at the expense of " "visible\n" -"rendering glitches (some blocks will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +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 @@ -2492,6 +2519,10 @@ msgstr "Биомнар" msgid "Biome noise" msgstr "" +#: src/settings_translation_file.cpp +msgid "Block cull optimize distance" +msgstr "" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "" @@ -2706,6 +2737,12 @@ msgstr "" msgid "Colored shadows" 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -2837,11 +2874,6 @@ msgid "" "Also controls the object crosshair color" msgstr "" -#: src/settings_translation_file.cpp -#, fuzzy -msgid "DPI" -msgstr "DPI" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "" @@ -2891,6 +2923,19 @@ msgid "" "but also uses more resources." 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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "" @@ -3075,6 +3120,11 @@ msgstr "" msgid "Enable Bloom Debug" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Debanding" +msgstr "Барысын да кабызу" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3094,6 +3144,10 @@ msgid "" "filtering." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable Post Processing" +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "" @@ -3136,6 +3190,10 @@ msgstr "" msgid "Enable mouse wheel (scroll) for item selection in hotbar." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable random mod loading (mainly used for testing)." +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3159,6 +3217,10 @@ msgid "" "expecting." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable touchscreen" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3167,12 +3229,6 @@ msgid "" "when connecting to the server." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3202,6 +3258,19 @@ msgstr "" msgid "Enables caching of facedir rotated meshes." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -4004,9 +4073,10 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" #: src/settings_translation_file.cpp @@ -4152,10 +4222,6 @@ msgid "" "Make fog and sky colors depend on daytime (dawn/sunset) and view direction." msgstr "" -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "" @@ -4204,7 +4270,9 @@ 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." +"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 @@ -4239,10 +4307,6 @@ msgstr "" msgid "Mapblock mesh generation threads" msgstr "" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "" @@ -4484,6 +4548,10 @@ msgstr "" msgid "Minimap scan height" msgstr "" +#: src/settings_translation_file.cpp +msgid "Minimum dig repetition interval" +msgstr "" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "" @@ -4552,6 +4620,10 @@ msgstr "" msgid "Mouse sensitivity multiplier." msgstr "" +#: src/settings_translation_file.cpp +msgid "Movement threshold" +msgstr "" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "" @@ -4660,10 +4732,6 @@ msgstr "" msgid "Occlusion Culling" msgstr "" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -4676,6 +4744,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "OpenGL debug" +msgstr "" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "" @@ -4785,6 +4857,14 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "" +#: src/settings_translation_file.cpp +msgid "Protocol version minimum" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -4800,6 +4880,10 @@ msgstr "" msgid "Random input" msgstr "" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "" @@ -4988,8 +5072,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5107,7 +5191,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" @@ -5140,6 +5224,10 @@ msgid "" "Bright colors will bleed over the neighboring objects." 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 "Set to true to enable waving leaves." msgstr "" @@ -5179,8 +5267,7 @@ msgstr "" msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" #: src/settings_translation_file.cpp @@ -5250,13 +5337,6 @@ msgid "" "recommended." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "" @@ -5292,7 +5372,7 @@ 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 Change Keys." +"cinematic mode by using the key set in Controls." msgstr "" #: src/settings_translation_file.cpp @@ -5313,6 +5393,14 @@ msgstr "" msgid "Soft shadow radius" 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 "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -5469,17 +5557,37 @@ msgid "" "when calling `/profiler save [format]` without format." 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 "" "The file path relative to your world path in which profiles will be saved to." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "" #: src/settings_translation_file.cpp -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" #: src/settings_translation_file.cpp @@ -5490,6 +5598,12 @@ msgid "" "Default is 1.0 (1/2 node)." 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 "The network interface that the server listens on." msgstr "" @@ -5516,7 +5630,7 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" #: src/settings_translation_file.cpp @@ -5573,6 +5687,10 @@ msgstr "" msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "" +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -5620,11 +5738,11 @@ msgid "Touchscreen sensitivity multiplier." msgstr "" #: src/settings_translation_file.cpp -msgid "Touchscreen threshold" +msgid "Tradeoffs for performance" msgstr "" #: src/settings_translation_file.cpp -msgid "Tradeoffs for performance" +msgid "Translucent liquids" msgstr "" #: src/settings_translation_file.cpp @@ -5662,7 +5780,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 "" #: src/settings_translation_file.cpp @@ -5760,10 +5880,6 @@ msgstr "" msgid "User Interfaces" msgstr "" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "" @@ -5850,12 +5966,24 @@ msgstr "" msgid "Volume" msgstr "" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +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 "Volumetric lighting" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6092,15 +6220,30 @@ msgstr "" msgid "cURL parallel limit" msgstr "" +#, fuzzy +#~ msgid "- Address: " +#~ msgstr "- Адрес: " + +#, fuzzy +#~ msgid "- Port: " +#~ msgstr "- Порт: " + #~ msgid "3d" #~ msgstr "өч үлчәмле" #~ msgid "Creative" #~ msgstr "Иҗади" +#, fuzzy +#~ msgid "DPI" +#~ msgstr "DPI" + #~ msgid "Damage" #~ msgstr "Зыян" #, fuzzy #~ msgid "You died." #~ msgstr "Сез үлдегез" + +#~ msgid "ok" +#~ msgstr "ярар" diff --git a/po/uk/minetest.po b/po/uk/minetest.po index 5567affc3..045a723e7 100644 --- a/po/uk/minetest.po +++ b/po/uk/minetest.po @@ -2,18 +2,18 @@ msgid "" msgstr "" "Project-Id-Version: Ukrainian (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" -"PO-Revision-Date: 2023-12-02 05:17+0000\n" -"Last-Translator: YearOfFuture \n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" +"PO-Revision-Date: 2024-08-04 22:09+0000\n" +"Last-Translator: Yof \n" "Language-Team: Ukrainian \n" "Language: uk\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%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.3-dev\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" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -72,8 +72,8 @@ msgid "Command not available: " msgstr "Команда недоступна: " #: builtin/common/chatcommands.lua -msgid "Get help for commands" -msgstr "Отримати довідку щодо команд" +msgid "Get help for commands (-t: output in chat)" +msgstr "Отримати довідку щодо команд (-t: вивести у чаті)" #: builtin/common/chatcommands.lua msgid "" @@ -83,12 +83,8 @@ msgstr "" "all', щоб перелічити все." #: builtin/common/chatcommands.lua -msgid "[all | ]" -msgstr "[all | <команда>]" - -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" -msgstr "Добре" +msgid "[all | ] [-t]" +msgstr "[all | <команда>] [-t]" #: builtin/fstk/ui.lua msgid "" @@ -106,6 +102,10 @@ msgstr "Виникла помилка:" msgid "Main menu" msgstr "Головне меню" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "Добре" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Перепідключення" @@ -134,19 +134,27 @@ msgstr "Ми підтримуємо лише протокол версії $1." msgid "We support protocol versions between version $1 and $2." msgstr "Ми підтримуємо протокол між версіями $1 і $2." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "\"$1\" вже існує. Бажаєте перезаписати?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" +msgstr "Помилка встановлення \"$1\": $2" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." -msgstr "Будє встановлено залежності $1 та $2." +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download \"$1\"" +msgstr "Не вдалося завантажити \"$1\"" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" -msgstr "$1 з $2" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr "Не вдалося завантажити $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "" +"Не вдалося витягти \"$1\" (недостатнє місце на диску, непідтримуваний тип " +"файлу або пошкоджений архів)" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" @@ -154,157 +162,157 @@ msgstr "" "$1 завантажується,\n" "$2 у черзі" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." msgstr "$1 завантажується..." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "$1 необхідних залежностей не знайдено." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "$1 буде встановлено, а $2 залежностей буде пропущено." - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "Усі пакунки" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "Вже встановлено" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "Назад до головного меню" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "ContentDB недоступний, якщо Minetest було скомпільовано без cURL" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "Завантаження..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "Помилка при отриманні залежностей для пакунку" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "Ігри" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +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 "Mods" +msgstr "Моди" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "Не вдалося отримати пакунки" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "Нічого не знайдено" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "Немає оновлень" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "У черзі" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "Набори текстур" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "Пакунок $1/$2 не знайдено." + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "Видалити" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "Оновити" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "Оновити все [$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 та $2." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "$1 з $2" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "$1 необхідних залежностей не знайдено." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "$1 буде встановлено, а $2 залежностей буде пропущено." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "Вже встановлено" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "Основна гра:" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "Скасувати" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "ContentDB недоступний, якщо Minetest було скомпільовано без cURL" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "Залежності:" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "Завантаження..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "Помилка встановлення \"$1\": $2" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download \"$1\"" -msgstr "Не вдалося завантажити \"$1\"" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "Не вдалося завантажити $1" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "" -"Не вдалося витягти \"$1\" (непідтримуваний тип файлу або пошкоджений архів)" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "Ігри" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "Встановити" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "Встановити $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "Встановити відсутні залежності" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "Завантаження..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "Моди" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "Не вдалося отримати пакунки" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "Нічого не знайдено" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "Оновлення відсутні" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "Не знайдено" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "Перезаписати" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "Будь ласка, перевірте коректність основної гри." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" -msgstr "У черзі" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" +msgstr "\"$1\" вже існує. Бажаєте перезаписати?" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "Набори текстур" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "Пакунок $1/$2 не знайдено." - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "Видалити" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "Оновити" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "Оновити все [$1]" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "Переглянути більше інформації у веб-браузері" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" -msgstr "Вам потрібно встановити гру перед тим, як встановлювати мод" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" +msgstr "Перезаписати" #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" @@ -368,7 +376,7 @@ msgstr "" #: builtin/mainmenu/dlg_config_world.lua msgid "Find More Mods" -msgstr "Знайти більше модів" +msgstr "Більше модів" #: builtin/mainmenu/dlg_config_world.lua msgid "Mod:" @@ -452,10 +460,22 @@ msgstr "Створити" msgid "Decorations" msgstr "Декорації" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "Храми пустель" + #: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." msgstr "Тестова розробка призначена для розробників." +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" +"Інший варіант підземель, що генерується у біомах пустелі (тільки якщо " +"увімкнені підземелля)" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "Підземелля" @@ -567,15 +587,15 @@ msgstr "Споруди, що з’являються на місцевості, #: builtin/mainmenu/dlg_create_world.lua msgid "Temperate, Desert" -msgstr "Помірний клімат, пустеля" +msgstr "Помірний, пустеля" #: builtin/mainmenu/dlg_create_world.lua msgid "Temperate, Desert, Jungle" -msgstr "Помірний клімат, пустелі, джунглі" +msgstr "Помірний, пустелі, джунглі" #: builtin/mainmenu/dlg_create_world.lua msgid "Temperate, Desert, Jungle, Tundra, Taiga" -msgstr "Помірний клімат, пустеля, джунглі, тундра, тайга" +msgstr "Помірний, пустеля, джунглі, тундра, тайга" #: builtin/mainmenu/dlg_create_world.lua msgid "Terrain surface erosion" @@ -646,7 +666,7 @@ msgstr "Паролі не збігаються" #: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua msgid "Register" -msgstr "Зареєструватися" +msgstr "Реєстрація" #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "Dismiss" @@ -753,7 +773,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)" @@ -832,10 +852,6 @@ msgstr "Доступність" msgid "Back" msgstr "Назад" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "Змінити клавіші" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -845,7 +861,8 @@ msgstr "Чат" msgid "Clear" msgstr "Очистити" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "Керування" @@ -972,7 +989,7 @@ msgstr "Попередні основні розробники" #: builtin/mainmenu/tab_about.lua msgid "Share debug log" -msgstr "Ділитися даними зневадження" +msgstr "Ділитися зневадженням" #: builtin/mainmenu/tab_content.lua msgid "Browse online content" @@ -1032,7 +1049,7 @@ msgstr "Творчий режим" #: builtin/mainmenu/tab_local.lua msgid "Enable Damage" -msgstr "Дозволити пошкодження" +msgstr "Пошкодження" #: builtin/mainmenu/tab_local.lua msgid "Host Game" @@ -1050,6 +1067,17 @@ msgstr "Встановити гру" msgid "Install games from ContentDB" msgstr "Встановити ігри з ContentDB" +#: builtin/mainmenu/tab_local.lua +msgid "Minetest doesn't come with a game by default." +msgstr "Minetest більше не встановлювається з грою." + +#: builtin/mainmenu/tab_local.lua +msgid "" +"Minetest is a game-creation platform that allows you to play many different " +"games." +msgstr "" +"Minetest – це ігрова платформа, що дозволяє вам грати у багато різних ігор." + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "Новий" @@ -1060,7 +1088,7 @@ msgstr "Світ не створено або не обрано!" #: builtin/mainmenu/tab_local.lua msgid "Play Game" -msgstr "Грати гру" +msgstr "Грати в гру" #: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua msgid "Port" @@ -1083,8 +1111,8 @@ msgid "Start Game" msgstr "Почати гру" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." -msgstr "Ви не маєте встановлених ігор." +msgid "You need to install a game before you can create a world." +msgstr "Вам потрібно встановити гру перед ти, як створювати світ." #: builtin/mainmenu/tab_online.lua msgid "Address" @@ -1097,7 +1125,7 @@ msgstr "Творчий режим" #. ~ PvP = Player versus Player #: builtin/mainmenu/tab_online.lua msgid "Damage / PvP" -msgstr "Пошкодження / ГпГ" +msgstr "Пошкодження / PvP" #: builtin/mainmenu/tab_online.lua msgid "Favorites" @@ -1163,18 +1191,10 @@ msgstr "Завантаження текстур..." msgid "Rebuilding shaders..." msgstr "Перебудова відтінювачів..." -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "Помилка зʼєднання (час вийшов?)" - #: src/client/clientlauncher.cpp msgid "Could not find or load game: " msgstr "Неможливо знайти або завантажити гру: " -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "Помилкова конфігурація gamespec." - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "Основне меню" @@ -1199,7 +1219,11 @@ msgstr "Не вдалося відкрити файл паролю: " msgid "Provided world path doesn't exist: " msgstr "Вказаний шлях до світу не існує: " -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "Ресурси..." + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp msgid "" "\n" "Check debug.txt for details." @@ -1207,18 +1231,10 @@ msgstr "" "\n" "Подробиці у файлі debug.txt." -#: src/client/game.cpp -msgid "- Address: " -msgstr "- Адреса: " - #: src/client/game.cpp msgid "- Mode: " msgstr "- Режим: " -#: src/client/game.cpp -msgid "- Port: " -msgstr "- Порт: " - #: src/client/game.cpp msgid "- Public: " msgstr "- Публічний: " @@ -1253,10 +1269,6 @@ msgstr "Автоматичний рух вперед увімкнено" msgid "Block bounds hidden" msgstr "Межі блоків приховані" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "Межі показуються в усіх блоків" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "Межі показуються у поточного блоку" @@ -1301,6 +1313,10 @@ msgstr "Сценарії на боці клієнта вимкнено" msgid "Connecting to server..." msgstr "Підключення до сервера..." +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "Помилка зʼєднання (час вийшов?)" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "Невдале зʼєднання з невідомих причин" @@ -1309,46 +1325,13 @@ msgstr "Невдале зʼєднання з невідомих причин" msgid "Continue" msgstr "Продовжити" -#: src/client/game.cpp -#, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" -"Керування:\n" -"- %s: рухатися вперед\n" -"- %s: рухатися назад\n" -"- %s: рухатися вліво\n" -"- %s: рухатися вправо\n" -"- %s: стрибати/лізти вгору\n" -"- %s: копати/вдарити/використати\n" -"- %s: поставити/використати\n" -"- %s: крастися/лізти вниз\n" -"- %s: кинути предмет\n" -"- %s: інвентар\n" -"- Миша: поворот/дивитися\n" -"- Коліщатко миші: вибір предмета\n" -"- %s: чат\n" - #: src/client/game.cpp msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1358,16 +1341,16 @@ msgid "" " --> 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" #: src/client/game.cpp @@ -1440,6 +1423,10 @@ msgstr "Туман вимкнено" msgid "Fog enabled" msgstr "Туман увімкнено" +#: src/client/game.cpp +msgid "Fog enabled by game or mod" +msgstr "Туман увімкнено грою або модом" + #: src/client/game.cpp msgid "Game info:" msgstr "Інформація про гру:" @@ -1460,10 +1447,6 @@ msgstr "Визначення предметів..." msgid "KiB/s" msgstr "КіБ/сек" -#: src/client/game.cpp -msgid "Media..." -msgstr "Ресурси..." - #: src/client/game.cpp msgid "MiB/s" msgstr "МіБ/сек" @@ -1619,10 +1602,6 @@ msgstr "Показ трикутників" msgid "Zoom currently disabled by game or mod" msgstr "Наближення (бінокль) вимкнено грою або модифікацією" -#: src/client/game.cpp -msgid "ok" -msgstr "добре" - #: src/client/gameui.cpp msgid "Chat currently disabled by game or mod" msgstr "Чат зараз вимкнено грою або модом" @@ -1887,7 +1866,7 @@ msgstr "Scroll Lock" #. ~ Key name #: src/client/keycode.cpp msgid "Select" -msgstr "Вибрати" +msgstr "Select" #: src/client/keycode.cpp msgid "Shift Key" @@ -1943,6 +1922,15 @@ msgstr "Мінімапа в режимі поверхні. Наближення msgid "Minimap in texture mode" msgstr "Мінімапа в текстурному режимі" +#: src/client/shader.cpp +#, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "Не вдалося скомпілювати шейдер \"%s\"." + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "Відтінювачі увімкнені, але GLSL не підтримується драйвером." + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2136,6 +2124,18 @@ msgstr "Збільшити" msgid "press key" msgstr "натисніть клавішу" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "Відкрити" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "Відкрити URL?" + +#: src/gui/guiOpenURL.cpp +msgid "Unable to open URL" +msgstr "Не вдалося відкрити URL" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "Змінити" @@ -2169,6 +2169,7 @@ msgstr "Гучність звуку: %d%%" #. 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 "uk" @@ -2199,13 +2200,13 @@ msgid "" "situations.\n" "Range roughly -2 to 2. Multiply by 'scale' for offset in nodes." msgstr "" -"(X,Y,Z) зміщення фракталу від центру світа у одиницях 'масшабу'. \n" -"Використовується для пересування бажаної точки до (0, 0) щоб \n" -"створити придатну точку переродження або для 'наближення' \n" -"до бажаної точки шляхом збільшення 'масштабу'. Значення за \n" -"замовчанням налаштоване для придатної точки переродження \n" -"для множин Мандельбро з параметрами за замовчанням; може \n" -"потребувати зміни у інших ситуаціях. Діапазон приблизно від -2 \n" +"(X,Y,Z) зміщення фракталу від центру світа у одиницях 'масшабу'.\n" +"Використовується для пересування бажаної точки до (0, 0) щоб\n" +"створити придатну точку переродження або для 'наближення'\n" +"до бажаної точки шляхом збільшення 'масштабу'. Значення за\n" +"замовчанням налаштоване для придатної точки переродження\n" +"для множин Мандельбро з параметрами за замовчанням; може\n" +"потребувати зміни у інших ситуаціях. Діапазон приблизно від -2\n" "до 2. Помножте на 'масштаб' щоб отримати зміщення у блоках." #: src/settings_translation_file.cpp @@ -2219,11 +2220,11 @@ msgid "" "an island, set all 3 numbers equal for the raw shape." msgstr "" "(X,Y,Z) масштаб фракталу у блоках.\n" -"Фактичний розмір фракталу буде у 2-3 рази більшим. Ці \n" -"числа можуть бути дуже великими, фрактал не обов'язково \n" -"має поміститися у світі. Збільшіть їх щоб 'наблизити' деталі \n" -"фракталу. Числа за замовчанням підходять для вертикально \n" -"стисненої форми, придатної для острова, встановіть усі три \n" +"Фактичний розмір фракталу буде у 2-3 рази більшим. Ці\n" +"числа можуть бути дуже великими, фрактал не обов'язково\n" +"має поміститися у світі. Збільшіть їх щоб 'наблизити' деталі\n" +"фракталу. Числа за замовчанням підходять для вертикально\n" +"стисненої форми, придатної для острова, встановіть усі три\n" "числа рівними для форми без трансформації." #: src/settings_translation_file.cpp @@ -2359,7 +2360,7 @@ msgstr "Обмеження часу ABM" #: src/settings_translation_file.cpp msgid "Absolute limit of queued blocks to emerge" -msgstr "Абсолютний ліміт відображення блоків з черги" +msgstr "Абс. ліміт відображення блоків з черги" #: src/settings_translation_file.cpp msgid "Acceleration in air" @@ -2389,19 +2390,10 @@ msgstr "Діапазон надсилання активних об'єктів" msgid "Adds particles when digging a node." msgstr "Додавати часточки при копанні блока." -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" -"Налаштувати dpi на вашому екрані (тільки не X11/Android), напр. для 4k-" -"екранів." - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" -"Налаштування виявленої щільності дисплея, використовується для масштабування " -"елементів інтерфейсу." +"Налаштуйте виявлену щільність дисплея для масштабування елементів інтерфейсу." #: src/settings_translation_file.cpp #, c-format @@ -2428,6 +2420,10 @@ msgstr "Ім'я адміністратора" msgid "Advanced" msgstr "Додатково" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "Дозволяє рідинам бути напівпрозорими." + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2436,9 +2432,9 @@ msgid "" "This only has significant effect on daylight and artificial\n" "light, it has very little effect on natural night light." msgstr "" -"Змінює криву світла застосовуючи до неї 'гамма-корекцію'.\n" +"Змінює криву світла застосовуючи до неї \"гамма-корекцію\".\n" "Більше значення робить середній і нижчий рівень яскравості освітлення.\n" -"Значення '1.0' залишає криву світла незмінною.\n" +"Значення \"1.0\" залишає криву світла незмінною.\n" "Це впливає лише на денне і штучне світло,\n" "воно мало впливає на природне нічне світло." @@ -2486,6 +2482,24 @@ msgstr "Додавати назви предметів до підказок." msgid "Apple trees noise" 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 "" +"Застосуйте згладжування, щоб зменшити кількість артефактів кольорових смуг.\n" +"Згладжування значно збільшує розмір знімків екрана, стиснутих без втрат,\n" +"і працює некоректно, якщо екран або операційна система виконує\n" +"додаткове згладжування або якщо кольорові канали не квантуються\n" +"до 8 бітів.\n" +"З OpenGL ES згладжування працює лише якщо відтінювач підтримує високу\n" +"точність чисел з плаваючою комою й може більше впливати на продуктивність." + #: src/settings_translation_file.cpp msgid "Arm inertia" msgstr "Інерція руки" @@ -2509,20 +2523,34 @@ msgid "" "clients.\n" "Small values potentially improve performance a lot, at the expense of " "visible\n" -"rendering glitches (some blocks will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." msgstr "" -"На цій відстані сервер буде агресивно оптимізувати те, які блоки\n" -"надсилаються клієнтам.\n" -"Маленькі значення можуть значно покращити продуктивність, за\n" -"рахунок проблем відображення (деякі блоки не будуть\n" -"відображені під водою й у печерах, а також иноді на поверхні).\n" -"Виставлення цього до значення, що більше, ніж\n" -"max_block_send_distance, вимикає цю оптимізацію.\n" +"На цій відстані сервер буде агресивно оптимізувати, які блоки\n" +"надсилатимуться клієнтам.\n" +"Меньші значення потенційно значно підвищують продуктивність за рахунок\n" +"проблем промальовування (блоки можуть неправильно відображатися у печерах).\n" +"Виставлення цього до значення більше за max_block_send_distance вимикає\n" +"цю оптимізацію.\n" +"Зазначається у блоках мапи (16 блоків)." + +#: 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 "" +"На цій відстані сервер буде виконувати простіше й дешевше перевірку " +"затінення.\n" +"Меньші значення потенційно підвищують продуктивність, за рахунок тимчасово\n" +"видимих проблем відображення (зниклі блоки).\n" +"Це особливо корисно для дуже великого діапазону огляду (понад 500).\n" "Зазначається у блоках мапи (16 блоків)." #: src/settings_translation_file.cpp @@ -2585,6 +2613,10 @@ msgstr "API біомів" msgid "Biome noise" msgstr "Шум біому" +#: src/settings_translation_file.cpp +msgid "Block cull optimize distance" +msgstr "Відстань оптимізації вибракування блоків" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "Оптимальна відстань надсилання блока" @@ -2770,7 +2802,7 @@ msgstr "Моди з боку клієнта" #: src/settings_translation_file.cpp msgid "Client-side node lookup range restriction" -msgstr "Обмеження діапазону пошуку блоків на боці клієнта" +msgstr "Обмеження відстані пошуку блоків клієнта" #: src/settings_translation_file.cpp msgid "Climbing speed" @@ -2800,6 +2832,15 @@ msgstr "Кольоровий туман" msgid "Colored shadows" 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 "" +"Розділений комами перелік розширень AL і ALC, які не повинно використовувати." +"\n" +"Корисно для тестування. Подробиці у файлах al_extensions.[h,cpp]." + #: src/settings_translation_file.cpp msgid "" "Comma-separated list of flags to hide in the content repository.\n" @@ -2810,9 +2851,9 @@ msgid "" "These flags are independent from Minetest versions,\n" "so see a full list at https://content.minetest.net/help/content_flags/" msgstr "" -"Розділений комами перелік міток, які треба приховувати у репозиторії " -"вмісту.\n" -"\"nonfree\" використовується для приховання пакетів, що не є \"вільним " +"Розділений комами перелік міток, які треба приховувати у репозиторії вмісту." +"\n" +"\"nonfree\" використовується для приховання пакунків, що не є \"вільним " "програмним\n" "забезпеченням\", як визначено Фондом вільного програмного забезпечення.\n" "Ви також можете вказувати оцінки вмісту.\n" @@ -2877,7 +2918,7 @@ msgstr "З'єднує скло, якщо підтримується блоком #: src/settings_translation_file.cpp msgid "Console alpha" -msgstr "Прозорість консолі" +msgstr "Нерозорість консолі" #: src/settings_translation_file.cpp msgid "Console color" @@ -2968,10 +3009,6 @@ msgstr "" "Колір перехрестя (R,G,B).\n" "Також впливає на колір об'єктного перехрестя" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "DPI" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "Розмірний поріг файлу журналу зневадження" @@ -3026,6 +3063,27 @@ msgstr "" "Це імітує ефект легких тіней, застосовуючи PCF або пуасоновський\n" "диск, але також використовує більше ресурсів." +#: 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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" +"Визначте найстаріші клієнти, яким дозволено під'єднуватися.\n" +"Старіші клієнти сумісні у тому сенсі, що вони не зазнаватимуть збою при " +"підключенні\n" +"до нових серверів, але можуть не підтримувати усі нові функції, на які ви " +"очікуєте.\n" +"Це дозволяє детальніший контроль, ніж strict_protocol_version_checking.\n" +"Minetest все ще примушує свій внутрішній мінімум, і включення\n" +"strict_protocol_version_checking перевизначить це ефективно." + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "Визначає області, де дерева мають яблука." @@ -3118,7 +3176,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Delay in sending blocks after building" -msgstr "Затримка надсилання блоків після будування" +msgstr "Затримка надсилання будування блоками" #: src/settings_translation_file.cpp msgid "Delay showing tooltips, stated in milliseconds." @@ -3161,7 +3219,7 @@ msgstr "Розсинхронізація анімації блоків" #: src/settings_translation_file.cpp msgid "Developer Options" -msgstr "Налаштування для розробників" +msgstr "Розробницькі налаштування" #: src/settings_translation_file.cpp msgid "Digging particles" @@ -3177,7 +3235,7 @@ msgstr "Заборонити порожні паролі" #: src/settings_translation_file.cpp msgid "Display Density Scaling Factor" -msgstr "Коефіцієнт масштабування щільності відображення" +msgstr "Масштабування щільності відображення" #: src/settings_translation_file.cpp msgid "" @@ -3227,6 +3285,10 @@ msgstr "Увімкнути світіння" msgid "Enable Bloom Debug" msgstr "Увімкнути зневадження світіння" +#: src/settings_translation_file.cpp +msgid "Enable Debanding" +msgstr "Увімкнути дебандинг" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3253,6 +3315,10 @@ msgstr "" "Якщо увімкнено, використовує пуасоновський диск для створення \"м'яких " "тіней\". Інакше використовується PCF." +#: src/settings_translation_file.cpp +msgid "Enable Post Processing" +msgstr "Увімкнути постобробку" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "Увімкнути проминеве оклюзивне відсікання" @@ -3303,6 +3369,10 @@ msgstr "" "Увімкнути коліщатко миші (прокрутку) для вибору предмету на панелі швидкого " "доступу." +#: src/settings_translation_file.cpp +msgid "Enable random mod loading (mainly used for testing)." +msgstr "Увімкнути випадкове завантаження модів (в основному для тестування)." + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "Увімкнути випадкове введення користувача (тільки для тестування)." @@ -3332,6 +3402,10 @@ msgstr "" "підключенні до нових серверів, але вони можуть не підтримувати усі нові " "функції, на які ви очікуєте." +#: src/settings_translation_file.cpp +msgid "Enable touchscreen" +msgstr "Увімкнути сенсорний екран" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3343,14 +3417,6 @@ msgstr "" "Віддалені сервери пропонують набагато бистріше завантажувати медіафайли\n" "(наприклад текстури) під час підключення до серверу." -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" -"Увімкнути об'єкти буферу вершин.\n" -"Це повинно значно покращити графічну продуктивність." - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3376,7 +3442,7 @@ msgid "" "appearance of high dynamic range images. Mid-range contrast is slightly\n" "enhanced, highlights and shadows are gradually compressed." msgstr "" -"Вмикає кінематографічне тональне відображення Hable's «Uncharted 2».\n" +"Вмикає кінематографічне тональне відображення \"Uncharted 2\".\n" "Імітує криву тона фотоплівки й наближає\n" "зображення до більшого динамічного діапазону. Середній контраст злегка\n" "посилюється, відблиски й тіні поступово стискається." @@ -3389,6 +3455,20 @@ msgstr "Дозволити анімацію предметів інвентар msgid "Enables caching of facedir rotated meshes." msgstr "Вмикає кешування мешів, яких повернули." +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +msgstr "Вмикає зневадження й перевірку помилок у драйвері OpenGL." + +#: 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." +msgstr "" +"Вмикає режим сенсорного екрану, дозволяючи вам грати з сенсорним екраном." + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -3437,7 +3517,7 @@ msgstr "FPS" #: src/settings_translation_file.cpp msgid "FPS when unfocused or paused" -msgstr "FPS, коли призупинено або поза фокусом" +msgstr "FPS, при паузі або поза фокусом" #: src/settings_translation_file.cpp msgid "Factor noise" @@ -3593,7 +3673,7 @@ msgid "" "Font size of the recent chat text and chat prompt in point (pt).\n" "Value 0 will use the default font size." msgstr "" -"Розмір шрифта останніх повідомлень чату й ввода у точках (pt).\n" +"Розмір шрифта останніх повідомлень чату й ввода у пунктах (pt).\n" "Значення 0 використовуватиме звичайний розмір шрифта." #: src/settings_translation_file.cpp @@ -3626,11 +3706,11 @@ msgstr "Формат знімків екрана." #: src/settings_translation_file.cpp msgid "Formspec Full-Screen Background Color" -msgstr "Колір фону форми у повноекранному режимі" +msgstr "Колір повноекранного фону форми" #: src/settings_translation_file.cpp msgid "Formspec Full-Screen Background Opacity" -msgstr "Непрозорість фону форми у повноекранному режимі" +msgstr "Непрозорість повноекранного фону форми" #: src/settings_translation_file.cpp msgid "Formspec full-screen background color (R,G,B)." @@ -3710,7 +3790,7 @@ msgstr "Фільтр масштабування інтерфейсу txr2img" #: src/settings_translation_file.cpp msgid "Gamepads" -msgstr "Контролер" +msgstr "Контролери" #: src/settings_translation_file.cpp msgid "Global callbacks" @@ -4060,7 +4140,7 @@ msgstr "Ігнорувати помилки світу" #: src/settings_translation_file.cpp msgid "In-game chat console background alpha (opaqueness, between 0 and 255)." -msgstr "Непрозорість фону консоли в грі (між 0 і 255)." +msgstr "Альфа-канал фону консолі чату в грі (непрозорість, між 0 і 255)." #: src/settings_translation_file.cpp msgid "In-game chat console background color (R,G,B)." @@ -4287,7 +4367,7 @@ msgstr "Найменьша кількість великих печер" #: src/settings_translation_file.cpp msgid "Large cave proportion flooded" -msgstr "Співвідношення затоплення великих печер" +msgstr "Співвідношення затоплення печер" #: src/settings_translation_file.cpp msgid "Leaves style" @@ -4308,12 +4388,14 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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." @@ -4324,19 +4406,17 @@ msgid "" "Length of time between Active Block Modifier (ABM) execution cycles, stated " "in seconds." msgstr "" -"Довжина часу між циклами виконання модифікатора активного блоку (ABM), " -"зазначається у секундах." +"Час між циклами виконання модифікатора активного блоку (ABM), зазначається у " +"секундах." #: src/settings_translation_file.cpp msgid "Length of time between NodeTimer execution cycles, stated in seconds." -msgstr "Довжина часу між циклами виконання NodeTimer, зазначається у секундах." +msgstr "Час між циклами виконання NodeTimer, зазначається у секундах." #: src/settings_translation_file.cpp msgid "" "Length of time between active block management cycles, stated in seconds." -msgstr "" -"Довжина часу між циклами керування активними блоками, зазначається у " -"секундах." +msgstr "Час між циклами керування активними блоками, зазначається у секундах." #: src/settings_translation_file.cpp msgid "" @@ -4490,17 +4570,13 @@ msgstr "" "Зробити кольори туману й неба залежними від частини доби (світанок/захід) і " "напрямка погляду." -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "Робить усі рідини непрозорими" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" -msgstr "Рівень стискання мап для місця на диску" +msgstr "Рівень стискання мап для місця диску" #: src/settings_translation_file.cpp msgid "Map Compression Level for Network Transfer" -msgstr "Рівень стискання мап для передачі мережею" +msgstr "Рівень стиск. мап для передачі мережею" #: src/settings_translation_file.cpp msgid "Map directory" @@ -4553,12 +4629,16 @@ 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." +"the 'jungles' flag is ignored.\n" +"The 'temples' flag disables generation of desert temples. Normal dungeons " +"will appear instead." msgstr "" -"Спеціальні атрибути генерації для генератору світу V6.\n" +"Спеціальні атрибути генерації для генератору світу v6.\n" "Мітка \"snowbiomes\" вмикає нову систему з 5 біомами.\n" -"Коли мітку \"snowbiomes\" увімкнено, автоматично увімкаються джунглі,\n" -"ігноруючи мітку \"jungles\"." +"Коли мітку \"snowbiomes\" увімкнено, автоматично увімкаються джунглі й\n" +"мітка \"jungles\" ігнорується.\n" +"Мітка \"temples\" вимикає генерацію храмів пустель. Замість них " +"з'являтимуться звичайні підземелля." #: src/settings_translation_file.cpp msgid "" @@ -4596,13 +4676,9 @@ msgstr "Затримка генерації мешів блоків мапи" msgid "Mapblock mesh generation threads" msgstr "Потоки генерації сітки блоків мапи" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "Розмір кешу блоків мапи генератору мешів блоків мапи в мегабайтах" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" -msgstr "Час очікування вивантаження блоків мапи" +msgstr "Час очікування видалення блоків мапи" #: src/settings_translation_file.cpp msgid "Mapgen Carpathian" @@ -4622,7 +4698,7 @@ msgstr "Спеціальні мітки генератору світу Площ #: src/settings_translation_file.cpp msgid "Mapgen Fractal" -msgstr "Генератор світу: фрактальний" +msgstr "Генератор світу Фрактал" #: src/settings_translation_file.cpp msgid "Mapgen Fractal specific flags" @@ -4674,7 +4750,7 @@ msgstr "Максимальна відстань генерації блоків" #: src/settings_translation_file.cpp msgid "Max block send distance" -msgstr "Максимальна відстань надсилання блоків" +msgstr "Макс. відстань надсилання блоків" #: src/settings_translation_file.cpp msgid "Max liquids processed per step." @@ -4702,7 +4778,7 @@ msgstr "Максимальна відстань для промальовува #: src/settings_translation_file.cpp msgid "Maximum forceloaded blocks" -msgstr "Максимум примусово завантажених блоків мапи" +msgstr "Макс. примусово завантажених блоків" #: src/settings_translation_file.cpp msgid "Maximum hotbar width" @@ -4760,8 +4836,8 @@ msgid "" "be queued.\n" "This should be lower than curl_parallel_limit." msgstr "" -"Найбільша кількість одночасних завантажень. Завантаження, що перевищують цей " -"ліміт, будуть у черзі.\n" +"Максимум одночасних завантажень. Перевищуючи цей ліміт, завантаження " +"опиняються у черзі.\n" "Це повинно бути менше за curl_parallel_limit." #: src/settings_translation_file.cpp @@ -4813,7 +4889,7 @@ msgstr "Максимум одночасних надсилань блоків н #: src/settings_translation_file.cpp msgid "Maximum size of the outgoing chat queue" -msgstr "Максимальний розмір черги вихідних повідомлень у чаті" +msgstr "Макс. розмір черги вихідн. повідомлень" #: src/settings_translation_file.cpp msgid "" @@ -4836,8 +4912,8 @@ msgid "" "Maximum time an interactive request (e.g. server list fetch) may take, " "stated in milliseconds." msgstr "" -"Максимальний час запиту взаємодії (наприклад отримання списку серверів), " -"зазначається у міллісекундах." +"Найбільший час запиту взаємодії (наприклад отримання переліку серверів), у " +"міллісекундах." #: src/settings_translation_file.cpp msgid "Maximum users" @@ -4867,6 +4943,10 @@ msgstr "Мінімальний рівень журналювання для за msgid "Minimap scan height" msgstr "Висота сканування мінімапи" +#: src/settings_translation_file.cpp +msgid "Minimum dig repetition interval" +msgstr "Мінімальний інтервал повторення копання" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "Мінимум випадкового числа великих печер на фрагмент мапи." @@ -4909,7 +4989,7 @@ msgstr "Розмір моноширного шрифту" #: src/settings_translation_file.cpp msgid "Monospace font size divisible by" -msgstr "Розмір моноширинного шрифта подільний на" +msgstr "Кратність розм. моношир. шрифта" #: src/settings_translation_file.cpp msgid "Mountain height noise" @@ -4935,6 +5015,10 @@ msgstr "Чутливість миші" msgid "Mouse sensitivity multiplier." msgstr "Множник чутливості миші." +#: src/settings_translation_file.cpp +msgid "Movement threshold" +msgstr "Поріг переміщення" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "Шум бруду" @@ -5060,8 +5144,8 @@ msgid "" "threads." msgstr "" "Кількість потоків, що використовуються для генерації мешів.\n" -"Значення 0 (за замовчуванням) дозволить Minetest автоматично визначати " -"кількість доступних потоків." +"Значення 0 (звичайне) дозволить Minetest автоматично визначати кількість " +"доступних потоків." #: src/settings_translation_file.cpp msgid "Occlusion Culler" @@ -5071,10 +5155,6 @@ msgstr "Метод оклюзивного відсікання" msgid "Occlusion Culling" msgstr "Оклюзивне відсікання" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "Непрозорі рідини" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -5090,6 +5170,10 @@ msgstr "" "Відкривати меню паузі при втраті фокуса вікна.\n" "Не відкриває, якщо будь-яка форму вже відкрито." +#: src/settings_translation_file.cpp +msgid "OpenGL debug" +msgstr "Зневадження OpenGL" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "Необов'язкове перевизначення кольору посилання у чаті." @@ -5143,11 +5227,11 @@ msgstr "Пауза при втраті фокусу" #: src/settings_translation_file.cpp msgid "Per-player limit of queued blocks load from disk" -msgstr "Обмеження кожного гравця на завантаження блоків з диску в черзі" +msgstr "Ліміт гравця на завантаж. блоків черги з диску" #: src/settings_translation_file.cpp msgid "Per-player limit of queued blocks to generate" -msgstr "Обмеження кожного гравця на генерацію блоків у черзі" +msgstr "Ліміт гравця на генерацію блоків з черги" #: src/settings_translation_file.cpp msgid "Physics" @@ -5221,6 +5305,14 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "Співвідношення великих печер, що містять рідину." +#: src/settings_translation_file.cpp +msgid "Protocol version minimum" +msgstr "Мінімальна версія протоколу" + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "Жест удару" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -5238,6 +5330,10 @@ msgstr "Піднімає місцевість, щоб робити долини msgid "Random input" msgstr "Випадковий ввід" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "Випадковий порядок завантаження модів" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "Останні повідомлення чату" @@ -5451,8 +5547,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5470,9 +5566,9 @@ msgstr "" "\n" "* None - без згладжування (за замовчуванням)\n" "\n" -"* FSAA - апаратне повноекранне згладжування (несумісно із відтінювачами),\n" -"також відоме як згладжування з декількома вибірками (multi-sample " -"antialiasing, MSAA)\n" +"* FSAA - апаратне повноекранне згладжування\n" +"(несумісне з пост-обробкою й субдискретизацією),\n" +"також відоме як multi-sample antialiasing (MSAA)\n" "Згладжує кути блоків, але не впливає на внутрішню частину текстур.\n" "Для змінення цього вибору потребується перезавантаження.\n" "\n" @@ -5482,9 +5578,8 @@ msgstr "" "Забезпечує баланс між швидкістю і якістю зображення.\n" "\n" "* SSAA - згладжування із супер-вибіркою (потребує відтінювачів)\n" -"Промальовує зображення сцени з вищою роздільністю, потім зменьшує масштаб, " -"для зменьшення\n" -"ефектів накладення. Це найповільніший і найточніший метод." +"Промальовує зображення сцени з вищою роздільністю, потім зменьшує масштаб,\n" +"для зменшення ефектів накладення. Це найповільніший і найточніший метод." #: src/settings_translation_file.cpp msgid "Selection box border color (R,G,B)." @@ -5614,11 +5709,11 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" -"Вказати мову. Залиште порожнім, щоб використовувати системну мову.\n" -"Потрібен перезапуск після цієї зміни." +"Вкажіть мову. За замовчування використовується системна мова.\n" +"Після зміни цього потрібен перезапуск." #: src/settings_translation_file.cpp msgid "" @@ -5659,6 +5754,10 @@ msgstr "" "Вмикає ефект світіння.\n" "Яскраві кольори переливатиметься через сусідні об'єкти." +#: src/settings_translation_file.cpp +msgid "Set to true to enable volumetric lighting effect (a.k.a. \"Godrays\")." +msgstr "Увімкніть ефект об'ємного освітлення (також відомий як \"Godrays\")." + #: src/settings_translation_file.cpp msgid "Set to true to enable waving leaves." msgstr "Вмикає похитування листя." @@ -5707,12 +5806,10 @@ msgstr "Відтінювачі" msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" -"Відтінювачі дозволяють додаткові визуальні ефекти й можуть збільшити\n" -"продуктивність на деяких відеокартах.\n" -"Це працює тільки з двигуном промальовування OpenGL." +"Відтінювачі дозволяють просунуті визуальні ефекти й можуть збільшити\n" +"продуктивність на деяких відеокартах." #: src/settings_translation_file.cpp msgid "Shadow filter quality" @@ -5801,16 +5898,6 @@ msgstr "" "його незміненим\n" "рекомендується." -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" -"Розмір кешу блоків мапи в генераторі мешів. Збільшення цього\n" -"збільшить % попадання в кеш, зменшуючи дані, що копіються з\n" -"головного потоку, тим самим зменшуючи тремтіння." - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "Нахил орбіти небесних тіл" @@ -5846,19 +5933,18 @@ 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 Change Keys." +"cinematic mode by using the key set in Controls." msgstr "" -"Робить обертання камери плавним у кінематографічному режимі, 0 для " -"відключення. Входіть у кінематографічний режім клавішою, визначеною у " -"Змінити клавіші." +"Згладжує обертання камери у кінематографічному режимі, 0 для відключення. " +"Входьте у кінематографічний режім клавішою, визначеною у Керування." #: src/settings_translation_file.cpp msgid "" "Smooths rotation of camera, also called look or mouse smoothing. 0 to " "disable." msgstr "" -"Робить обертання камери плавним, також називається згладжуванням миші або " -"погляду. 0 для вікдлючення." +"Плавне обертання камери, також називається згладжуванням миші або погляду. 0 " +"для вікдлючення." #: src/settings_translation_file.cpp msgid "Sneaking speed" @@ -5872,6 +5958,14 @@ msgstr "Швидкість підкрадання, в блоках в секун msgid "Soft shadow radius" 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 "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -5971,8 +6065,8 @@ msgstr "" "островів.\n" "Вода вимкнена за замовчуванням і буде розміщена лише у тому випадку, якщо це " "значення\n" -"буде встановлено вище за \"mgv7_floatland_ymax\" - " -"\"mgv7_floatland_taper\" (початок\n" +"буде встановлено вище за \"mgv7_floatland_ymax\" - \"mgv7_floatland_taper\" " +"(початок\n" "верхнього звуження).\n" "***УВАГА, ПОТЕНЦІЙНА ЗАГРОЗА СВІТАМ І ПРОДУКТИВНОСТІ СЕРВЕРУ***:\n" "При увімкненні розміщення води висячі острови повинні бути налаштовані й " @@ -6042,7 +6136,7 @@ msgid "" "Bigger numbers create better shadows but it is also more expensive." msgstr "" "Розмір текстури для промальовування мапи тіней.\n" -"Це повинно бути число, що кратне двом.\n" +"Це має бути число, що є одним із ступенів двох.\n" "Більші числа створюють кращі тіні, але також більш витратні." #: src/settings_translation_file.cpp @@ -6081,19 +6175,51 @@ msgstr "" "Звичайний формат, в якому зберігаються профайли,\n" "коли виконується `/profiler save [формат]` без формату." +#: 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 "" "The file path relative to your world path in which profiles will be saved to." msgstr "" "Шлях до файла відносно до вашого шляху світу, де зберігатимуться профайли." +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" +"Жест, що означає удар по гравцю або сутності.\n" +"Це перевизначатися іграми або модами.\n" +"\n" +"* short_tap (короткий дотик)\n" +"Простий у використанні й відомий за іншими іграми, які не повинні бути " +"названі.\n" +"\n" +"* long_tap (довгий дотик)\n" +"Відомий за класичному мобільному управлінні Minetest.\n" +"Бої більш-менш неможливі." + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "Ідентифікатор джойстика, що використовується" #: src/settings_translation_file.cpp -msgid "The length in pixels it takes for touchscreen interaction to start." -msgstr "Довжина в пікселях, з якої починається дія з сенсорним екраном." +msgid "" +"The length in pixels after which a touch interaction is considered movement." +msgstr "Довжина в пікселях, після якої сенсорна взаємодія вважається рухом." #: src/settings_translation_file.cpp msgid "" @@ -6107,6 +6233,14 @@ msgstr "" "0.0 = хвилі не рухається взагалі.\n" "За замовчуванням – 1.0 (1/2 блоки)." +#: src/settings_translation_file.cpp +msgid "" +"The minimum time in seconds it takes between digging nodes when holding\n" +"the dig button." +msgstr "" +"Мінімальний час у секундах у перервах на копання блоків при\n" +"затисканні кнопки копання." + #: src/settings_translation_file.cpp msgid "The network interface that the server listens on." msgstr "Мережевий інтерфейс, що використовується сервером." @@ -6142,12 +6276,12 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" "Двигун промальовування.\n" "Примітка: після змінення цього потрібен перезапуск!\n" "За замовчуванням OpenGL для ПК, й OGLES2 для Android.\n" -"Відтінювачі підтримуються OpenGL і OGLES2 (експериментально)." +"Відтінювачі підтримуються усіма крім OGLES1." #: src/settings_translation_file.cpp msgid "" @@ -6192,7 +6326,7 @@ msgid "" "The time in seconds it takes between repeated events\n" "when holding down a joystick button combination." msgstr "" -"Затримка в секундах між подіями, що повторюються,\n" +"Затримка в секундах між подіями, що повторюються\n" "при затисканні комбінації кнопок джойстику." #: src/settings_translation_file.cpp @@ -6221,6 +6355,10 @@ msgstr "" msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "Третій з 4 шумів 2D що разом визначають діапазон висоти пагорбів/гір." +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "Поріг для довгих дотиків" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -6275,14 +6413,14 @@ msgstr "Чутливість дотику" msgid "Touchscreen sensitivity multiplier." msgstr "Множник чутливості дотику." -#: src/settings_translation_file.cpp -msgid "Touchscreen threshold" -msgstr "Поріг дотику" - #: src/settings_translation_file.cpp msgid "Tradeoffs for performance" msgstr "Домовленності для продуктивності" +#: src/settings_translation_file.cpp +msgid "Translucent liquids" +msgstr "Напівпрозорі рідини" + #: src/settings_translation_file.cpp msgid "Transparency Sorting Distance" msgstr "Дальність сортування за прозорістю" @@ -6329,9 +6467,12 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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, що забезпечує інформацію про найновіший реліз Minetest" +"URL до файлу JSON, що забезпечує інформацію про найновіший реліз Minetest\n" +"Якщо ще порожнє, рушій ніколи не перевірятиме оновлення." #: src/settings_translation_file.cpp msgid "URL to the server list displayed in the Multiplayer Tab." @@ -6361,7 +6502,7 @@ msgstr "Необмежена відстань передачі гравця" #: src/settings_translation_file.cpp msgid "Unload unused server data" -msgstr "Вивантаження невикористаних сервером даних" +msgstr "Видаляти невикористані дані сервера" #: src/settings_translation_file.cpp msgid "Update information URL" @@ -6389,9 +6530,8 @@ msgstr "" "Використовувати анізотропну фільтрацію при погляді на текстури під кутом." #: src/settings_translation_file.cpp -#, fuzzy msgid "Use bilinear filtering when scaling textures." -msgstr "Використовувати білінійну фільтрацію для зменшених текстур." +msgstr "Використовувати білінійну фільтрацію при масштабуванні текстур." #: src/settings_translation_file.cpp msgid "Use crosshair for touch screen" @@ -6406,13 +6546,12 @@ msgstr "" "Якщо увімкнено, перехрестя буде показано та використано для вибору об'єкта." #: src/settings_translation_file.cpp -#, fuzzy 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 "" -"Використовувати міп-текстурування при зменшенні масштабу текстур. Може трохи " +"Використовувати міп-текстурування при зміненні масштабу текстур. Може трохи " "збільшити\n" "продуктивність, особливо при використанні набору текстур високої " "роздільності.\n" @@ -6429,13 +6568,12 @@ msgstr "" "для розмірів сітки клієнта менше за 4x4x4 блоків мапи." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Use trilinear filtering when scaling textures.\n" "If both bilinear and trilinear filtering are enabled, trilinear filtering\n" "is applied." msgstr "" -"Використовувати трилінійну фільтрацію при зменьшенні масштабу текстур.\n" +"Використовувати трилінійну фільтрацію при зміненні масштабу текстур.\n" "Якщо обидві білінійна й трилінійна фільтрації увімкнено, застосовується\n" "трилінійна фільтрація." @@ -6453,10 +6591,6 @@ msgstr "" msgid "User Interfaces" msgstr "Інтерфейси" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "VBO" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "Вертикальна синхронізація" @@ -6522,8 +6656,8 @@ msgid "" "Vertical screen synchronization. Your system may still force VSync on even " "if this is disabled." msgstr "" -"Вертикальна синхронізація екрану. Ваша система все ще може увімкати VSync " -"навіть якщо це вимкнено." +"Вертикальна синхронізація. Ваша система все ще може увімкати VSync навіть " +"якщо це вимкнено." #: src/settings_translation_file.cpp msgid "Video driver" @@ -6549,6 +6683,10 @@ msgstr "Віртуальний джойстик натискає кнопку Au msgid "Volume" msgstr "Гучність" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +msgstr "Множник гучності, коли вікно не сфокусовано." + #: src/settings_translation_file.cpp msgid "" "Volume of all sounds.\n" @@ -6557,6 +6695,14 @@ msgstr "" "Гучність усіх звуків.\n" "Вимагає увімкнення системи звуку." +#: src/settings_translation_file.cpp +msgid "Volume when unfocused" +msgstr "Гучність поза фокусом" + +#: src/settings_translation_file.cpp +msgid "Volumetric lighting" +msgstr "Об'ємне освітлення" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6660,6 +6806,19 @@ msgid "" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." msgstr "" +"При використанні білінійних/трилінійних/анізотропних фільтрів, текстури " +"низької\n" +"роздільності можуть бути розмитими, тому вони автоматично збільшуються за " +"методом\n" +"найближчого сусіда для збереження чіткості пікселей. Це встановлює " +"найменший\n" +"розмір текстури для збільшених текстур, вищі значення виглядають чіткіше, " +"але\n" +"потребують більше пам'яті. Ступені 2 рекомендуються. Це налаштування\n" +"застосовується ТІЛЬКИ якщо білінійну/трилінійну/анізотропну фільтрацію " +"увімкнено.\n" +"Це також використовується як основний розмір текстури блоку для\n" +"автомасштабування текстур, вирівняних за світом." #: src/settings_translation_file.cpp msgid "" @@ -6833,22 +6992,28 @@ msgstr "cURL" #: src/settings_translation_file.cpp msgid "cURL file download timeout" -msgstr "Час очікування завантаження файлів через cURL" +msgstr "Таймаут завантаження файлів через cURL" #: src/settings_translation_file.cpp msgid "cURL interactive timeout" -msgstr "Час очікування під час взаємодії через cURL" +msgstr "Час очікування під час взаємодії із cURL" #: src/settings_translation_file.cpp msgid "cURL parallel limit" msgstr "Обмеження одночасних з'єднань cURL" +#~ msgid "- Address: " +#~ msgstr "- Адреса: " + #~ msgid "- Creative Mode: " #~ msgstr "- Творчість: " #~ msgid "- Damage: " #~ msgstr "- Ушкодження: " +#~ msgid "- Port: " +#~ msgstr "- Порт: " + #~ msgid "" #~ "0 = parallax occlusion with slope information (faster).\n" #~ "1 = relief mapping (slower, more accurate)." @@ -6887,6 +7052,13 @@ msgstr "Обмеження одночасних з'єднань cURL" #~ "Зауважте що поле адреси у головному меню має пріоритет над цим " #~ "налаштуванням." +#~ msgid "" +#~ "Adjust dpi configuration to your screen (non X11/Android only) e.g. for " +#~ "4k screens." +#~ msgstr "" +#~ "Налаштувати dpi на вашому екрані (тільки не X11/Android), напр. для 4k-" +#~ "екранів." + #~ msgid "" #~ "Affects mods and texture packs in the Content and Select Mods menus, as " #~ "well as\n" @@ -6928,6 +7100,9 @@ msgstr "Обмеження одночасних з'єднань cURL" #~ msgid "Bits per pixel (aka color depth) in fullscreen mode." #~ msgstr "Бітів на піксель (глибина кольору) в повноекранному режимі." +#~ msgid "Block bounds shown for all blocks" +#~ msgstr "Межі показуються в усіх блоків" + #~ msgid "Bump Mapping" #~ msgstr "Бамп-маппінг" @@ -6937,6 +7112,9 @@ msgstr "Обмеження одночасних з'єднань cURL" #~ msgid "Camera update toggle key" #~ msgstr "Контроль оновлення камери" +#~ msgid "Change Keys" +#~ msgstr "Змінити клавіші" + #~ msgid "Change keys" #~ msgstr "Змінити клавіші" @@ -6983,12 +7161,47 @@ msgstr "Обмеження одночасних з'єднань cURL" #~ msgid "Controlled by a checkbox in the settings menu." #~ msgstr "Керується прапорцем у меню налаштувань." +#, c-format +#~ msgid "" +#~ "Controls:\n" +#~ "- %s: move forwards\n" +#~ "- %s: move backwards\n" +#~ "- %s: move left\n" +#~ "- %s: move right\n" +#~ "- %s: jump/climb up\n" +#~ "- %s: dig/punch/use\n" +#~ "- %s: place/use\n" +#~ "- %s: sneak/climb down\n" +#~ "- %s: drop item\n" +#~ "- %s: inventory\n" +#~ "- Mouse: turn/look\n" +#~ "- Mouse wheel: select item\n" +#~ "- %s: chat\n" +#~ msgstr "" +#~ "Керування:\n" +#~ "- %s: рухатися вперед\n" +#~ "- %s: рухатися назад\n" +#~ "- %s: рухатися вліво\n" +#~ "- %s: рухатися вправо\n" +#~ "- %s: стрибати/лізти вгору\n" +#~ "- %s: копати/вдарити/використати\n" +#~ "- %s: поставити/використати\n" +#~ "- %s: крастися/лізти вниз\n" +#~ "- %s: кинути предмет\n" +#~ "- %s: інвентар\n" +#~ "- Миша: поворот/дивитися\n" +#~ "- Коліщатко миші: вибір предмета\n" +#~ "- %s: чат\n" + #~ msgid "Creative" #~ msgstr "Творчість" #~ msgid "Credits" #~ msgstr "Подяки" +#~ msgid "DPI" +#~ msgstr "DPI" + #~ msgid "Damage" #~ msgstr "Поранення" @@ -7050,6 +7263,13 @@ msgstr "Обмеження одночасних з'єднань cURL" #~ msgid "Enable players getting damage and dying." #~ msgstr "Увімкнути отримання гравцями урону і їх смерть." +#~ msgid "" +#~ "Enable vertex buffer objects.\n" +#~ "This should greatly improve graphics performance." +#~ msgstr "" +#~ "Увімкнути об'єкти буферу вершин.\n" +#~ "Це повинно значно покращити графічну продуктивність." + #~ msgid "Enabled" #~ msgstr "Увімкнено" @@ -7228,6 +7448,9 @@ msgstr "Обмеження одночасних з'єднань cURL" #~ msgid "Install: file: \"$1\"" #~ msgstr "Встановлення: файл: \"$1\"" +#~ msgid "Invalid gamespec." +#~ msgstr "Помилкова конфігурація gamespec." + #~ msgid "Inventory key" #~ msgstr "Клавіша інвентаря" @@ -7507,6 +7730,12 @@ msgstr "Обмеження одночасних з'єднань cURL" #~ msgid "Main menu style" #~ msgstr "Стиль головного меню" +#~ msgid "Makes all liquids opaque" +#~ msgstr "Робить усі рідини непрозорими" + +#~ msgid "Mapblock mesh generator's MapBlock cache size in MB" +#~ msgstr "Розмір кешу блоків мапи генератору мешів у МБ" + #~ msgid "Menus" #~ msgstr "Меню" @@ -7653,12 +7882,18 @@ msgstr "Обмеження одночасних з'єднань cURL" #~ msgid "Simple Leaves" #~ msgstr "Просте листя" +#~ msgid "" +#~ "Size of the MapBlock cache of the mesh generator. Increasing this will\n" +#~ "increase the cache hit %, reducing the data being copied from the main\n" +#~ "thread, thus reducing jitter." +#~ msgstr "" +#~ "Розмір кешу блоків мапи в генераторі мешів. Збільшення цього\n" +#~ "збільшить % попадання в кеш, зменшуючи дані, що копіються з\n" +#~ "головного потоку, тим самим зменшуючи тремтіння." + #~ msgid "Smooth Lighting" #~ msgstr "Згладжене освітлення" -#~ msgid "Sound" -#~ msgstr "Звук" - #~ msgid "Special" #~ msgstr "Спеціальна" @@ -7698,6 +7933,9 @@ msgstr "Обмеження одночасних з'єднань cURL" #~ msgid "Touch threshold (px):" #~ msgstr "Чутливість дотику (пкс):" +#~ msgid "Touchscreen threshold" +#~ msgstr "Поріг дотику" + #~ msgid "Trilinear Filter" #~ msgstr "Трилінійна фільтрація" @@ -7713,6 +7951,9 @@ msgstr "Обмеження одночасних з'єднань cURL" #~ msgid "Up" #~ msgstr "Вгору" +#~ msgid "VBO" +#~ msgstr "VBO" + #~ msgid "" #~ "Version number which was last seen during an update check.\n" #~ "\n" @@ -7769,8 +8010,14 @@ msgstr "Обмеження одночасних з'єднань cURL" #~ msgid "You died." #~ msgstr "Ви загинули" +#~ msgid "You have no games installed." +#~ msgstr "Ви не маєте встановлених ігор." + #~ msgid "Z" #~ msgstr "Z" #~ msgid "needs_fallback_font" #~ msgstr "no" + +#~ msgid "ok" +#~ msgstr "добре" diff --git a/po/vi/minetest.po b/po/vi/minetest.po index 73bb4ec04..960724779 100644 --- a/po/vi/minetest.po +++ b/po/vi/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Vietnamese (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" "PO-Revision-Date: 2022-08-26 10:18+0000\n" "Last-Translator: Văn Chí \n" "Language-Team: Vietnamese ]" +#, fuzzy +msgid "[all | ] [-t]" msgstr "[all | ]" -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" -msgstr "OK" - #: builtin/fstk/ui.lua msgid "" msgstr "" @@ -105,6 +103,10 @@ msgstr "Đã xảy ra lỗi:" msgid "Main menu" msgstr "Màn hình chính" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "OK" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "Kết nối lại" @@ -133,19 +135,27 @@ msgstr "Chúng tôi chỉ hỗ trợ phiên bản giao thức $1." msgid "We support protocol versions between version $1 and $2." msgstr "Chúng tôi hỗ trợ các phiên bản giao thức giữa phiên bản $1 đến $2." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "\"$1\" đã tồn tại. Bạn có muốn ghi đè nó không?" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." -msgstr "Phần phụ thuộc $1 và $2 sẽ được cài đặt." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "Failed to download \"$1\"" +msgstr "Đã xảy ra lỗi khi tải xuống $1" + +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr "Đã xảy ra lỗi khi tải xuống $1" + +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "Cài đặt: Loại tệp không được hỗ trợ hoặc tệp lưu trữ bị hỏng" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" @@ -153,159 +163,158 @@ msgstr "" "$1 đang tải xuống,\n" "$2 đã thêm vào hàng chờ" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." msgstr "Đang tải xuống $1..." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "Không tìm thấy phần phụ thuộc cần cho $1." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "$1 sẽ được cài đặt, phần phụ thuộc $2 sẽ bị bỏ qua." - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "Tất cả các gói" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "Đã được cài đặt" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "Trở về màn hình chính" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "ContentDB không có sẵn khi Minetest được biên dịch mà không có cURL" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "Đang tải xuống..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "Trò chơi" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +msgstr "Cài đặt" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp +msgid "Loading..." +msgstr "Đang tải..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +#, fuzzy +msgid "Mods" +msgstr "Sửa đổi" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "Không nhận được gói nào" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "Không có kết quả" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "Không có cập nhật mới" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "Đã thêm vào hàng chờ" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "Gói kết cấu" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "Gỡ cài đặt" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "Cập nhật" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "Cập nhật tất cả [$1]" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "View more information in a web browser" +msgstr "Xem thêm thông tin trên trình duyệt web của bạn" + +#: 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 "Phần phụ thuộc $1 và $2 sẽ được cài đặt." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "Không tìm thấy phần phụ thuộc cần cho $1." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "$1 sẽ được cài đặt, phần phụ thuộc $2 sẽ bị bỏ qua." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "Đã được cài đặt" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "Trò chơi cơ bản:" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "Hủy" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "ContentDB không có sẵn khi Minetest được biên dịch mà không có cURL" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "Phụ thuộc:" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "Đang tải xuống..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to download \"$1\"" -msgstr "Đã xảy ra lỗi khi tải xuống $1" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "Đã xảy ra lỗi khi tải xuống $1" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "Cài đặt: Loại tệp không được hỗ trợ hoặc tệp lưu trữ bị hỏng" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "Trò chơi" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "Cài đặt" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "Cài đặt $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "Cài đặt phần phụ thuộc bị thiếu" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "Đang tải..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Mods" -msgstr "Sửa đổi" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "Không nhận được gói nào" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "Không có kết quả" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "Không có cập nhật mới" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "Không tìm thấy" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "Ghi đè" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "Vui lòng kiểm tra xem trò chơi này có đúng không." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" -msgstr "Đã thêm vào hàng chờ" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" +msgstr "\"$1\" đã tồn tại. Bạn có muốn ghi đè nó không?" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "Gói kết cấu" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "Gỡ cài đặt" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "Cập nhật" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "Cập nhật tất cả [$1]" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "Xem thêm thông tin trên trình duyệt web của bạn" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" -msgstr "" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" +msgstr "Ghi đè" #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" @@ -456,11 +465,21 @@ msgstr "Tạo ra" msgid "Decorations" msgstr "Vật trang trí" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua #, fuzzy msgid "Development Test is meant for developers." msgstr "Cảnh báo: Kiểm tra Phát triển chỉ dành cho các nhà phát triển." +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "Ngục tối" @@ -838,10 +857,6 @@ msgstr "" msgid "Back" msgstr "Lùi xuống" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "Thay đổi khóa" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -851,7 +866,8 @@ msgstr "Trò chuyện" msgid "Clear" msgstr "Xóa" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "Điều khiển" @@ -1062,6 +1078,16 @@ msgstr "Cài đặt một trò chơi" msgid "Install games from ContentDB" msgstr "Cài đặt trò chơi từ ContentDB" +#: builtin/mainmenu/tab_local.lua +msgid "Minetest 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 " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "Mới" @@ -1095,8 +1121,8 @@ msgid "Start Game" msgstr "Bắt đầu trò chơi" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." -msgstr "Bạn chưa cài đặt trò chơi nào." +msgid "You need to install a game before you can create a world." +msgstr "" #: builtin/mainmenu/tab_online.lua msgid "Address" @@ -1177,19 +1203,10 @@ msgstr "Đang tải kết cấu..." msgid "Rebuilding shaders..." msgstr "Đang xây dựng lại trình đổ bóng..." -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "Lỗi kết nối (hết thời gian chờ?)" - #: src/client/clientlauncher.cpp msgid "Could not find or load game: " msgstr "Không tìm thấy hoặc tải trò chơi: " -#: src/client/clientlauncher.cpp -#, fuzzy -msgid "Invalid gamespec." -msgstr "Gamespec không hợp lệ." - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "Màn hình chính" @@ -1216,7 +1233,11 @@ msgstr "Không mở được tệp mật khẩu được cung cấp: " msgid "Provided world path doesn't exist: " msgstr "Đường dẫn thế giới được cung cấp không tồn tại: " -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "" + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp msgid "" "\n" "Check debug.txt for details." @@ -1224,18 +1245,10 @@ msgstr "" "\n" "Hãy kiểm tra debug.txt để có thông tin chi tiết." -#: src/client/game.cpp -msgid "- Address: " -msgstr "- Địa chỉ: " - #: src/client/game.cpp msgid "- Mode: " msgstr "- Chế độ: " -#: src/client/game.cpp -msgid "- Port: " -msgstr "- Cổng: " - #: src/client/game.cpp msgid "- Public: " msgstr "- Công cộng: " @@ -1270,10 +1283,6 @@ msgstr "Tự động chuyển tiếp đã bật" msgid "Block bounds hidden" msgstr "Các ranh giới khối đã ẩn" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "Đã hiển thị ranh giới cho tất cả các khối" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "Đã hiển thị ranh giới hiển thị cho khối hiện tại" @@ -1320,6 +1329,10 @@ msgstr "Chạy kịch bản phía máy khách đã tắt" msgid "Connecting to server..." msgstr "Đang kết nối tới máy chủ..." +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "Lỗi kết nối (hết thời gian chờ?)" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "Kết nối không thành công vì lý do không xác định" @@ -1328,47 +1341,14 @@ msgstr "Kết nối không thành công vì lý do không xác định" msgid "Continue" msgstr "Tiếp tục" -#: src/client/game.cpp -#, fuzzy, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" -"Điền khiển:\n" -"- %s: tiến lên\n" -"- %s: lùi xuống\n" -"- %s: sang trái\n" -"- %s: sang phải\n" -"- %s: nhảy / leo lên\n" -"- %s: đào / đấm\n" -"- %s: đặt khối / sử dụng\n" -"- %s: đi rón rén / leo xuống\n" -"- %s: thả vật phẩm\n" -"- %s: túi đồ\n" -"- Di chuột: xoay / nhìn\n" -"- Lăn chuột: chọn vật phẩm\n" -"- %s: trò chuyện\n" - #: src/client/game.cpp #, fuzzy msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1460,6 +1440,11 @@ msgstr "Sương mù đã tắt" msgid "Fog enabled" msgstr "Sương mù đã bật" +#: src/client/game.cpp +#, fuzzy +msgid "Fog enabled by game or mod" +msgstr "Thu phóng đã bị vô hiệu bởi trò chơi hoặc mod" + #: src/client/game.cpp msgid "Game info:" msgstr "Thông tin trò chơi:" @@ -1480,10 +1465,6 @@ msgstr "Định nghĩa vật phẩm..." msgid "KiB/s" msgstr "KiB/s" -#: src/client/game.cpp -msgid "Media..." -msgstr "" - #: src/client/game.cpp msgid "MiB/s" msgstr "MiB/s" @@ -1641,10 +1622,6 @@ msgstr "Hiện khung dây" msgid "Zoom currently disabled by game or mod" msgstr "Thu phóng đã bị vô hiệu bởi trò chơi hoặc mod" -#: src/client/game.cpp -msgid "ok" -msgstr "OK" - #: src/client/gameui.cpp #, fuzzy msgid "Chat currently disabled by game or mod" @@ -1978,6 +1955,15 @@ msgstr "Minimap ở chế độ mặt nền, mức thu phóng %dx" msgid "Minimap in texture mode" msgstr "Minimap ở chế độ kết cấu" +#: src/client/shader.cpp +#, fuzzy, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "Đã xảy ra lỗi khi mở trang web" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2168,6 +2154,19 @@ msgstr "Thu phóng" msgid "press key" msgstr "bấm phím" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +#, fuzzy +msgid "Unable to open URL" +msgstr "Đã xảy ra lỗi khi mở trang web" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "Thay đổi" @@ -2201,6 +2200,7 @@ msgstr "Âm lượng: %d%%" #. 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 "vi" @@ -2394,14 +2394,6 @@ msgstr "" msgid "Adds particles when digging a node." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" -"Điều chỉnh cấu hình DPI cho màn hình của bạn (chỉ cho Android/không phải " -"X11), VD: cho màn hình 4K." - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2425,6 +2417,10 @@ msgstr "Tên quản trị viên" msgid "Advanced" msgstr "Nâng cao" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2480,6 +2476,17 @@ msgstr "" msgid "Apple trees noise" msgstr "Nhiễu cho các cây táo" +#: 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 "Arm inertia" msgstr "Quán tính của cánh tay" @@ -2503,12 +2510,21 @@ msgid "" "clients.\n" "Small values potentially improve performance a lot, at the expense of " "visible\n" -"rendering glitches (some blocks will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +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 @@ -2573,6 +2589,10 @@ msgstr "Quần xã" msgid "Biome noise" msgstr "Nhiễu quần xã" +#: src/settings_translation_file.cpp +msgid "Block cull optimize distance" +msgstr "" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "" @@ -2787,6 +2807,12 @@ msgstr "Sương mù có màu" msgid "Colored shadows" msgstr "Bóng có màu" +#: 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -2925,10 +2951,6 @@ msgid "" "Also controls the object crosshair color" msgstr "" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "DPI" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "" @@ -2978,6 +3000,26 @@ msgid "" "but also uses more resources." 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 " +"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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" +"Kích hoạt để ngăn các máy khách sử dụng phiên bản cũ kết nối. Các máy " +"khách \n" +"cũ hơn tương thích trong trường hợp chúng không gặp sự cố khi kết nối vàomáy " +"chủ mới,\n" +"tuy nhiên chúng có thể không hỗ trợ tất cả các tính năng mới như bạn mong " +"đợi." + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "" @@ -3165,6 +3207,11 @@ msgstr "Kích hoạt tất cả" msgid "Enable Bloom Debug" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Debanding" +msgstr "Kích hoạt sát thương" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3188,6 +3235,11 @@ msgid "" "filtering." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Post Processing" +msgstr "Kích hoạt joystick" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "" @@ -3230,6 +3282,11 @@ msgstr "Kích hoạt bảo mật mod" 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 "Kích hoạt dữ liệu nhập ngẫu nhiên (chỉ cho việc thử nghiệm)." + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "Kích hoạt dữ liệu nhập ngẫu nhiên (chỉ cho việc thử nghiệm)." @@ -3259,6 +3316,10 @@ msgstr "" "tuy nhiên chúng có thể không hỗ trợ tất cả các tính năng mới như bạn mong " "đợi." +#: src/settings_translation_file.cpp +msgid "Enable touchscreen" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3267,12 +3328,6 @@ msgid "" "when connecting to the server." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3302,6 +3357,19 @@ msgstr "Kích hoạt hoạt ảnh của các vật phẩm trong túi đồ." msgid "Enables caching of facedir rotated meshes." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -4100,9 +4168,10 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" #: src/settings_translation_file.cpp @@ -4249,10 +4318,6 @@ msgid "" "Make fog and sky colors depend on daytime (dawn/sunset) and view direction." msgstr "" -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "" @@ -4301,7 +4366,9 @@ 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." +"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 @@ -4336,10 +4403,6 @@ msgstr "" msgid "Mapblock mesh generation threads" msgstr "" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "" @@ -4585,6 +4648,10 @@ msgstr "" msgid "Minimap scan height" msgstr "" +#: src/settings_translation_file.cpp +msgid "Minimum dig repetition interval" +msgstr "" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "" @@ -4653,6 +4720,11 @@ msgstr "Độ nhạy chuột" msgid "Mouse sensitivity multiplier." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Movement threshold" +msgstr "Ngưỡng chạm (px):" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "" @@ -4763,10 +4835,6 @@ msgstr "" msgid "Occlusion Culling" msgstr "" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -4779,6 +4847,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "OpenGL debug" +msgstr "" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "" @@ -4888,6 +4960,15 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Protocol version minimum" +msgstr "Phiên bản giao thức không khớp. " + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -4903,6 +4984,10 @@ msgstr "" msgid "Random input" msgstr "" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "" @@ -5092,8 +5177,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5215,7 +5300,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" @@ -5248,6 +5333,10 @@ msgid "" "Bright colors will bleed over the neighboring objects." 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 "Set to true to enable waving leaves." msgstr "" @@ -5287,8 +5376,7 @@ msgstr "Trình đổ bóng" msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" #: src/settings_translation_file.cpp @@ -5358,13 +5446,6 @@ msgid "" "recommended." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "" @@ -5400,7 +5481,7 @@ 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 Change Keys." +"cinematic mode by using the key set in Controls." msgstr "" #: src/settings_translation_file.cpp @@ -5421,6 +5502,15 @@ msgstr "" msgid "Soft shadow radius" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sound" +msgstr "Đã tắt tiếng" + +#: src/settings_translation_file.cpp +msgid "Sound Extensions Blacklist" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -5581,17 +5671,37 @@ msgid "" "when calling `/profiler save [format]` without format." 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 "" "The file path relative to your world path in which profiles will be saved to." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "" #: src/settings_translation_file.cpp -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" #: src/settings_translation_file.cpp @@ -5602,6 +5712,12 @@ msgid "" "Default is 1.0 (1/2 node)." 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 "The network interface that the server listens on." msgstr "" @@ -5628,7 +5744,7 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" #: src/settings_translation_file.cpp @@ -5685,6 +5801,10 @@ msgstr "" msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "" +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -5734,12 +5854,11 @@ msgid "Touchscreen sensitivity multiplier." msgstr "Độ nhạy chuột" #: src/settings_translation_file.cpp -#, fuzzy -msgid "Touchscreen threshold" -msgstr "Ngưỡng chạm (px):" +msgid "Tradeoffs for performance" +msgstr "" #: src/settings_translation_file.cpp -msgid "Tradeoffs for performance" +msgid "Translucent liquids" msgstr "" #: src/settings_translation_file.cpp @@ -5777,7 +5896,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 "" #: src/settings_translation_file.cpp @@ -5879,10 +6000,6 @@ msgstr "" msgid "User Interfaces" msgstr "" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "" @@ -5969,12 +6086,26 @@ msgstr "" msgid "Volume" msgstr "" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +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 +#, fuzzy +msgid "Volume when unfocused" +msgstr "FPS khi cửa sổ đang hiện hoạt hoặc tạm dừng" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volumetric lighting" +msgstr "Đánh dấu node" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" @@ -6211,12 +6342,18 @@ msgstr "Hết thời gian tương tác với cURL" msgid "cURL parallel limit" msgstr "Gặp giới hạn số lượng tệp tải xuống trong cURL" +#~ msgid "- Address: " +#~ msgstr "- Địa chỉ: " + #~ msgid "- Creative Mode: " #~ msgstr "- Chế độ sáng tạo: " #~ msgid "- Damage: " #~ msgstr "- Tổn hại: " +#~ msgid "- Port: " +#~ msgstr "- Cổng: " + #~ msgid "2x" #~ msgstr "2x" @@ -6235,6 +6372,13 @@ msgstr "Gặp giới hạn số lượng tệp tải xuống trong cURL" #~ msgid "< Back to Settings page" #~ msgstr "< Về trang Cài đặt" +#~ msgid "" +#~ "Adjust dpi configuration to your screen (non X11/Android only) e.g. for " +#~ "4k screens." +#~ msgstr "" +#~ "Điều chỉnh cấu hình DPI cho màn hình của bạn (chỉ cho Android/không phải " +#~ "X11), VD: cho màn hình 4K." + #~ msgid "All Settings" #~ msgstr "Tất cả cài đặt" @@ -6253,9 +6397,15 @@ msgstr "Gặp giới hạn số lượng tệp tải xuống trong cURL" #~ msgid "Bilinear Filter" #~ msgstr "Bộ lọc song tuyến" +#~ msgid "Block bounds shown for all blocks" +#~ msgstr "Đã hiển thị ranh giới cho tất cả các khối" + #~ msgid "Camera update toggle key" #~ msgstr "Nút chuyển đổi cập nhật máy ảnh" +#~ msgid "Change Keys" +#~ msgstr "Thay đổi khóa" + #, fuzzy #~ msgid "Change keys" #~ msgstr "Thay đổi khóa" @@ -6284,9 +6434,44 @@ msgstr "Gặp giới hạn số lượng tệp tải xuống trong cURL" #~ msgid "Connected Glass" #~ msgstr "Kính kết nối với nhau" +#, fuzzy, c-format +#~ msgid "" +#~ "Controls:\n" +#~ "- %s: move forwards\n" +#~ "- %s: move backwards\n" +#~ "- %s: move left\n" +#~ "- %s: move right\n" +#~ "- %s: jump/climb up\n" +#~ "- %s: dig/punch/use\n" +#~ "- %s: place/use\n" +#~ "- %s: sneak/climb down\n" +#~ "- %s: drop item\n" +#~ "- %s: inventory\n" +#~ "- Mouse: turn/look\n" +#~ "- Mouse wheel: select item\n" +#~ "- %s: chat\n" +#~ msgstr "" +#~ "Điền khiển:\n" +#~ "- %s: tiến lên\n" +#~ "- %s: lùi xuống\n" +#~ "- %s: sang trái\n" +#~ "- %s: sang phải\n" +#~ "- %s: nhảy / leo lên\n" +#~ "- %s: đào / đấm\n" +#~ "- %s: đặt khối / sử dụng\n" +#~ "- %s: đi rón rén / leo xuống\n" +#~ "- %s: thả vật phẩm\n" +#~ "- %s: túi đồ\n" +#~ "- Di chuột: xoay / nhìn\n" +#~ "- Lăn chuột: chọn vật phẩm\n" +#~ "- %s: trò chuyện\n" + #~ msgid "Creative" #~ msgstr "Sáng tạo" +#~ msgid "DPI" +#~ msgstr "DPI" + #~ msgid "Damage" #~ msgstr "Sát thương" @@ -6378,6 +6563,10 @@ msgstr "Gặp giới hạn số lượng tệp tải xuống trong cURL" #~ msgid "Install Mod: Unable to find real mod name for: $1" #~ msgstr "Cài đặt mod: Không thể tìm thấy tên mod thật cho: $1" +#, fuzzy +#~ msgid "Invalid gamespec." +#~ msgstr "Gamespec không hợp lệ." + #~ msgid "Mipmap" #~ msgstr "Mipmap" @@ -6390,10 +6579,6 @@ msgstr "Gặp giới hạn số lượng tệp tải xuống trong cURL" #~ msgid "No Mipmap" #~ msgstr "Không dùng Mipmap" -#, fuzzy -#~ msgid "Node Highlighting" -#~ msgstr "Đánh dấu node" - #, fuzzy #~ msgid "Node Outlining" #~ msgstr "Phác thảo node" @@ -6487,5 +6672,11 @@ msgstr "Gặp giới hạn số lượng tệp tải xuống trong cURL" #~ msgid "You died." #~ msgstr "Bạn đã chết" +#~ msgid "You have no games installed." +#~ msgstr "Bạn chưa cài đặt trò chơi nào." + #~ msgid "Z" #~ msgstr "Z" + +#~ msgid "ok" +#~ msgstr "OK" diff --git a/po/yue/minetest.po b/po/yue/minetest.po index 27524c5d1..d2bbeb882 100644 --- a/po/yue/minetest.po +++ b/po/yue/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" "PO-Revision-Date: 2023-12-03 17:17+0000\n" "Last-Translator: Krock \n" "Language-Team: Yue (Traditional) ]" -msgstr "" - -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" +msgid "[all | ] [-t]" msgstr "" #: builtin/fstk/ui.lua @@ -103,6 +99,10 @@ msgstr "" msgid "Main menu" msgstr "" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "" @@ -131,173 +131,180 @@ msgstr "" msgid "We support protocol versions between version $1 and $2." msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download \"$1\"" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +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 "Mods" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "" + +#: 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 "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download \"$1\"" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" msgstr "" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" msgstr "" #: builtin/mainmenu/content/pkgmgr.lua @@ -444,10 +451,20 @@ msgstr "" msgid "Decorations" msgstr "" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." msgstr "" +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "" @@ -810,10 +827,6 @@ msgstr "" msgid "Back" msgstr "" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -823,7 +836,8 @@ msgstr "" msgid "Clear" msgstr "" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "" @@ -1026,6 +1040,16 @@ msgstr "" msgid "Install games from ContentDB" msgstr "" +#: builtin/mainmenu/tab_local.lua +msgid "Minetest 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 " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "" @@ -1059,7 +1083,7 @@ msgid "Start Game" msgstr "" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." +msgid "You need to install a game before you can create a world." msgstr "" #: builtin/mainmenu/tab_online.lua @@ -1139,18 +1163,10 @@ msgstr "" msgid "Rebuilding shaders..." msgstr "" -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "" - #: src/client/clientlauncher.cpp msgid "Could not find or load game: " msgstr "" -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "" - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "" @@ -1175,24 +1191,20 @@ msgstr "" msgid "Provided world path doesn't exist: " msgstr "" -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +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 "- Address: " -msgstr "" - #: src/client/game.cpp msgid "- Mode: " msgstr "" -#: src/client/game.cpp -msgid "- Port: " -msgstr "" - #: src/client/game.cpp msgid "- Public: " msgstr "" @@ -1227,10 +1239,6 @@ msgstr "" msgid "Block bounds hidden" msgstr "" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "" @@ -1275,6 +1283,10 @@ msgstr "" msgid "Connecting to server..." msgstr "" +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "" @@ -1283,32 +1295,13 @@ msgstr "" msgid "Continue" msgstr "" -#: src/client/game.cpp -#, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" - #: src/client/game.cpp msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1388,6 +1381,10 @@ msgstr "" msgid "Fog enabled" msgstr "" +#: src/client/game.cpp +msgid "Fog enabled by game or mod" +msgstr "" + #: src/client/game.cpp msgid "Game info:" msgstr "" @@ -1408,10 +1405,6 @@ msgstr "" msgid "KiB/s" msgstr "" -#: src/client/game.cpp -msgid "Media..." -msgstr "" - #: src/client/game.cpp msgid "MiB/s" msgstr "" @@ -1567,10 +1560,6 @@ msgstr "" msgid "Zoom currently disabled by game or mod" msgstr "" -#: src/client/game.cpp -msgid "ok" -msgstr "" - #: src/client/gameui.cpp msgid "Chat currently disabled by game or mod" msgstr "" @@ -1891,6 +1880,15 @@ msgstr "" msgid "Minimap in texture mode" msgstr "" +#: src/client/shader.cpp +#, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" + #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp #, c-format @@ -2080,6 +2078,18 @@ msgstr "" msgid "press key" msgstr "" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Unable to open URL" +msgstr "" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "" @@ -2113,6 +2123,7 @@ msgstr "" #. 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 "yue_Hant" @@ -2298,12 +2309,6 @@ msgstr "" msgid "Adds particles when digging a node." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" @@ -2326,6 +2331,10 @@ msgstr "" msgid "Advanced" msgstr "" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2379,6 +2388,17 @@ msgstr "" msgid "Apple trees noise" 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 "Arm inertia" msgstr "" @@ -2400,12 +2420,21 @@ msgid "" "clients.\n" "Small values potentially improve performance a lot, at the expense of " "visible\n" -"rendering glitches (some blocks will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +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 @@ -2468,6 +2497,10 @@ msgstr "" msgid "Biome noise" msgstr "" +#: src/settings_translation_file.cpp +msgid "Block cull optimize distance" +msgstr "" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "" @@ -2680,6 +2713,12 @@ msgstr "" msgid "Colored shadows" 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -2811,10 +2850,6 @@ msgid "" "Also controls the object crosshair color" msgstr "" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "" @@ -2864,6 +2899,19 @@ msgid "" "but also uses more resources." 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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "" @@ -3048,6 +3096,10 @@ msgstr "" msgid "Enable Bloom Debug" msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable Debanding" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" @@ -3067,6 +3119,10 @@ msgid "" "filtering." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable Post Processing" +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" msgstr "" @@ -3109,6 +3165,10 @@ msgstr "" msgid "Enable mouse wheel (scroll) for item selection in hotbar." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable random mod loading (mainly used for testing)." +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3132,6 +3192,10 @@ msgid "" "expecting." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable touchscreen" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3140,12 +3204,6 @@ msgid "" "when connecting to the server." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3175,6 +3233,19 @@ msgstr "" msgid "Enables caching of facedir rotated meshes." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -3969,9 +4040,10 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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 "" #: src/settings_translation_file.cpp @@ -4117,10 +4189,6 @@ msgid "" "Make fog and sky colors depend on daytime (dawn/sunset) and view direction." msgstr "" -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "" @@ -4169,7 +4237,9 @@ 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." +"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 @@ -4204,10 +4274,6 @@ msgstr "" msgid "Mapblock mesh generation threads" msgstr "" -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "" @@ -4449,6 +4515,10 @@ msgstr "" msgid "Minimap scan height" msgstr "" +#: src/settings_translation_file.cpp +msgid "Minimum dig repetition interval" +msgstr "" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "" @@ -4517,6 +4587,10 @@ msgstr "" msgid "Mouse sensitivity multiplier." msgstr "" +#: src/settings_translation_file.cpp +msgid "Movement threshold" +msgstr "" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "" @@ -4625,10 +4699,6 @@ msgstr "" msgid "Occlusion Culling" msgstr "" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -4641,6 +4711,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "OpenGL debug" +msgstr "" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "" @@ -4750,6 +4824,14 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "" +#: src/settings_translation_file.cpp +msgid "Protocol version minimum" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -4765,6 +4847,10 @@ msgstr "" msgid "Random input" msgstr "" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "" @@ -4952,8 +5038,8 @@ msgid "" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5071,7 +5157,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" @@ -5104,6 +5190,10 @@ msgid "" "Bright colors will bleed over the neighboring objects." 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 "Set to true to enable waving leaves." msgstr "" @@ -5143,8 +5233,7 @@ msgstr "" msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" #: src/settings_translation_file.cpp @@ -5214,13 +5303,6 @@ msgid "" "recommended." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "" @@ -5256,7 +5338,7 @@ 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 Change Keys." +"cinematic mode by using the key set in Controls." msgstr "" #: src/settings_translation_file.cpp @@ -5277,6 +5359,14 @@ msgstr "" msgid "Soft shadow radius" 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 "" "Specifies URL from which client fetches media instead of using UDP.\n" @@ -5433,17 +5523,37 @@ msgid "" "when calling `/profiler save [format]` without format." 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 "" "The file path relative to your world path in which profiles will be saved to." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "" #: src/settings_translation_file.cpp -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "" #: src/settings_translation_file.cpp @@ -5454,6 +5564,12 @@ msgid "" "Default is 1.0 (1/2 node)." 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 "The network interface that the server listens on." msgstr "" @@ -5480,7 +5596,7 @@ 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" #: src/settings_translation_file.cpp @@ -5537,6 +5653,10 @@ msgstr "" msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "" +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -5584,11 +5704,11 @@ msgid "Touchscreen sensitivity multiplier." msgstr "" #: src/settings_translation_file.cpp -msgid "Touchscreen threshold" +msgid "Tradeoffs for performance" msgstr "" #: src/settings_translation_file.cpp -msgid "Tradeoffs for performance" +msgid "Translucent liquids" msgstr "" #: src/settings_translation_file.cpp @@ -5626,7 +5746,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest release" +"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 "" #: src/settings_translation_file.cpp @@ -5724,10 +5846,6 @@ msgstr "" msgid "User Interfaces" msgstr "" -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "" - #: src/settings_translation_file.cpp msgid "VSync" msgstr "" @@ -5814,12 +5932,24 @@ msgstr "" msgid "Volume" msgstr "" +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +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 "Volumetric lighting" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "W coordinate of the generated 3D slice of a 4D fractal.\n" diff --git a/po/zh_CN/minetest.po b/po/zh_CN/minetest.po index 6326e1f3d..556e9fbf6 100644 --- a/po/zh_CN/minetest.po +++ b/po/zh_CN/minetest.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: Chinese (Simplified) (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" -"PO-Revision-Date: 2023-11-17 00:07+0000\n" -"Last-Translator: milewood <2598175722@qq.com>\n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" +"PO-Revision-Date: 2024-07-31 22:09+0000\n" +"Last-Translator: y5nw \n" "Language-Team: Chinese (Simplified) \n" "Language: zh_CN\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.2\n" +"X-Generator: Weblate 5.7-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 msgid "Exit to main menu" @@ -71,7 +71,8 @@ msgid "Command not available: " msgstr "命令不可用: " #: builtin/common/chatcommands.lua -msgid "Get help for commands" +#, fuzzy +msgid "Get help for commands (-t: output in chat)" msgstr "获取命令帮助" #: builtin/common/chatcommands.lua @@ -81,12 +82,8 @@ msgstr "" "使用 '.help ' 获取该命令的更多信息,或使用 '.help all' 列出所有内容。" #: builtin/common/chatcommands.lua -msgid "[all | ]" -msgstr "[all | <命令>]" - -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" -msgstr "OK" +msgid "[all | ] [-t]" +msgstr "[all | <命令>] [-t]" #: builtin/fstk/ui.lua msgid "" @@ -104,6 +101,10 @@ msgstr "发生了错误:" msgid "Main menu" msgstr "主菜单" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "OK" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "重新连接" @@ -132,177 +133,185 @@ msgstr "我们只支持协议版本 $1。" msgid "We support protocol versions between version $1 and $2." msgstr "我们支持的协议版本为 $1 至 $2。" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "\"$1\"已经存在,你要覆盖它吗?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" +msgstr "在安装 \"$1\": $2 时发生错误" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." -msgstr "$1 和 $2 依赖项将被安装." +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download \"$1\"" +msgstr "无法下载 $1" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" -msgstr "$1 作者: $2" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr "下载 $1 失败" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "无法解压\"$1\":存储空间不足、文件类型不支持或压缩包已损坏" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" msgstr "" -"$1 正在下载,\n" -"$2 排队中" +"正在下载$1\n" +"准备下载$2" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." -msgstr "正在下载 $1 ……" +msgstr "正在下载 $1…" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "有$1个依赖项没有找到。" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "$1 将被安装, $2 依赖项将被跳过." - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "所有包" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "已安装" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "返回主菜单" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "在没有cURL的情况下编译Minetest时,ContentDB不可用" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "下载中..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +#, fuzzy +msgid "Error getting dependencies for package" +msgstr "无法获取这个包的依赖项" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "子游戏" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +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 "Mods" +msgstr "Mod" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "无法检索任何包" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "无结果" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "没有更新" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "已加入队列" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "材质包" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "找不到包 “$1”。" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "卸载" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "更新" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "更新所有 [$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 "在安装mod前,你需要先安装一个子游戏" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 and $2 dependencies will be installed." +msgstr "$1 和 $2 依赖项将被安装." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "$1 作者: $2" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "有 $1 个依赖项没有找到。" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "$1 将被安装, $2 依赖项将被跳过." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "已安装" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "基础游戏:" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "取消" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "在没有cURL的情况下编译Minetest时,ContentDB不可用" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "依赖项:" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "下载中..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "在安装 \"$1\": $2 时发生错误" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to download \"$1\"" -msgstr "下载 $1 失败" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "下载 $1 失败" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "安装:\"$1\" 的文件类型不支持或压缩包已损坏" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "子游戏" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "安装" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "安装$1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "安装缺失的依赖项" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "加载中..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "Mod" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "无法检索任何包" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "无结果" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "没有更新" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "未找到" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "覆写" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "请查看游戏是否正确。" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" -msgstr "已加入队列" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" +msgstr "\"$1\"已经存在,你要覆盖它吗?" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "材质包" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "卸载" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "更新" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "更新所有 [$1]" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "在网络浏览器中查看更多信息" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" -msgstr "在安装mod前,你需要先安装一个子游戏" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" +msgstr "覆写" #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" @@ -317,14 +326,12 @@ msgid "Failed to install $1 to $2" msgstr "无法把$1安装到$2" #: builtin/mainmenu/content/pkgmgr.lua -#, fuzzy msgid "Install: Unable to find suitable folder name for $1" -msgstr "安装mod:无法找到mod包$1的合适文件夹名" +msgstr "安装mod:无法找到mod包 $1 的合适文件夹名" #: builtin/mainmenu/content/pkgmgr.lua -#, fuzzy msgid "Unable to find a valid mod, modpack, or game" -msgstr "无法找到mod或mod包" +msgstr "找不到有效的 Mod、整合包或者子游戏" #: builtin/mainmenu/content/pkgmgr.lua msgid "Unable to install a $1 as a $2" @@ -348,7 +355,7 @@ msgstr "全部禁用" #: builtin/mainmenu/dlg_config_world.lua msgid "Disable modpack" -msgstr "禁用 mod 包" +msgstr "禁用整合包" #: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" @@ -356,7 +363,7 @@ msgstr "全部启用" #: builtin/mainmenu/dlg_config_world.lua msgid "Enable modpack" -msgstr "启用 mod 包" +msgstr "启用整合包" #: builtin/mainmenu/dlg_config_world.lua msgid "" @@ -382,11 +389,11 @@ msgstr "未提供游戏描述。" #: builtin/mainmenu/dlg_config_world.lua msgid "No hard dependencies" -msgstr "无依赖项" +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" @@ -450,10 +457,20 @@ msgstr "创建" msgid "Decorations" msgstr "装饰" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." msgstr "开发测试版适用于开发者。" +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" + #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" msgstr "地窖" @@ -654,21 +671,24 @@ msgid "" "\"Minetest Game\". Since Minetest 5.8.0, Minetest ships without a default " "game." msgstr "" +"一直以来,Minetest 游戏引擎默认已经自带了“Minetest Game”这个子游戏。但是从 " +"Minetest 5.8.0 版本起,Minetest 将不再自带任何子游戏。" #: 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 "" +"如果还要继续在已有的 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" @@ -676,18 +696,18 @@ msgstr "接受" #: builtin/mainmenu/dlg_rename_modpack.lua msgid "Rename Modpack:" -msgstr "重命名MOD包:" +msgstr "重命名整合包:" #: 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 "" -"此 mod 包在它的 modpack.conf 中有一个明确的名称,它将覆盖这里的任何重命名。" +"此整合包在它的 modpack.conf 中有一个明确的名称,它将覆盖这里的任何重命名。" #: builtin/mainmenu/dlg_version_info.lua msgid "A new $1 version is available" -msgstr "新的 $1 版本可用" +msgstr "有新的 $1 版本可用" #: builtin/mainmenu/dlg_version_info.lua msgid "" @@ -741,9 +761,8 @@ msgid "Select file" msgstr "选择文件" #: builtin/mainmenu/settings/components.lua -#, fuzzy msgid "Set" -msgstr "选择键" +msgstr "设置" #: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua msgid "(No description of setting given)" @@ -767,7 +786,6 @@ msgid "Offset" msgstr "补偿" #: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua -#, fuzzy msgid "Persistence" msgstr "持续性" @@ -813,20 +831,16 @@ 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 msgid "Back" msgstr "后退" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "更改键位设置" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -836,7 +850,8 @@ msgstr "聊天" msgid "Clear" msgstr "Clear键" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" msgstr "控制" @@ -845,18 +860,16 @@ msgid "General" 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" @@ -864,7 +877,7 @@ msgstr "搜索" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Show advanced settings" -msgstr "" +msgstr "显示高级设置" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Show technical names" @@ -884,11 +897,11 @@ 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" @@ -941,7 +954,7 @@ msgstr "核心团队" #: builtin/mainmenu/tab_about.lua msgid "Irrlicht device:" -msgstr "" +msgstr "Irrlicht 渲染设备:" #: builtin/mainmenu/tab_about.lua msgid "Open User Data Directory" @@ -972,18 +985,16 @@ 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" @@ -1006,9 +1017,8 @@ msgid "Rename" msgstr "重命名" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Update available?" -msgstr "<无可用命令>" +msgstr "有更新可用?" #: builtin/mainmenu/tab_content.lua msgid "Use Texture Pack" @@ -1046,6 +1056,17 @@ msgstr "安装子游戏" msgid "Install games from ContentDB" msgstr "从 ContentDB 安装游戏" +#: builtin/mainmenu/tab_local.lua +#, fuzzy +msgid "Minetest doesn't come with a game by default." +msgstr "Minetest Game 不再是默认自带的子游戏了" + +#: builtin/mainmenu/tab_local.lua +msgid "" +"Minetest is a game-creation platform that allows you to play many different " +"games." +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "新建" @@ -1079,8 +1100,9 @@ msgid "Start Game" msgstr "启动游戏" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." -msgstr "你没有安装任何子游戏。" +#, fuzzy +msgid "You need to install a game before you can create a world." +msgstr "您需要先安装一个子游戏才能创建新的世界。" #: builtin/mainmenu/tab_online.lua msgid "Address" @@ -1113,7 +1135,7 @@ msgstr "登录" #: builtin/mainmenu/tab_online.lua msgid "Ping" -msgstr "应答速度" +msgstr "ping值" #: builtin/mainmenu/tab_online.lua msgid "Public Servers" @@ -1159,18 +1181,10 @@ msgstr "载入材质..." msgid "Rebuilding shaders..." msgstr "重建着色器..." -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "连接出错(超时?)" - #: src/client/clientlauncher.cpp msgid "Could not find or load game: " msgstr "找不到子游戏或者无法载入子游戏: " -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "非法游戏信息。" - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "主菜单" @@ -1195,7 +1209,11 @@ msgstr "提供的密码文件无法打开: " msgid "Provided world path doesn't exist: " msgstr "提供的世界路径不存在: " -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "媒体..." + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp msgid "" "\n" "Check debug.txt for details." @@ -1203,18 +1221,10 @@ msgstr "" "\n" "查看 debug.txt 以获得详细信息。" -#: src/client/game.cpp -msgid "- Address: " -msgstr "- 地址: " - #: src/client/game.cpp msgid "- Mode: " msgstr "- 模式: " -#: src/client/game.cpp -msgid "- Port: " -msgstr "- 端口: " - #: src/client/game.cpp msgid "- Public: " msgstr "- 公共服务器: " @@ -1249,10 +1259,6 @@ msgstr "自动前进已启用" msgid "Block bounds hidden" msgstr "已隐藏方块边界" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "已为所有方块描边" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "已为当前方块描边" @@ -1270,9 +1276,8 @@ msgid "Camera update enabled" msgstr "已启用镜头更新" #: src/client/game.cpp -#, fuzzy msgid "Can't show block bounds (disabled by game or mod)" -msgstr "无法显示方块的边界 (需要“basic_debug”权限)" +msgstr "无法显示方块边界(已被子游戏或者 Mod 禁用)" #: src/client/game.cpp msgid "Change Password" @@ -1298,6 +1303,10 @@ msgstr "客户端脚本已禁用" msgid "Connecting to server..." msgstr "正在连接服务器..." +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "连接出错(超时?)" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "连接失败,原因不明" @@ -1306,47 +1315,14 @@ msgstr "连接失败,原因不明" msgid "Continue" msgstr "继续" -#: src/client/game.cpp -#, fuzzy, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" -"控制:\n" -"- %s:向前移动\n" -"- %s:向后移动\n" -"- %s:向左移动\n" -"- %s:向右移动\n" -"- %s:跳/向上(攀爬)\n" -"- %s:挖/打\n" -"- %s:放/使用\n" -"- %s:潜行/向下(攀爬)\n" -"- %s:丢弃物品\n" -"- %s:物品清单\n" -"- 鼠标:转身/环顾\n" -"- 鼠标滚轮: 选择物品\n" -"- %s:聊天\n" - #: src/client/game.cpp #, fuzzy msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1355,11 +1331,11 @@ 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" @@ -1438,6 +1414,11 @@ msgstr "雾气已禁用" msgid "Fog enabled" msgstr "雾气已启用" +#: src/client/game.cpp +#, fuzzy +msgid "Fog enabled by game or mod" +msgstr "雾被当前子游戏或 mod 启用" + #: src/client/game.cpp msgid "Game info:" msgstr "游戏信息:" @@ -1458,10 +1439,6 @@ msgstr "物品定义..." msgid "KiB/s" msgstr "KiB/s" -#: src/client/game.cpp -msgid "Media..." -msgstr "媒体..." - #: src/client/game.cpp msgid "MiB/s" msgstr "MiB/s" @@ -1549,7 +1526,7 @@ msgstr "已取消静音" #: src/client/game.cpp #, c-format msgid "The server is probably running a different version of %s." -msgstr "此服务器运行的可能是别的版本,%s。" +msgstr "此服务器运行的可能是另一版本的 %s。" #: src/client/game.cpp #, c-format @@ -1562,28 +1539,26 @@ msgid "Unable to listen on %s because IPv6 is disabled" msgstr "无法监听 %s,因为 IPv6 已禁用" #: src/client/game.cpp -#, fuzzy msgid "Unlimited viewing range disabled" -msgstr "启用无限视野" +msgstr "无限视野已禁用" #: src/client/game.cpp -#, fuzzy msgid "Unlimited viewing range enabled" -msgstr "启用无限视野" +msgstr "无限视野已启用" #: src/client/game.cpp msgid "Unlimited viewing range enabled, but forbidden by game or mod" -msgstr "" +msgstr "无限视野已启用,但是受子游戏或者 Mod 限制" #: 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 msgid "Viewing changed to %d (the minimum), but limited to %d by game or mod" -msgstr "" +msgstr "视野被调至 %d(最小),但是受%d的约束因为游戏或者模组" #: src/client/game.cpp #, c-format @@ -1591,20 +1566,20 @@ 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 msgid "" "Viewing range changed to %d (the maximum), but limited to %d by game or mod" -msgstr "" +msgstr "查看范围更改为 %d(最大值),但游戏或模组限制为 %d" #: 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,但是被子游戏或 Mod 限制为 %d" #: src/client/game.cpp #, c-format @@ -1619,10 +1594,6 @@ msgstr "线框已显示" msgid "Zoom currently disabled by game or mod" msgstr "缩放被当前子游戏或 mod 禁用" -#: src/client/game.cpp -msgid "ok" -msgstr "确定" - #: src/client/gameui.cpp msgid "Chat currently disabled by game or mod" msgstr "无法聊天:可能原因:被游戏或mod禁用" @@ -1662,32 +1633,28 @@ msgstr "退格" #. ~ Usually paired with the Pause key #: src/client/keycode.cpp -#, fuzzy msgid "Break Key" -msgstr "潜行键" +msgstr "取消键" #: src/client/keycode.cpp msgid "Caps Lock" msgstr "大写锁定键" #: src/client/keycode.cpp -#, fuzzy msgid "Clear Key" -msgstr "Clear键" +msgstr "清除键" #: src/client/keycode.cpp -#, fuzzy msgid "Control Key" -msgstr "Ctrl键" +msgstr "控制键" #: src/client/keycode.cpp -#, fuzzy msgid "Delete Key" -msgstr "删除" +msgstr "删除键" #: src/client/keycode.cpp msgid "Down Arrow" -msgstr "" +msgstr "⇩" #: src/client/keycode.cpp msgid "End" @@ -1734,9 +1701,8 @@ msgid "Insert" msgstr "Insert键" #: src/client/keycode.cpp -#, fuzzy msgid "Left Arrow" -msgstr "左Control键" +msgstr "⇦" #: src/client/keycode.cpp msgid "Left Button" @@ -1760,9 +1726,8 @@ msgstr "左Windows键" #. ~ Key name, common on Windows keyboards #: src/client/keycode.cpp -#, fuzzy msgid "Menu Key" -msgstr "菜单" +msgstr "菜单键" #: src/client/keycode.cpp msgid "Middle Button" @@ -1837,20 +1802,17 @@ msgid "OEM Clear" msgstr "OEM Clear键" #: src/client/keycode.cpp -#, fuzzy msgid "Page Down" msgstr "下一页" #: src/client/keycode.cpp -#, fuzzy msgid "Page Up" msgstr "上一页" #. ~ Usually paired with the Break key #: src/client/keycode.cpp -#, fuzzy msgid "Pause Key" -msgstr "Pause键" +msgstr "暂停键" #: src/client/keycode.cpp msgid "Play" @@ -1862,14 +1824,12 @@ msgid "Print" msgstr "打印" #: src/client/keycode.cpp -#, fuzzy msgid "Return Key" msgstr "回车键" #: src/client/keycode.cpp -#, fuzzy msgid "Right Arrow" -msgstr "右Control键" +msgstr "⇨" #: src/client/keycode.cpp msgid "Right Button" @@ -1901,7 +1861,6 @@ msgid "Select" msgstr "选择键" #: src/client/keycode.cpp -#, fuzzy msgid "Shift Key" msgstr "Shift键" @@ -1923,7 +1882,7 @@ msgstr "Tab键" #: src/client/keycode.cpp msgid "Up Arrow" -msgstr "" +msgstr "⇧" #: src/client/keycode.cpp msgid "X Button 1" @@ -1934,7 +1893,6 @@ msgid "X Button 2" msgstr "X键2" #: src/client/keycode.cpp -#, fuzzy msgid "Zoom Key" msgstr "缩放" @@ -1956,11 +1914,21 @@ msgstr "地表模式小地图, 放大至%d倍" msgid "Minimap in texture mode" msgstr "材质模式小地图" +#: src/client/shader.cpp +#, fuzzy, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "无法编译“%s”着色器。" + +#: src/client/shader.cpp +#, fuzzy +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "着色器已启用,但是驱动程序不支持 GLSL。" + #. ~ 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 "缺失的模组: %s" +msgstr "%s 模组缺失以下依赖:" #: src/content/mod_configuration.cpp msgid "" @@ -2145,6 +2113,20 @@ msgstr "缩放" msgid "press key" msgstr "按键" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "打开" + +#: src/gui/guiOpenURL.cpp +#, fuzzy +msgid "Open URL?" +msgstr "是否打开网页?" + +#: src/gui/guiOpenURL.cpp +#, fuzzy +msgid "Unable to open URL" +msgstr "无法打开网页" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "更改" @@ -2178,6 +2160,7 @@ msgstr "音量:%d%%" #. 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 "zh_CN" @@ -2191,9 +2174,9 @@ msgid "Name is taken. Please choose another name" msgstr "名称已被占用。请选择其他名称" #: src/server.cpp -#, fuzzy, c-format +#, c-format msgid "%s while shutting down: " -msgstr "关闭中..." +msgstr "关闭过程中出现 %s 错误: " #: src/settings_translation_file.cpp msgid "" @@ -2263,7 +2246,7 @@ msgstr "确定河谷及河道位置的2D噪声。" #: src/settings_translation_file.cpp msgid "3D" -msgstr "" +msgstr "3D" #: src/settings_translation_file.cpp msgid "3D clouds" @@ -2318,7 +2301,6 @@ msgid "3D noise that determines number of dungeons per mapchunk." msgstr "确定每个地图块的地窖数量的3D噪声。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "3D support.\n" "Currently supported:\n" @@ -2332,14 +2314,13 @@ msgid "" msgstr "" "3D 支持。\n" "目前已支持:\n" -"- 无(none): 无 3D 输出。\n" -"- 立体影片(anaglyph):青红/品红色彩色 3D。\n" -"- 交错(interlaced):基于奇偶行的偏振屏支持。\n" -"- 顶底(topbottom):上下分屏。\n" -"- 并列(sidebyside):左右分屏。\n" -"- 内斜视(crossview):内斜视左右分屏3D。\n" -"- 翻页(pageflip):基于四重缓冲的 3D。\n" -"注意交错模式需要启用着色器。" +"- 无 (none): 无 3D 输出。\n" +"- 立体影片 (anaglyph):青红/品红色彩色 3D。\n" +"- 交错 (interlaced):基于奇偶行的偏振屏支持。\n" +"- 顶底 (topbottom):上下分屏。\n" +"- 并列 (sidebyside):左右分屏。\n" +"- 内斜视 (crossview):内斜视左右分屏 3D。\n" +"请注意,交错模式需要启用着色器才能使用。" #: src/settings_translation_file.cpp msgid "" @@ -2398,13 +2379,6 @@ msgid "Adds particles when digging a node." msgstr "挖方块时添加粒子。" #: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "为支持4K等屏幕,调节像素点密度(非 X11/Android 环境才有效)。" - -#: src/settings_translation_file.cpp -#, fuzzy msgid "Adjust the detected display density, used for scaling UI elements." msgstr "调整检测到的显示密度,用来缩放 UI 元素。" @@ -2431,6 +2405,10 @@ msgstr "管理员名称" msgid "Advanced" msgstr "高级" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2470,14 +2448,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" @@ -2491,6 +2467,17 @@ msgstr "添加物品名称至工具栏。" msgid "Apple trees noise" 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 "Arm inertia" msgstr "手臂惯性" @@ -2508,18 +2495,37 @@ msgid "Ask to reconnect after crash" msgstr "崩溃后询问重新连接" #: src/settings_translation_file.cpp +#, fuzzy 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 will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." +msgstr "" +"在此距离下,服务器将积极优化将哪些块发送到客户端。\n" +"小数值可能会极大地提高性能,\n" +"却会造成可见的渲染故障。\n" +"(有些方块将不会在水和洞穴中呈现,\n" +"有时在陆地上也不会呈现)\n" +"将其设置为大于 max_block_send_distance 的值\n" +"将禁用此优化。\n" +"在 mapblocks中声明(16 个节点)。" + +#: src/settings_translation_file.cpp +#, fuzzy +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 "" "在此距离下,服务器将积极优化将哪些块发送到客户端。\n" "小数值可能会极大地提高性能,\n" @@ -2552,16 +2558,15 @@ msgstr "用于攀登/降落的Aux1键" #: src/settings_translation_file.cpp msgid "Base ground level" -msgstr "平地级别" +msgstr "地图生成器平地级别" #: src/settings_translation_file.cpp 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" @@ -2584,14 +2589,18 @@ msgid "Bind address" msgstr "绑定地址" #: src/settings_translation_file.cpp -#, fuzzy msgid "Biome API" -msgstr "生物群系" +msgstr "生物群系 API" #: src/settings_translation_file.cpp msgid "Biome noise" msgstr "生物群系噪声" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Block cull optimize distance" +msgstr "最优方块发送距离" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "最优方块发送距离" @@ -2605,9 +2614,8 @@ msgid "Bloom Intensity" msgstr "泛光强度" #: src/settings_translation_file.cpp -#, fuzzy msgid "Bloom Radius" -msgstr "云半径" +msgstr "泛光半径" #: src/settings_translation_file.cpp msgid "Bloom Strength Factor" @@ -2651,7 +2659,7 @@ msgstr "镜头平滑" #: src/settings_translation_file.cpp msgid "Camera smoothing in cinematic mode" -msgstr "电影模式下镜头平滑" +msgstr "电影模式中的镜头平滑" #: src/settings_translation_file.cpp msgid "Cave noise" @@ -2777,7 +2785,6 @@ msgid "Client-side Modding" msgstr "客户端修改" #: src/settings_translation_file.cpp -#, fuzzy msgid "Client-side node lookup range restriction" msgstr "客户端方块查询范围限制" @@ -2794,7 +2801,6 @@ msgid "Clouds" msgstr "云彩" #: src/settings_translation_file.cpp -#, fuzzy msgid "Clouds are a client-side effect." msgstr "云是客户端效果。" @@ -2810,6 +2816,12 @@ msgstr "彩色雾" msgid "Colored shadows" 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -2952,7 +2964,6 @@ msgid "Crosshair alpha" msgstr "准星透明" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" "This also applies to the object crosshair." @@ -2972,10 +2983,6 @@ msgstr "" "准星颜色(R,G,B).\n" "还控制对象准星颜色" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "DPI" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "沙漠噪声阈值" @@ -3030,6 +3037,23 @@ msgstr "" "使用 PCF 或 泊松盘(Poisson disk)算法模拟软阴影效果\n" "但也会使用更多的硬件资源。" +#: 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 " +"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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" +"启用禁止旧版客户端连接模式。\n" +"兼容旧版客户端是指它们不会在连接新版服务器时\n" +"崩溃,但可能不支持某些您所期望的新特性。" + #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." msgstr "定义树上长苹果的区域." @@ -3056,6 +3080,9 @@ msgid "" "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" #: src/settings_translation_file.cpp msgid "Defines large-scale river channel structure." @@ -3078,6 +3105,8 @@ 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" #: src/settings_translation_file.cpp msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)." @@ -3089,6 +3118,8 @@ msgid "" "methods.\n" "Value of 2 means taking 2x2 = 4 samples." msgstr "" +"定义 FSAA 和 SSAA 抗锯齿方法的采样网格大小。\n" +"值为 2 表示取 2x2 = 4 个样本。" #: src/settings_translation_file.cpp msgid "Defines the width of the river channel." @@ -3177,6 +3208,8 @@ msgid "" "Distance in nodes at which transparency depth sorting is enabled\n" "Use this to limit the performance impact of transparency depth sorting" msgstr "" +"启用透明度深度排序的节点距离\n" +"用于限制透明度深度排序对性能的影响" #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." @@ -3208,16 +3241,20 @@ msgstr "地窖噪声" #: src/settings_translation_file.cpp msgid "Enable Automatic Exposure" -msgstr "" +msgstr "启用自动曝光" #: src/settings_translation_file.cpp -#, fuzzy msgid "Enable Bloom" -msgstr "全部启用" +msgstr "启用泛光" #: src/settings_translation_file.cpp msgid "Enable Bloom Debug" -msgstr "" +msgstr "启用泛光调试" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Debanding" +msgstr "开启伤害" #: src/settings_translation_file.cpp msgid "" @@ -3244,9 +3281,14 @@ msgstr "" "启用泊松盘(Poisson disk)滤镜。\n" "使用泊松盘算法来产生“软阴影”。不启用的话就会使用 PCF 滤镜。" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Post Processing" +msgstr "后期处理" + #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" -msgstr "" +msgstr "启用光线追踪剔除" #: src/settings_translation_file.cpp msgid "" @@ -3255,6 +3297,10 @@ msgid "" "automatically adjust to the brightness of the scene,\n" "simulating the behavior of human eye." msgstr "" +"启用自动曝光校正\n" +"启用后,后期处理引擎将\n" +"自动调整场景亮度、\n" +"模拟人眼的行为。" #: src/settings_translation_file.cpp msgid "" @@ -3286,7 +3332,12 @@ msgstr "启用 mod 安全" #: src/settings_translation_file.cpp msgid "Enable mouse wheel (scroll) for item selection in hotbar." -msgstr "" +msgstr "启用鼠标滚轮(滚动),以便在热栏中选择项目。" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable random mod loading (mainly used for testing)." +msgstr "使用随机顺序加载 mod(主要用于测试)。" #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." @@ -3302,7 +3353,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Enable split login/register" -msgstr "" +msgstr "启用分页登录/注册" #: src/settings_translation_file.cpp msgid "" @@ -3316,6 +3367,11 @@ msgstr "" "兼容旧版客户端是指它们不会在连接新版服务器时\n" "崩溃,但可能不支持某些您所期望的新特性。" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable touchscreen" +msgstr "触摸屏" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3327,14 +3383,6 @@ msgstr "" "连接到服务器时,远程服务器会提供一种更快的方式\n" "下载媒体信息 (如材质)。" -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" -"启用顶点缓冲对象。\n" -"这会极大改善图像性能。" - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3373,6 +3421,20 @@ msgstr "启用物品清单动画。" msgid "Enables caching of facedir rotated meshes." msgstr "启用翻转网状物facedir的缓存。" +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables the post processing pipeline." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"Enables touchscreen mode, allowing you to play the game with a touchscreen." +msgstr "启用触摸屏模式。启用后您可以使用触摸屏玩游戏。" + #: src/settings_translation_file.cpp msgid "" "Enables tradeoffs that reduce CPU load or increase rendering performance\n" @@ -3380,7 +3442,6 @@ msgid "" msgstr "允许不影响可玩性的轻微视觉错误,以此减少 CPU 负载,或提高渲染性能。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Engine Profiler" msgstr "引擎性能分析" @@ -3393,7 +3454,6 @@ msgid "Entity methods" msgstr "实体方法" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Exponent of the floatland tapering. Alters the tapering behavior.\n" "Value = 1.0 creates a uniform, linear tapering.\n" @@ -3404,13 +3464,14 @@ msgid "" msgstr "" "悬空岛锥度的指数,更改锥度的行为。\n" "值等于1.0,创建一个统一的,线性锥度。\n" -"值大于1.0,创建一个平滑的、合适的锥度,默认分隔的悬空岛。\n" +"值大于1.0,创建一个平滑的、合适的锥度,默认分隔的\n" +"悬空岛。\n" "值小于1.0,(例如0.25)创建一个带有平坦低地的更加轮廓分明的表面级别,\n" "适用于固体悬空岛层。" #: src/settings_translation_file.cpp msgid "Exposure compensation" -msgstr "" +msgstr "曝光补偿" #: src/settings_translation_file.cpp msgid "FPS" @@ -3490,7 +3551,6 @@ msgid "Fixed virtual joystick" msgstr "固定虚拟摇杆" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Fixes the position of virtual joystick.\n" "If disabled, virtual joystick will center to first-touch's position." @@ -3560,7 +3620,7 @@ msgstr "字体大小" #: src/settings_translation_file.cpp msgid "Font size divisible by" -msgstr "" +msgstr "字体大小被整除因为" #: src/settings_translation_file.cpp msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI" @@ -3588,6 +3648,10 @@ msgid "" "be\n" "sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32." msgstr "" +"对于不能很好缩放的像素风字体,该值可确保与该字体一起使用的字体大小\n" +"的字体大小总是能被该值除以像素。例如\n" +"高 16 像素的像素字体应将此值设为 16,这样它的字体大小就只能是\n" +"大小为 16、32、48 等,因此要求 25 大小的模式将得到 32。" #: src/settings_translation_file.cpp msgid "" @@ -3664,7 +3728,6 @@ msgid "Fullscreen mode." msgstr "全屏模式。" #: src/settings_translation_file.cpp -#, fuzzy msgid "GUI" msgstr "界面" @@ -3720,7 +3783,7 @@ msgstr "图形" #: src/settings_translation_file.cpp msgid "Graphics Effects" -msgstr "图形效果" +msgstr "图形" #: src/settings_translation_file.cpp msgid "Graphics and Audio" @@ -3784,7 +3847,6 @@ msgid "Heat noise" msgstr "热噪声" #: src/settings_translation_file.cpp -#, fuzzy msgid "Height component of the initial window size." msgstr "初始窗口高度,全屏模式下忽略该值。" @@ -3850,25 +3912,23 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Hotbar: Enable mouse wheel for selection" -msgstr "" +msgstr "快捷栏:启用鼠标滚轮用来选择" #: src/settings_translation_file.cpp msgid "Hotbar: Invert mouse wheel direction" -msgstr "" +msgstr "快捷栏:反转鼠标滚轮方向" #: src/settings_translation_file.cpp msgid "How deep to make rivers." msgstr "生成河流多深。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "How fast liquid waves will move. Higher = faster.\n" "If negative, liquid waves will move backwards." msgstr "" -"液体波移动多快。更高值=更快。\n" -"如果为负,液体波向后移动。\n" -"需要波动液体启用。" +"液体波移动有多快。值越高代表移动越快。\n" +"如果值为负,则液体波将反向移动。" #: src/settings_translation_file.cpp msgid "" @@ -3969,7 +4029,6 @@ msgid "" msgstr "如果启用,玩家将无法在没有密码的情况下加入或修改密码为空密码。" #: 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" @@ -3979,10 +4038,9 @@ msgstr "" "如果启用,服务器会根据玩家的视野遮挡\n" "剔除地图区块。这可以减少向客户端发送\n" "的 50-80% 的区块。客户端将不会收到最\n" -"不可见的内容,降低 noclip 模式的实用性。" +"不可见的内容,降低穿墙模式的实用性。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "If enabled, you can place nodes at the position (feet + eye level) where you " "stand.\n" @@ -4053,7 +4111,6 @@ msgstr "" "通常只有核心/内部构建者需要" #: src/settings_translation_file.cpp -#, fuzzy msgid "Instrument chat commands on registration." msgstr "登录时的聊天命令。" @@ -4097,7 +4154,7 @@ msgstr "反转鼠标" #: src/settings_translation_file.cpp msgid "Invert mouse wheel (scroll) direction for item selection in hotbar." -msgstr "" +msgstr "为快捷栏中选择物品反转鼠标滚轮(滚动)方向." #: src/settings_translation_file.cpp msgid "Invert vertical mouse movement." @@ -4276,38 +4333,34 @@ msgstr "" #: src/settings_translation_file.cpp #, fuzzy msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." +"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" "时间间隔。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Length of liquid waves." -msgstr "波动液体波动速度" +msgstr "波动液体波动速度." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Length of time between Active Block Modifier (ABM) execution cycles, stated " "in seconds." -msgstr "ABM执行循环时长" +msgstr "ABM执行循环时长." #: src/settings_translation_file.cpp -#, fuzzy msgid "Length of time between NodeTimer execution cycles, stated in seconds." -msgstr "NodeTimer执行循环时长" +msgstr "NodeTimer执行循环时长." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Length of time between active block management cycles, stated in seconds." -msgstr "活动方块管理循环时长" +msgstr "活动方块管理循环时长." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Level of logging to be written to debug.txt:\n" "- (no logging)\n" @@ -4319,14 +4372,15 @@ msgid "" "- verbose\n" "- trace" msgstr "" -"写入debug.txt的日志等级:\n" -"- <无>(无日志)\n" -"- 无等级(none)(无等级的消息)\n" +"写入 debug.txt 文件的日志等级:\n" +"- <无>(不记录日志)\n" +"- 无等级(none)\n" "- 错误(error)\n" "- 警告(warning)\n" "- 行为(action)\n" "- 信息(info)\n" -"- 冗长调试信息(verbose)" +"- 详细(verbose)\n" +"- 追逐(trace)" #: src/settings_translation_file.cpp msgid "Light curve boost" @@ -4432,6 +4486,9 @@ msgid "" "from the bright objects.\n" "Range: from 0.1 to 8, default: 1" msgstr "" +"逻辑值,用于控制泛光效果\n" +"从明亮物体扩散的距离。\n" +"范围:0.1 至 8,默认:1" #: src/settings_translation_file.cpp msgid "Lower Y limit of dungeons." @@ -4450,10 +4507,6 @@ msgid "" "Make fog and sky colors depend on daytime (dawn/sunset) and view direction." msgstr "使雾和天空颜色依赖于一天中的时间(黎明/傍晚)和视线方向。" -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "使所有液体不透明" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" msgstr "磁盘存储的映射压缩级别" @@ -4509,11 +4562,14 @@ msgid "Map generation attributes specific to Mapgen v5." msgstr "针对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" "When the 'snowbiomes' flag is enabled jungles are automatically enabled and\n" -"the 'jungles' flag is ignored." +"the 'jungles' flag is ignored.\n" +"The 'temples' flag disables generation of desert temples. Normal dungeons " +"will appear instead." msgstr "" "针对v6地图生成器的属性。\n" "'snowboimes'启用新版5生物群系系统。\n" @@ -4541,9 +4597,8 @@ msgid "Map save interval" msgstr "地图保存间隔" #: src/settings_translation_file.cpp -#, fuzzy msgid "Map shadows update frames" -msgstr "液体更新时钟间隔" +msgstr "地图阴影更新帧率" #: src/settings_translation_file.cpp msgid "Mapblock limit" @@ -4554,13 +4609,8 @@ msgid "Mapblock mesh generation delay" msgstr "地图生成延时" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapblock mesh generation threads" -msgstr "地图生成延时" - -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "地图生成缓存大小" +msgstr "区块网格生成线程" #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" @@ -4722,8 +4772,8 @@ msgid "" "be queued.\n" "This should be lower than curl_parallel_limit." msgstr "" -"最大并发下载数。 超过此限制的下载将排队。 这应该低于 curl_parallel_limit(卷" -"曲平行限制)。" +"最大并发下载数。 超过此限制的下载将会排队等待。\n" +"这个值应该低于 curl_parallel_limit。" #: src/settings_translation_file.cpp msgid "" @@ -4772,12 +4822,10 @@ msgid "Maximum simultaneous block sends per client" msgstr "给每个客户端发送方块的最大次数" #: src/settings_translation_file.cpp -#, fuzzy msgid "Maximum size of the outgoing chat queue" msgstr "显示最大聊天记录的行度" #: 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." @@ -4825,6 +4873,11 @@ msgstr "写入聊天的最小日志级别。" msgid "Minimap scan height" msgstr "小地图扫描高度" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Minimum dig repetition interval" +msgstr "放置重复间隔" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." msgstr "每个地图块的随机大型洞穴数的上限。" @@ -4839,7 +4892,7 @@ msgstr "Mip 贴图" #: src/settings_translation_file.cpp msgid "Miscellaneous" -msgstr "" +msgstr "杂项" #: src/settings_translation_file.cpp msgid "Mod Profiler" @@ -4866,7 +4919,6 @@ msgid "Monospace font size" msgstr "等宽字体大小" #: src/settings_translation_file.cpp -#, fuzzy msgid "Monospace font size divisible by" msgstr "等宽字体大小" @@ -4894,6 +4946,11 @@ msgstr "鼠标灵敏度" msgid "Mouse sensitivity multiplier." msgstr "鼠标灵敏度倍数。" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Movement threshold" +msgstr "大型洞穴阈值" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "泥土噪声" @@ -4998,7 +5055,6 @@ msgstr "" "佳值为'1'。" #: src/settings_translation_file.cpp -#, fuzzy 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" @@ -5009,7 +5065,6 @@ msgstr "" "(4096=100MB,按经验法则)。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Number of messages a player may send per 10 seconds." msgstr "每10秒发送给玩家的消息量。" @@ -5019,20 +5074,17 @@ msgid "" "Value of 0 (default) will let Minetest autodetect the number of available " "threads." msgstr "" +"用于生成网格的线程数。\n" +"默认值为 0 时,Minetest 会自动检测可用线程数。" #: src/settings_translation_file.cpp msgid "Occlusion Culler" -msgstr "" +msgstr "摔落保护" #: src/settings_translation_file.cpp -#, fuzzy msgid "Occlusion Culling" msgstr "服务器端遮挡删除" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "不透明液体" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." @@ -5047,6 +5099,10 @@ msgstr "" "当窗口焦点丢失是打开暂停菜单。如果游戏内窗口打开,\n" "则不暂停。" +#: src/settings_translation_file.cpp +msgid "OpenGL debug" +msgstr "OpenGL 调试" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "替换聊天网页链接的颜色,可用可不用。" @@ -5115,24 +5171,23 @@ msgid "Player transfer distance" msgstr "玩家转移距离" #: src/settings_translation_file.cpp -#, fuzzy msgid "Poisson filtering" msgstr "双线性过滤" #: src/settings_translation_file.cpp msgid "Post Processing" -msgstr "" +msgstr "后期处理" #: 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 "" -"按住鼠标时,防止重复破坏和重复放置。 \n" -"当您意外地频繁破坏或放置方块时启用此功能。" +"防止按住鼠标按键时反复破坏或者放置。\n" +"启用此功能可以避免意外地破坏或者放置。\n" +"在触摸屏设备上,这个选项只会影响破坏。" #: src/settings_translation_file.cpp msgid "Prevent mods from doing insecure things like running shell commands." @@ -5174,6 +5229,15 @@ msgstr "" msgid "Proportion of large caves that contain liquid." msgstr "包含液体的大洞穴的比例。" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Protocol version minimum" +msgstr "最低协议版本" + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Radius of cloud area stated in number of 64 node cloud squares.\n" @@ -5191,6 +5255,11 @@ msgstr "抬高地形使河流周围形成山谷。" msgid "Random input" msgstr "随机输入" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Random mod load order" +msgstr "使用随机顺序加载 Mod" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "最近聊天消息" @@ -5200,7 +5269,6 @@ msgid "Regular font path" msgstr "常规字体路径" #: src/settings_translation_file.cpp -#, fuzzy msgid "Remember screen size" msgstr "自动保存屏幕大小" @@ -5254,7 +5322,7 @@ msgstr "山脊扩散噪声" #: src/settings_translation_file.cpp msgid "Ridge noise" -msgstr "山脊噪声" +msgstr "河流噪声" #: src/settings_translation_file.cpp msgid "Ridge underwater noise" @@ -5320,6 +5388,10 @@ msgid "" "is maximized is stored in window_maximized.\n" "(Autosaving window_maximized only works if compiled with SDL.)" msgstr "" +"修改时自动保存窗口大小.\n" +"如果为 \"true\",屏幕尺寸会保存在 screen_w 和 screen_h 中,窗口是否最大化会\n" +"保存在 window_maximized 中.\n" +"(自动保存 window_maximized 仅在与 SDL 一起编译时有效.)" #: src/settings_translation_file.cpp msgid "Saving map received from server" @@ -5394,13 +5466,14 @@ msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous" msgstr "见 https://www.sqlite.org/pragma.html#pragma_synchronous" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Select the antialiasing method to apply.\n" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5414,6 +5487,22 @@ 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 "" +"选择要应用的抗锯齿方法。\n" +"\n" +"* 无 - 无反锯齿(默认值)\n" +"\n" +"* FSAA - 硬件提供的全屏抗锯齿(与着色器不兼容)\n" +"又称多重采样抗锯齿 (MSAA)\n" +"平滑块边缘,但不影响纹理内部。\n" +"更改此选项需要重新启动。\n" +"\n" +"* FXAA - 快速近似抗锯齿(需要着色器)\n" +"应用后处理滤镜来检测和平滑高对比度边缘。\n" +"在速度和图像质量之间取得平衡。\n" +"\n" +"* SSAA - 超级采样抗锯齿(需要着色器)\n" +"渲染更高分辨率的场景图像,然后缩放以减少锯齿效果。\n" +"抗锯齿效果。这是最缓慢也是最精确的方法。" #: src/settings_translation_file.cpp msgid "Selection box border color (R,G,B)." @@ -5474,7 +5563,6 @@ msgid "Server" msgstr "服务器" #: src/settings_translation_file.cpp -#, fuzzy msgid "Server Gameplay" msgstr "服务器名称" @@ -5503,38 +5591,34 @@ msgid "Server port" msgstr "服务器端口" #: src/settings_translation_file.cpp -#, fuzzy msgid "Server-side occlusion culling" msgstr "服务器端遮挡删除" #: src/settings_translation_file.cpp -#, fuzzy msgid "Server/Env Performance" -msgstr "服务器端口" +msgstr "服务器/Env 性能" #: src/settings_translation_file.cpp msgid "Serverlist URL" msgstr "服务器列表 URL" #: src/settings_translation_file.cpp -#, fuzzy msgid "Serverlist and MOTD" -msgstr "服务器列表 URL" +msgstr "服务器列表以及 MOTD 问候信息" #: src/settings_translation_file.cpp msgid "Serverlist file" msgstr "服务器列表文件" #: src/settings_translation_file.cpp -#, fuzzy 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 "" -"以度为单位设置太阳/月亮轨道的倾斜度\n" -"值 0 表示没有倾斜/垂直轨道。\n" -"最小值 0.0 和最大值 60.0" +"设置太阳/月亮轨道的倾斜度,以度为单位。\n" +"子游戏可能会通过 API 修改该设置。\n" +"值设为 0 表示没有倾斜(即垂直轨道)。" #: src/settings_translation_file.cpp msgid "" @@ -5542,33 +5626,35 @@ msgid "" "Value of 0.0 (default) means no exposure compensation.\n" "Range: from -1 to 1.0" msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Set the language. Leave empty to use the system language.\n" -"A restart is required after changing this." -msgstr "" -"设定语言。留空以使用系统语言。\n" -"变更后须重新启动。" +"以 EV 为单位设置曝光补偿。\n" +"0.0(默认值)表示无曝光补偿。\n" +"范围:-1.0 至 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 "" +"设定语言。默认使用系统语言。\n" +"变更后须重新启动。" + +#: 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 -#, fuzzy 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 "" -"设置阴影强度。\n" -"较低的值表示较亮的阴影,较高的值表示较暗的阴影。" +"设置阴影强度.\n" +"较低的值表示较亮的阴影.\n" +"较高的值表示较暗的阴影." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Set the soft shadow radius size.\n" "Lower values mean sharper shadows, bigger values mean softer shadows.\n" @@ -5576,41 +5662,35 @@ msgid "" msgstr "" "设置软阴影半径大小。\n" "较低的值意味着更清晰的阴影更大的值更柔和。\n" -"最小值 1.0 和最大值 10.0" +"最小值 1.0 和最大值 15.0" #: src/settings_translation_file.cpp -#, fuzzy msgid "Set to true to enable Shadow Mapping." -msgstr "" -"设置为真以启用飘动树叶。\n" -"需要启用着色器。" +msgstr "设置为真以启用阴影贴图。" #: src/settings_translation_file.cpp msgid "" "Set to true to enable bloom effect.\n" "Bright colors will bleed over the neighboring objects." msgstr "" +"设置为 \"true \"可启用泛光效果.\n" +"邻近的物体会被明亮的色彩会渗入." + +#: src/settings_translation_file.cpp +msgid "Set to true to enable volumetric lighting effect (a.k.a. \"Godrays\")." +msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Set to true to enable waving leaves." -msgstr "" -"设置为真以启用飘动树叶。\n" -"需要启用着色器。" +msgstr "设置为真以启用飘动树叶。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Set to true to enable waving liquids (like water)." -msgstr "" -"设置为真以启用摇动流体(例如水)。\n" -"需要启用着色器。" +msgstr "设置为真以启用摇动流体(例如水)。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Set to true to enable waving plants." -msgstr "" -"设置为真以启用摆动植物。\n" -"需要启用着色器。" +msgstr "设置为真以启用摆动植物。" #: src/settings_translation_file.cpp msgid "" @@ -5619,6 +5699,10 @@ msgid "" "top-left - processed base image, top-right - final image\n" "bottom-left - raw base image, bottom-right - bloom texture." msgstr "" +"设为 true 时,将呈现 Bloom 效果的调试分解。\n" +"在调试模式下,屏幕会分成 4 个象限:\n" +"左上角--处理后的基础图像,右上角--最终图像\n" +"左下角--原始基础图像,右下角--泛光材质。" #: src/settings_translation_file.cpp msgid "" @@ -5639,20 +5723,19 @@ msgid "Shaders" msgstr "着色器" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" "着色器允许高级视觉效果并且在一些显卡上可能会提高\n" "性能。\n" "仅用于OpenGL视频后端。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Shadow filter quality" -msgstr "截图品质" +msgstr "阴影过滤质量" #: src/settings_translation_file.cpp msgid "Shadow map max distance in nodes to render shadows" @@ -5663,9 +5746,8 @@ msgid "Shadow map texture in 32 bits" msgstr "32 位阴影贴图纹理" #: src/settings_translation_file.cpp -#, fuzzy msgid "Shadow map texture size" -msgstr "最小材质大小" +msgstr "阴影贴图纹理尺寸" #: src/settings_translation_file.cpp msgid "" @@ -5674,7 +5756,6 @@ msgid "" msgstr "默认字体阴影偏移(单位为像素),0 表示不绘制阴影。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Shadow strength gamma" msgstr "阴影强度" @@ -5687,16 +5768,14 @@ msgid "Show entity selection boxes" msgstr "显示实体选择框" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Show entity selection boxes\n" "A restart is required after changing this." msgstr "" -"设定语言。留空以使用系统语言。\n" -"变更后须重新启动。" +"显示实体选择框\n" +"修改后需要重新启动才能生效。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Show name tag backgrounds by default" msgstr "默认显示名称标签背景" @@ -5712,9 +5791,13 @@ msgid "" "draw calls, benefiting especially high-end GPUs.\n" "Systems with a low-end GPU (or no GPU) would benefit from smaller values." msgstr "" +"客户端在生成网格时将一并\n" +"考虑的立方体地图块的边长。\n" +"数值越大,GPU 的利用率越高,因为它可以减少\n" +"绘制调用次数,从而提高 GPU 的利用率,这对高端 GPU 尤为有利。\n" +"使用低端 GPU(或无 GPU)的系统则可从较小的数值中获益。" #: src/settings_translation_file.cpp -#, fuzzy 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" @@ -5730,16 +5813,6 @@ msgstr "" "修改此值适用于特殊用途,建议不改变\n" "此值。" -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" -"网格生成器的地图区块缓存大小。增加此值将会\n" -"增加缓存命中率,减少从主线程复制数据,从而\n" -"减少抖动。" - #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" msgstr "天体轨道倾斜" @@ -5750,7 +5823,7 @@ msgstr "切片 w" #: src/settings_translation_file.cpp msgid "Slope and fill work together to modify the heights." -msgstr "斜率和填充共同工作来修改高度。" +msgstr "斜率和坡度共同工作来修改高度。" #: src/settings_translation_file.cpp msgid "Small cave maximum number" @@ -5776,11 +5849,10 @@ msgstr "平滑光照" #, fuzzy msgid "" "Smooths rotation of camera when in cinematic mode, 0 to disable. Enter " -"cinematic mode by using the key set in Change Keys." +"cinematic mode by using the key set in Controls." msgstr "在电影模式中让摄影机旋转变流畅。设为 0 以停用。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Smooths rotation of camera, also called look or mouse smoothing. 0 to " "disable." @@ -5795,9 +5867,17 @@ msgid "Sneaking speed, in nodes per second." msgstr "潜行速度,以方块每秒为单位。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Soft shadow radius" -msgstr "字体阴影透明度" +msgstr "软阴影半径" + +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "音效" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sound Extensions Blacklist" +msgstr "ContentDB标签黑名单" #: src/settings_translation_file.cpp msgid "" @@ -5821,7 +5901,6 @@ msgstr "" "请注意,mod或游戏可能会为某些(或所有)项目明确设置堆栈。" #: 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" @@ -5844,7 +5923,6 @@ msgstr "" "光曲线的标准偏差可提升高斯。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Static spawn point" msgstr "静态重生点" @@ -5883,7 +5961,6 @@ msgid "Strip color codes" msgstr "条形颜色代码" #: src/settings_translation_file.cpp -#, fuzzy 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" @@ -5978,13 +6055,18 @@ msgid "" "this option allows enforcing it for certain node types. Note though that\n" "that is considered EXPERIMENTAL and may not work properly." msgstr "" +"节点上的纹理可以与节点对齐,也可以与世界对齐。\n" +"前一种模式适合机器,家具等更好的东西,而\n" +"后者使楼梯和微区块更适合周围环境。\n" +"但是,由于这种可能性是新的,因此较旧的服务器可能不会使用,\n" +"此选项允许对某些节点类型强制实施。注意尽管\n" +"被认为是实验性的,可能无法正常工作。" #: src/settings_translation_file.cpp msgid "The URL for the content repository" msgstr "内容存储库的 URL" #: src/settings_translation_file.cpp -#, fuzzy msgid "The dead zone of the joystick" msgstr "摇杆的无效区" @@ -5993,19 +6075,41 @@ msgid "" "The default format in which profiles are being saved,\n" "when calling `/profiler save [format]` without format." msgstr "" +"保存配置文件的默认格式,\n" +"调用 `/profiler save [format]`时不带格式。" + +#: 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 "" "The file path relative to your world path in which profiles will be saved to." +msgstr "相对于将配置文件保存到的世界路径的文件路径." + +#: src/settings_translation_file.cpp +msgid "" +"The gesture for 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" +"Combat is more or less impossible." msgstr "" #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" -msgstr "" +msgstr "使用手柄的标识符" #: src/settings_translation_file.cpp #, fuzzy -msgid "The length in pixels it takes for touchscreen interaction to start." +msgid "" +"The length in pixels after which a touch interaction is considered movement." msgstr "开始触摸屏交互所需的长度(以像素为单位)。" #: src/settings_translation_file.cpp @@ -6015,6 +6119,19 @@ msgid "" "0.0 = Wave doesn't move at all.\n" "Default is 1.0 (1/2 node)." msgstr "" +"波动液体表面的最大高度。\n" +"4.0 = 波浪高度为两个方块。\n" +"0.0 = 波浪完全不动。\n" +"默认值为 1.0(1/2 方块)。" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"The minimum time in seconds it takes between digging nodes when holding\n" +"the dig button." +msgstr "" +"按住放置按钮时,\n" +"会重复放置方块。" #: src/settings_translation_file.cpp msgid "The network interface that the server listens on." @@ -6038,14 +6155,24 @@ msgid "" "maintained.\n" "This should be configured together with active_object_send_range_blocks." msgstr "" +"每一个玩家周围的区块体积的半径,是受\n" +"活动块的东西,用地图区块(16个节点)表示。\n" +"在活动块中,对象被加载,ABMs运行。\n" +"这也是活跃对象(mobs)被维护的最小范围。\n" +"这应该和 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 OpenGL and OGLES2 (experimental)." +"Shaders are supported by everything but OGLES1." msgstr "" +"用于渲染的后端引擎\n" +"注:更改之后要重启游戏!\n" +"OpenGL是默认的电脑端渲染引擎,OGLES2是用于安卓的.\n" +"除了OGLES1之外的后端引擎都支持着色器" #: src/settings_translation_file.cpp msgid "" @@ -6062,6 +6189,10 @@ 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(含 4.0)。如果数值超出范围,将\n" +"设置为最接近的有效值。" #: src/settings_translation_file.cpp msgid "" @@ -6069,45 +6200,56 @@ 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" +"直到尝试通过转储旧队列项目来减小其大小为止。\n" +"值为0将禁用该功能。" #: 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 "" +"abms允许的时间预算在每一步上执行\n" +"(作为ABM间隔的一小部分)" #: src/settings_translation_file.cpp msgid "" "The time in seconds it takes between repeated events\n" "when holding down a joystick button combination." msgstr "" +"按住操纵手柄按钮组合时,\n" +"重复事件之间的时间(以秒为单位)。" #: src/settings_translation_file.cpp msgid "" "The time in seconds it takes between repeated node placements when holding\n" "the place button." msgstr "" +"按住放置按钮时,\n" +"会重复放置方块。" #: src/settings_translation_file.cpp msgid "The type of joystick" msgstr "摇杆类型" #: src/settings_translation_file.cpp -#, fuzzy 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 "" -"如果'altitude_chill'开启,则热量下降20的垂直距离\n" +"如果'高度寒冷(altitude_chill)'开启,则热量下降20的垂直距离\n" "已启用。如果湿度下降的垂直距离也是10\n" -"已启用“ altitude_dry”。" +"已启用“高度干燥(altitude_dry)”。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "定义tunnels的最初2个3D噪音。" +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -6129,7 +6271,6 @@ msgid "Time speed" msgstr "速度时间" #: src/settings_translation_file.cpp -#, fuzzy msgid "Timeout for client to remove unused map data from memory, in seconds." msgstr "客户端从内存中移除未用地图数据的超时。" @@ -6140,38 +6281,36 @@ msgid "" "This determines how long they are slowed down after placing or removing a " "node." msgstr "" +"为了减少延迟,当一个玩家正在构建某个东西时,阻塞传输会减慢。\n" +"这决定了放置或删除方块后它们的速度减慢的时间。" #: src/settings_translation_file.cpp msgid "Tooltip delay" msgstr "工具提示延迟" #: src/settings_translation_file.cpp -#, fuzzy msgid "Touchscreen" -msgstr "触屏阈值" +msgstr "触摸屏" #: src/settings_translation_file.cpp -#, fuzzy msgid "Touchscreen sensitivity" -msgstr "鼠标灵敏度" +msgstr "灵敏度(触摸屏)" #: src/settings_translation_file.cpp -#, fuzzy msgid "Touchscreen sensitivity multiplier." -msgstr "鼠标灵敏度倍数。" - -#: src/settings_translation_file.cpp -#, fuzzy -msgid "Touchscreen threshold" -msgstr "触屏阈值" +msgstr "触摸屏灵敏度倍增器." #: src/settings_translation_file.cpp msgid "Tradeoffs for performance" msgstr "性能权衡" +#: src/settings_translation_file.cpp +msgid "Translucent liquids" +msgstr "半透明液体" + #: src/settings_translation_file.cpp msgid "Transparency Sorting Distance" -msgstr "" +msgstr "透明度排序距离" #: src/settings_translation_file.cpp msgid "Trees noise" @@ -6204,11 +6343,20 @@ msgid "" "\n" "This setting should only be changed if you have performance problems." msgstr "" +"闭塞剔除器类型\n" +"\n" +"\"loops \"是传统算法,带有嵌套循环,复杂度为 O(n³)\n" +"\"bfs \"是基于广度优先搜索和边剔除的新算法\n" +"\n" +"只有在出现性能问题时,才应更改此设置。" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"URL to JSON file which provides information about the newest Minetest release" -msgstr "" +"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 "提供最新 Minetest 版本信息的 JSON 文件的 URL" #: src/settings_translation_file.cpp msgid "URL to the server list displayed in the Multiplayer Tab." @@ -6226,6 +6374,10 @@ msgid "" "image.\n" "Higher values result in a less detailed image." msgstr "" +"欠采样类似于使用较低的屏幕分辨率,但是它适用\n" +"仅限于游戏世界,保持GUI完整。\n" +"它应该以不那么详细的图像为代价显着提高性能。\n" +"较高的值会导致图像不太清晰。" #: src/settings_translation_file.cpp msgid "Unlimited player transfer distance" @@ -6237,7 +6389,7 @@ msgstr "卸载未用服务器数据" #: src/settings_translation_file.cpp msgid "Update information URL" -msgstr "" +msgstr "更新有信息的链接" #: src/settings_translation_file.cpp msgid "Upper Y limit of dungeons." @@ -6256,24 +6408,24 @@ msgid "Use a cloud animation for the main menu background." msgstr "主菜单背景使用云动画。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Use anisotropic filtering when looking at textures from an angle." msgstr "缩放材质时使用三线过滤。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Use bilinear filtering when scaling textures." msgstr "缩放材质时使用双线过滤。" #: src/settings_translation_file.cpp msgid "Use crosshair for touch screen" -msgstr "" +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 "" +"用准星选择物体而不是整个屏幕.\n" +"如果启用,准星会被展示并且用于选择物体." #: src/settings_translation_file.cpp msgid "" @@ -6281,6 +6433,9 @@ msgid "" "especially when using a high-resolution texture pack.\n" "Gamma-correct downscaling is not supported." msgstr "" +"缩放纹理时使用 mipmaps。可能会略微提高性能、\n" +"尤其是在使用高分辨率纹理包时。\n" +"不支持伽玛校正降频。" #: src/settings_translation_file.cpp msgid "" @@ -6288,6 +6443,9 @@ msgid "" "This flag enables use of raytraced occlusion culling test for\n" "client mesh sizes smaller than 4x4x4 map blocks." msgstr "" +"在新剔除器中使用光线追踪遮挡剔除。\n" +"此标记可启用光线追踪遮挡剔除测试,用于\n" +"客户端网格尺寸小于 4x4x4 的贴图块。" #: src/settings_translation_file.cpp msgid "" @@ -6295,9 +6453,11 @@ msgid "" "If both bilinear and trilinear filtering are enabled, trilinear filtering\n" "is applied." msgstr "" +"缩放纹理时使用三线性过滤。\n" +"如果同时启用了双线性和三线性滤波,则会应用三线性滤波。\n" +"会被应用。" #: 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 " @@ -6308,11 +6468,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "User Interfaces" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "VBO" -msgstr "VBO" +msgstr "用户界面" #: src/settings_translation_file.cpp msgid "VSync" @@ -6323,9 +6479,8 @@ msgid "Valley depth" msgstr "山谷深度" #: src/settings_translation_file.cpp -#, fuzzy msgid "Valley fill" -msgstr "山谷弥漫" +msgstr "山谷填充" #: src/settings_translation_file.cpp msgid "Valley profile" @@ -6352,31 +6507,34 @@ msgid "" "Variation of terrain vertical scale.\n" "When noise is < -0.55 terrain is near-flat." msgstr "" +"地形垂直比例的变化。\n" +"当噪声< -0.55 地形接近平坦。" #: src/settings_translation_file.cpp msgid "Varies depth of biome surface nodes." -msgstr "" +msgstr "变化生物群落表面节点的深度。" #: src/settings_translation_file.cpp msgid "" "Varies roughness of terrain.\n" "Defines the 'persistence' value for terrain_base and terrain_alt noises." msgstr "" +"改变地形的粗糙度。\n" +"定义 terrain_base 和 terrain_alt 噪音的 \"持久性 \"值。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Varies steepness of cliffs." -msgstr "控制山丘的坡度/高度。" +msgstr "因情况设置的山丘的陡度" #: src/settings_translation_file.cpp msgid "Vertical climbing speed, in nodes per second." -msgstr "" +msgstr "垂直爬升速度(方块/秒)." #: src/settings_translation_file.cpp msgid "" "Vertical screen synchronization. Your system may still force VSync on even " "if this is disabled." -msgstr "" +msgstr "垂直屏幕同步。即使禁用了此功能,系统仍可能强制开启 VSync。" #: src/settings_translation_file.cpp msgid "Video driver" @@ -6388,7 +6546,7 @@ msgstr "视野晃动系数" #: src/settings_translation_file.cpp msgid "View distance in nodes." -msgstr "可视距离(以节点方块为单位)。" +msgstr "节点间可视距离。(最小 = 20)." #: src/settings_translation_file.cpp msgid "Viewing range" @@ -6396,20 +6554,33 @@ msgstr "可视范围" #: src/settings_translation_file.cpp msgid "Virtual joystick triggers Aux1 button" -msgstr "" +msgstr "虚拟操纵杆触发 Aux1 按钮" #: src/settings_translation_file.cpp msgid "Volume" msgstr "音量" #: src/settings_translation_file.cpp -#, fuzzy +msgid "Volume multiplier when the window is unfocused." +msgstr "" + +#: src/settings_translation_file.cpp msgid "" "Volume of all sounds.\n" "Requires the sound system to be enabled." msgstr "" -"启用视差闭塞映射。\n" -"需要着色器已启用。" +"所有声音的音量.\n" +"需要启用声音系统." + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volume when unfocused" +msgstr "游戏暂停时的音量" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volumetric lighting" +msgstr "平滑光照" #: src/settings_translation_file.cpp msgid "" @@ -6419,6 +6590,11 @@ msgid "" "Has no effect on 3D fractals.\n" "Range roughly -2 to 2." msgstr "" +"生成的 4D 分形 3D 切片的 W 坐标。\n" +"确定生成的 4D 形状的 3D 切片。\n" +"更改分形的形状。\n" +"对 3D 分形没有影响。\n" +"范围大约 -2 到 2。" #: src/settings_translation_file.cpp msgid "Walking and flying speed, in nodes per second." @@ -6437,9 +6613,8 @@ msgid "Water level" msgstr "水位" #: src/settings_translation_file.cpp -#, fuzzy msgid "Water surface level of the world." -msgstr "世界水平面级别。" +msgstr "世界水平面高度。" #: src/settings_translation_file.cpp msgid "Waving Nodes" @@ -6470,9 +6645,8 @@ msgid "Waving plants" msgstr "摇动植物" #: src/settings_translation_file.cpp -#, fuzzy msgid "Weblink color" -msgstr "选择框颜色" +msgstr "网页链接颜色" #: src/settings_translation_file.cpp msgid "" @@ -6480,6 +6654,9 @@ msgid "" "filtered in software, but some images are generated directly\n" "to hardware (e.g. render-to-texture for nodes in inventory)." msgstr "" +"当gui_scaling_filter为 true 时,所有 GUI 映像都需要\n" +"在软件中过滤,但一些图像是直接生成的\n" +"硬件(例如,库存中材质的渲染到纹理)。" #: src/settings_translation_file.cpp msgid "" @@ -6488,6 +6665,10 @@ msgid "" "to the old scaling method, for video drivers that don't\n" "properly support downloading textures back from hardware." msgstr "" +"当gui_scaling_filter_txr2img为 true 时,复制这些图像\n" +"从硬件到软件进行扩展。 当 false 时,回退\n" +"到旧的缩放方法,对于不\n" +"正确支持从硬件下载纹理。" #: src/settings_translation_file.cpp msgid "" @@ -6500,26 +6681,38 @@ msgid "" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." msgstr "" +"使用双线性/三线性/各向异性滤镜时\n" +"低分辨率材质\n" +"可能会变得模糊,因此会自动使用最近邻插值\n" +"对材质进行放大,以保留清晰的像素。这将为放大后的材质设置最小纹理尺寸;\n" +"数值越大,看起来越清晰,但需要的内存也越大。\n" +"建议使用 2 的幂。\n" +"只有在启用双线性/三线性/各向异性过滤时,才会应用此设置。\n" +"这也是世界对齐纹理自动缩放的基本方块纹理尺寸。" #: src/settings_translation_file.cpp msgid "" "Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" +"无论默认情况下应显示名称标签背景.\n" +"模组都可能仍然设置一个背景." #: src/settings_translation_file.cpp msgid "Whether node texture animations should be desynchronized per mapblock." -msgstr "" +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 "" +"玩家是否显示给客户端没有任何范围限制。\n" +"已弃用,请player_transfer_distance设置来替代。" #: src/settings_translation_file.cpp msgid "Whether the window is maximized." -msgstr "" +msgstr "这个窗口是否会被放大." #: src/settings_translation_file.cpp msgid "" @@ -6540,6 +6733,10 @@ msgid "" "In-game, you can toggle the mute state with the mute key or by using the\n" "pause menu." msgstr "" +"是否将声音静音。您可随时取消静音声音,除非\n" +"音响系统已禁用(enable_sound=false)。\n" +"在游戏中,您可以使用静音键切换静音状态,或者使用\n" +"暂停菜单。" #: src/settings_translation_file.cpp msgid "" @@ -6547,18 +6744,16 @@ msgid "" msgstr "是否显示客户端调试信息(与按 F5 的效果相同)。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Width component of the initial window size." msgstr "初始窗口大小的宽度。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Width of the selection box lines around nodes." msgstr "结点周围的选择框的线宽。" #: src/settings_translation_file.cpp msgid "Window maximized" -msgstr "" +msgstr "窗口放大" #: src/settings_translation_file.cpp msgid "" @@ -6566,6 +6761,8 @@ msgid "" "background.\n" "Contains the same information as the file debug.txt (default name)." msgstr "" +"仅适用于 Windows 系统:在命令行中窗口中启动 Minetest.\n" +"与 debug.txt(默认名称)文件包含相同的信息." #: src/settings_translation_file.cpp msgid "" @@ -6588,10 +6785,16 @@ msgid "" "See also texture_min_size.\n" "Warning: This option is EXPERIMENTAL!" msgstr "" +"世界对齐的纹理可以缩放以跨越多个节点。 然而,\n" +"服务器可能不会同意您想要的请求,特别是如果您使用\n" +"专门设计的纹理包; 使用此选项,客户端尝试\n" +"根据纹理大小自动确定比例.\n" +"另请参见材质最小尺寸(texture_min_size).\n" +"警告:此选项是实验性的!" #: src/settings_translation_file.cpp msgid "World-aligned textures mode" -msgstr "" +msgstr "世界对齐纹理模式" #: src/settings_translation_file.cpp msgid "Y of flat ground." @@ -6601,16 +6804,15 @@ msgstr "平地的 Y。" msgid "" "Y of mountain density gradient zero level. Used to shift mountains " "vertically." -msgstr "" +msgstr "Y的山地密度梯度为零。用于垂直移动山脉。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Y of upper limit of large caves." -msgstr "大型随机洞穴的Y轴最大值。" +msgstr "大型随机洞穴的Y轴最大值." #: src/settings_translation_file.cpp msgid "Y-distance over which caverns expand to full size." -msgstr "" +msgstr "洞穴扩大到最大尺寸的Y轴距离。" #: src/settings_translation_file.cpp msgid "" @@ -6619,18 +6821,22 @@ 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 "" +"悬空岛从最大密度到无密度区域的Y 轴距离。\n" +"锥形从 Y 轴界限开始。\n" +"对于实心浮地图层,这控制山/山的高度。\n" +"必须小于或等于 Y 限制之间一半的距离。" #: src/settings_translation_file.cpp msgid "Y-level of average terrain surface." -msgstr "" +msgstr "地表平均Y坐标。" #: src/settings_translation_file.cpp msgid "Y-level of cavern upper limit." -msgstr "" +msgstr "大型洞穴上限的Y坐标。" #: src/settings_translation_file.cpp msgid "Y-level of higher terrain that creates cliffs." -msgstr "" +msgstr "形成悬崖的更高地形的Y坐标。" #: src/settings_translation_file.cpp msgid "Y-level of lower terrain and seabed." @@ -6638,18 +6844,17 @@ msgstr "较低地形与海底的Y坐标。" #: src/settings_translation_file.cpp msgid "Y-level of seabed." -msgstr "海底的Y坐标。" +msgstr "河床的Y坐标。" #: src/settings_translation_file.cpp msgid "cURL" -msgstr "" +msgstr "cURL" #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "cURL 文件下载超时" #: src/settings_translation_file.cpp -#, fuzzy msgid "cURL interactive timeout" msgstr "cURL 超时" @@ -6660,12 +6865,18 @@ msgstr "cURL 并发限制" #~ msgid "(game support required)" #~ msgstr "(需要子游戏支持)" +#~ msgid "- Address: " +#~ msgstr "- 地址: " + #~ msgid "- Creative Mode: " #~ msgstr "- 创造模式: " #~ msgid "- Damage: " #~ msgstr "- 伤害: " +#~ msgid "- Port: " +#~ msgstr "- 端口: " + #~ msgid "" #~ "0 = parallax occlusion with slope information (faster).\n" #~ "1 = relief mapping (slower, more accurate)." @@ -6703,6 +6914,11 @@ msgstr "cURL 并发限制" #~ "留空则启动一个本地服务器。\n" #~ "注意,主菜单的地址栏将会覆盖这里的设置。" +#~ msgid "" +#~ "Adjust dpi configuration to your screen (non X11/Android only) e.g. for " +#~ "4k screens." +#~ msgstr "为支持4K等屏幕,调节像素点密度(非 X11/Android 环境才有效)。" + #~ msgid "" #~ "Adjust the gamma encoding for the light tables. Higher numbers are " #~ "brighter.\n" @@ -6742,6 +6958,9 @@ msgstr "cURL 并发限制" #~ msgid "Bits per pixel (aka color depth) in fullscreen mode." #~ msgstr "全屏模式中的位每像素(又称色彩深度)。" +#~ msgid "Block bounds shown for all blocks" +#~ msgstr "已为所有方块描边" + #~ msgid "Bump Mapping" #~ msgstr "凹凸贴图" @@ -6762,6 +6981,9 @@ msgstr "cURL 并发限制" #~ msgid "Camera update toggle key" #~ msgstr "镜头更新启用/禁用键" +#~ msgid "Change Keys" +#~ msgstr "更改键位设置" + #, fuzzy #~ msgid "Change keys" #~ msgstr "更改键位设置" @@ -6833,6 +7055,38 @@ msgstr "cURL 并发限制" #~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." #~ msgstr "控制隧道宽度,较小的值创建更宽的隧道。" +#, c-format +#~ msgid "" +#~ "Controls:\n" +#~ "- %s: move forwards\n" +#~ "- %s: move backwards\n" +#~ "- %s: move left\n" +#~ "- %s: move right\n" +#~ "- %s: jump/climb up\n" +#~ "- %s: dig/punch/use\n" +#~ "- %s: place/use\n" +#~ "- %s: sneak/climb down\n" +#~ "- %s: drop item\n" +#~ "- %s: inventory\n" +#~ "- Mouse: turn/look\n" +#~ "- Mouse wheel: select item\n" +#~ "- %s: chat\n" +#~ msgstr "" +#~ "控制:\n" +#~ "- %s:向前移动\n" +#~ "- %s:向后移动\n" +#~ "- %s:向左移动\n" +#~ "- %s:向右移动\n" +#~ "- %s:跳/向上攀爬\n" +#~ "- %s:挖/打/使用\n" +#~ "- %s:放/使用\n" +#~ "- %s:潜行/向下攀爬\n" +#~ "- %s:丢弃物品\n" +#~ "- %s:物品栏\n" +#~ "- 鼠标:转身/环顾\n" +#~ "- 鼠标滚轮:选择物品\n" +#~ "- %s:聊天\n" + #~ msgid "Creative" #~ msgstr "创造" @@ -6842,6 +7096,9 @@ msgstr "cURL 并发限制" #~ msgid "Crosshair color (R,G,B)." #~ msgstr "准星颜色(红,绿,蓝)。" +#~ msgid "DPI" +#~ msgstr "DPI" + #~ msgid "Damage" #~ msgstr "伤害" @@ -6928,6 +7185,13 @@ msgstr "cURL 并发限制" #~ msgid "Enable register confirmation" #~ msgstr "启用注册确认" +#~ msgid "" +#~ "Enable vertex buffer objects.\n" +#~ "This should greatly improve graphics performance." +#~ msgstr "" +#~ "启用顶点缓冲对象。\n" +#~ "这会极大改善图像性能。" + #~ msgid "Enabled" #~ msgstr "启用" @@ -7223,6 +7487,9 @@ msgstr "cURL 并发限制" #~ msgid "Instrumentation" #~ msgstr "计数器" +#~ msgid "Invalid gamespec." +#~ msgstr "非法游戏信息。" + #~ msgid "Inventory key" #~ msgstr "物品清单键" @@ -7910,6 +8177,12 @@ msgstr "cURL 并发限制" #~ msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles." #~ msgstr "使DirectX和LuaJIT一起工作。如果这导致了问题禁用它。" +#~ msgid "Makes all liquids opaque" +#~ msgstr "使所有液体不透明" + +#~ msgid "Mapblock mesh generator's MapBlock cache size in MB" +#~ msgstr "地图生成缓存大小" + #~ msgid "Menus" #~ msgstr "菜单" @@ -8145,15 +8418,21 @@ msgstr "cURL 并发限制" #~ msgid "Simple Leaves" #~ msgstr "简单树叶" +#~ msgid "" +#~ "Size of the MapBlock cache of the mesh generator. Increasing this will\n" +#~ "increase the cache hit %, reducing the data being copied from the main\n" +#~ "thread, thus reducing jitter." +#~ msgstr "" +#~ "网格生成器的地图区块缓存大小。增加此值将会\n" +#~ "增加缓存命中率,减少从主线程复制数据,从而\n" +#~ "减少抖动。" + #~ msgid "Smooth Lighting" #~ msgstr "平滑光照" #~ msgid "Smooths rotation of camera. 0 to disable." #~ msgstr "让旋转摄影机时较流畅。设为 0 以停用。" -#~ msgid "Sound" -#~ msgstr "音效" - #~ msgid "Special" #~ msgstr "特殊" @@ -8209,6 +8488,9 @@ msgstr "cURL 并发限制" #~ msgid "Touch threshold (px):" #~ msgstr "触控阈值(像素):" +#~ msgid "Touchscreen threshold" +#~ msgstr "触屏阈值" + #~ msgid "Trilinear Filter" #~ msgstr "三线性过滤" @@ -8224,6 +8506,9 @@ msgstr "cURL 并发限制" #~ msgid "Up" #~ msgstr "向上" +#~ msgid "VBO" +#~ msgstr "VBO" + #~ msgid "Vertical screen synchronization." #~ msgstr "屏幕垂直同步。" @@ -8287,8 +8572,14 @@ msgstr "cURL 并发限制" #~ msgid "You died." #~ msgstr "您已经死亡." +#~ msgid "You have no games installed." +#~ msgstr "你没有安装任何子游戏。" + #~ msgid "Z" #~ msgstr "Z" #~ msgid "needs_fallback_font" #~ msgstr "yes" + +#~ msgid "ok" +#~ msgstr "确定" diff --git a/po/zh_TW/minetest.po b/po/zh_TW/minetest.po index 07c2f3aad..8f9298bf5 100644 --- a/po/zh_TW/minetest.po +++ b/po/zh_TW/minetest.po @@ -2,9 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: Chinese (Traditional) (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-12-03 18:48+0100\n" -"PO-Revision-Date: 2023-08-17 10:48+0000\n" -"Last-Translator: Yic95 <0Luke.Luke0@gmail.com>\n" +"POT-Creation-Date: 2024-07-11 15:14+0200\n" +"PO-Revision-Date: 2024-08-10 06:09+0000\n" +"Last-Translator: hugoalh \n" "Language-Team: Chinese (Traditional) \n" "Language: zh_TW\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.0-dev\n" +"X-Generator: Weblate 5.7-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -71,8 +71,8 @@ msgid "Command not available: " msgstr "指令無法使用: " #: builtin/common/chatcommands.lua -msgid "Get help for commands" -msgstr "取得指令的說明" +msgid "Get help for commands (-t: output in chat)" +msgstr "取得指令幫助(-t:輸出至聊天中)" #: builtin/common/chatcommands.lua msgid "" @@ -80,12 +80,8 @@ msgid "" msgstr "使用「.help 」來取得更多資訊,或使用「.help all」來列出所有指令。" #: builtin/common/chatcommands.lua -msgid "[all | ]" -msgstr "[all | ]" - -#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp -msgid "OK" -msgstr "OK" +msgid "[all | ] [-t]" +msgstr "[all | <指令>] [-t]" #: builtin/fstk/ui.lua msgid "" @@ -103,6 +99,10 @@ msgstr "發生錯誤:" msgid "Main menu" msgstr "主選單" +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "OK" + #: builtin/fstk/ui.lua msgid "Reconnect" msgstr "重新連線" @@ -131,19 +131,26 @@ msgstr "我們只支援協定版本 $1。" msgid "We support protocol versions between version $1 and $2." msgstr "我們支援協定版本 $1 到 $2。" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "“$1”已經存在。您要覆蓋它嗎?" +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" +msgstr "在安裝 \"$1\": $2 時發生錯誤" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." -msgstr "$1 和他的 $2 個依賴將會被安裝。" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download \"$1\"" +msgstr "無法下載 \"$1\"" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 by $2" -msgstr "$1 作者: $2" +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr "無法下載 $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/contentdb.lua +#, fuzzy +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "無法提取“$1”(不支援的文件類型或損壞的存檔)" + +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" @@ -151,158 +158,157 @@ msgstr "" "$1 個正在下載,\n" "$2 個正在等待" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "$1 downloading..." msgstr "正在下載 $1..." -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "找不到 $1 所需的依賴項。" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "將安裝 $1,並且將跳過他的 $2 個依賴項。" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "All packages" msgstr "所有套件" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Already installed" -msgstr "已安裝" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" msgstr "返回主選單" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "在沒有 cURL 的情況下編譯 Minetest 時,ContentDB 不可用" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "正在下載..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Error getting dependencies for package" +msgstr "獲取套件的相依元件時發生錯誤" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "遊戲" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +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 "Mods" +msgstr "模組" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No packages could be retrieved" +msgstr "無法取得套件" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "無結果" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "無更新" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "已排程" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture packs" +msgstr "材質包" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "未找到 $1的包裹。" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "解除安裝" + +#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "更新" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "全部更新 [$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 和他的 $2 個依賴將會被安裝。" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "$1 作者: $2" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "找不到 $1 所需的依賴項。" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "將安裝 $1,並且將跳過他的 $2 個依賴項。" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "已安裝" + +#: builtin/mainmenu/content/dlg_install.lua msgid "Base Game:" msgstr "主遊戲:" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: 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/guiPasswordChange.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp msgid "Cancel" msgstr "取消" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "在沒有 cURL 的情況下編譯 Minetest 時,ContentDB 不可用" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Dependencies:" msgstr "相依元件:" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Downloading..." -msgstr "正在下載..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Error installing \"$1\": $2" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to download \"$1\"" -msgstr "無法下載 $1" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Failed to download $1" -msgstr "無法下載 $1" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#, fuzzy -msgid "Failed to extract \"$1\" (unsupported file type or broken archive)" -msgstr "安裝:檔案類型不支援,或是封存檔損壞" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Games" -msgstr "遊戲" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Install" -msgstr "安裝" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "安裝 $1" -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" msgstr "安裝缺少的依賴" -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "正在載入..." - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Mods" -msgstr "Mods" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No packages could be retrieved" -msgstr "無法取得套件" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/settings/dlg_settings.lua -msgid "No results" -msgstr "無結果" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "No updates" -msgstr "無更新" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Not found" msgstr "找不到" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Overwrite" -msgstr "覆蓋" - -#: builtin/mainmenu/content/dlg_contentstore.lua +#: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." msgstr "請檢查基礎遊戲是否正確。" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Queued" -msgstr "已排程" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" +msgstr "“$1”已經存在。您要覆蓋它嗎?" -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Texture packs" -msgstr "材質包" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "The package $1 was not found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "解除安裝" - -#: builtin/mainmenu/content/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "更新" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "Update All [$1]" -msgstr "全部更新 [$1]" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "View more information in a web browser" -msgstr "在網絡瀏覽器中查看更多信息" - -#: builtin/mainmenu/content/dlg_contentstore.lua -msgid "You need to install a game before you can install a mod" -msgstr "" +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" +msgstr "覆蓋" #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" @@ -317,19 +323,16 @@ msgid "Failed to install $1 to $2" msgstr "無法安裝 $1 至 $2" #: builtin/mainmenu/content/pkgmgr.lua -#, fuzzy msgid "Install: Unable to find suitable folder name for $1" -msgstr "安裝 Mod:找不到 $1 Mod 包適合的資料夾名稱" +msgstr "安裝:無法找到適合 $1 的資料夾名稱" #: builtin/mainmenu/content/pkgmgr.lua -#, fuzzy msgid "Unable to find a valid mod, modpack, or game" -msgstr "找不到有效的 Mod 或 Mod 包" +msgstr "無法找到有效的模組、模組包或遊戲" #: builtin/mainmenu/content/pkgmgr.lua -#, fuzzy msgid "Unable to install a $1 as a $2" -msgstr "無法將 Mod 安裝為 $1" +msgstr "無法將 $1 安裝為 $2" #: builtin/mainmenu/content/pkgmgr.lua msgid "Unable to install a $1 as a texture pack" @@ -424,19 +427,16 @@ msgid "Altitude chill" msgstr "寒冷海拔" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Altitude dry" -msgstr "寒冷海拔" +msgstr "高海拔乾燥" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Biome blending" -msgstr "生物雜訊" +msgstr "生物群系混合" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Biomes" -msgstr "生物雜訊" +msgstr "生物群系" #: builtin/mainmenu/dlg_create_world.lua msgid "Caverns" @@ -455,9 +455,18 @@ msgid "Decorations" msgstr "裝飾物" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy +msgid "Desert temples" +msgstr "沙漠聖殿" + +#: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." -msgstr "警告:Development Test 僅供開發者使用。" +msgstr "開發測試是針對開發人員的。" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "在沙漠生物群落中生成不同的地牢變體(僅當啟用地牢時)" #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" @@ -468,9 +477,8 @@ msgid "Flat terrain" msgstr "超平坦世界" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Floating landmasses in the sky" -msgstr "浮地山密度" +msgstr "天空中漂浮的陸地" #: builtin/mainmenu/dlg_create_world.lua msgid "Floatlands (experimental)" @@ -494,7 +502,7 @@ msgstr "增加河流周圍的濕度" #: builtin/mainmenu/dlg_create_world.lua msgid "Install another game" -msgstr "" +msgstr "安裝另一個子遊戲" #: builtin/mainmenu/dlg_create_world.lua msgid "Lakes" @@ -626,17 +634,16 @@ msgstr "確認密碼" #: builtin/mainmenu/dlg_register.lua msgid "Joining $1" -msgstr "" +msgstr "加入 $1" #: builtin/mainmenu/dlg_register.lua -#, fuzzy msgid "Missing name" -msgstr "Mapgen 名稱" +msgstr "缺少名稱" #: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua #: builtin/mainmenu/tab_online.lua msgid "Name" -msgstr "名字" +msgstr "名稱" #: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua #: builtin/mainmenu/tab_online.lua @@ -644,18 +651,16 @@ msgid "Password" msgstr "密碼" #: builtin/mainmenu/dlg_register.lua -#, fuzzy msgid "Passwords do not match" -msgstr "密碼不符合!" +msgstr "密碼不符合" #: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Register" -msgstr "註冊並加入" +msgstr "註冊" #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "Dismiss" -msgstr "" +msgstr "忽略" #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "" @@ -663,20 +668,23 @@ msgid "" "\"Minetest Game\". Since Minetest 5.8.0, Minetest ships without a default " "game." msgstr "" +"長期以來,Minetest 引擎附帶了一個名為「Minetest Game」的預設遊戲。 自 " +"Minetest 5.8.0 起,Minetest 不再提供預設遊戲。" #: 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 "" +"如果您想繼續在 Minetest Game 世界中玩遊戲,您需要重新安裝 Minetest Game。" #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "Minetest Game is no longer installed by default" -msgstr "" +msgstr "預設不再安裝 Minetest 遊戲" #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "Reinstall Minetest Game" -msgstr "" +msgstr "重新安裝 Minetest 遊戲" #: builtin/mainmenu/dlg_rename_modpack.lua msgid "Accept" @@ -694,7 +702,7 @@ msgstr "這個 Mod 包有在其 modpack.conf 提供明確的名稱,會覆蓋 #: builtin/mainmenu/dlg_version_info.lua msgid "A new $1 version is available" -msgstr "" +msgstr "一個新的 $1 版本可用" #: builtin/mainmenu/dlg_version_info.lua msgid "" @@ -709,7 +717,7 @@ msgstr "" #: builtin/mainmenu/dlg_version_info.lua msgid "Later" -msgstr "稍後提醒" +msgstr "稍後" #: builtin/mainmenu/dlg_version_info.lua msgid "Never" @@ -748,9 +756,8 @@ msgid "Select file" msgstr "選擇檔案" #: builtin/mainmenu/settings/components.lua -#, fuzzy msgid "Set" -msgstr "選擇" +msgstr "設定" #: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua msgid "(No description of setting given)" @@ -765,9 +772,8 @@ msgid "Lacunarity" msgstr "空隙" #: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua -#, fuzzy msgid "Octaves" -msgstr "倍頻程" +msgstr "八音" #: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua #: src/settings_translation_file.cpp @@ -820,20 +826,16 @@ msgstr "緩解 (eased)" #: 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 msgid "Back" msgstr "返回" -#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp -msgid "Change Keys" -msgstr "變更按鍵" - #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp msgid "Chat" @@ -843,27 +845,26 @@ msgstr "聊天" msgid "Clear" msgstr "清除" -#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp msgid "Controls" 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 "還原至預設值" #: 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" @@ -871,16 +872,15 @@ 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 msgid "Content: Games" @@ -892,11 +892,11 @@ 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" @@ -920,7 +920,6 @@ msgid "Medium" msgstr "中" #: builtin/mainmenu/settings/shadows_component.lua -#, fuzzy msgid "Very High" msgstr "超高" @@ -937,9 +936,8 @@ msgid "Active Contributors" msgstr "活躍的貢獻者" #: builtin/mainmenu/tab_about.lua -#, fuzzy msgid "Active renderer:" -msgstr "活動目標傳送範圍" +msgstr "活動渲染器:" #: builtin/mainmenu/tab_about.lua msgid "Core Developers" @@ -947,11 +945,11 @@ msgstr "核心開發者" #: builtin/mainmenu/tab_about.lua msgid "Core Team" -msgstr "" +msgstr "核心團隊" #: builtin/mainmenu/tab_about.lua msgid "Irrlicht device:" -msgstr "" +msgstr "照明設備:" #: builtin/mainmenu/tab_about.lua msgid "Open User Data Directory" @@ -974,27 +972,24 @@ msgid "Previous Core Developers" msgstr "先前的核心開發者" #: builtin/mainmenu/tab_about.lua -#, fuzzy 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" @@ -1017,9 +1012,8 @@ msgid "Rename" msgstr "重新命名" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Update available?" -msgstr "<沒有可用的>" +msgstr "可以更新嗎?" #: builtin/mainmenu/tab_content.lua msgid "Use Texture Pack" @@ -1050,14 +1044,23 @@ 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" msgstr "從 ContentDB 安裝遊戲" +#: builtin/mainmenu/tab_local.lua +msgid "Minetest doesn't come with a game by default." +msgstr "預設不再安裝 Minetest 遊戲。" + +#: builtin/mainmenu/tab_local.lua +msgid "" +"Minetest is a game-creation platform that allows you to play many different " +"games." +msgstr "Minetest 是一個遊戲創建平台,可以讓你遊玩許多不同的遊戲。" + #: builtin/mainmenu/tab_local.lua msgid "New" msgstr "新增" @@ -1076,7 +1079,7 @@ msgstr "連線埠" #: builtin/mainmenu/tab_local.lua msgid "Select Mods" -msgstr "選擇模組:" +msgstr "選擇模組" #: builtin/mainmenu/tab_local.lua msgid "Select World:" @@ -1091,8 +1094,8 @@ msgid "Start Game" msgstr "開始遊戲" #: builtin/mainmenu/tab_local.lua -msgid "You have no games installed." -msgstr "您未安裝任何遊戲。" +msgid "You need to install a game before you can create a world." +msgstr "您需要先安裝遊戲才能安裝模組。" #: builtin/mainmenu/tab_online.lua msgid "Address" @@ -1121,7 +1124,7 @@ msgstr "加入遊戲" #: builtin/mainmenu/tab_online.lua msgid "Login" -msgstr "登錄" +msgstr "登入" #: builtin/mainmenu/tab_online.lua msgid "Ping" @@ -1136,18 +1139,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." @@ -1173,18 +1174,10 @@ msgstr "正在載入材質..." msgid "Rebuilding shaders..." msgstr "正在重新組建著色器..." -#: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "連線錯誤(逾時?)" - #: src/client/clientlauncher.cpp msgid "Could not find or load game: " msgstr "找不到或無法載入遊戲: " -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." -msgstr "遊戲規格無效。" - #: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "主選單" @@ -1209,7 +1202,11 @@ msgstr "無法開啟提供的密碼檔案: " msgid "Provided world path doesn't exist: " msgstr "提供的世界路徑不存在: " -#: src/client/game.cpp src/server.cpp +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "媒體..." + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp msgid "" "\n" "Check debug.txt for details." @@ -1217,18 +1214,10 @@ msgstr "" "\n" "檢視 debug.txt 以取得更多資訊。" -#: src/client/game.cpp -msgid "- Address: " -msgstr "- 地址: " - #: src/client/game.cpp msgid "- Mode: " msgstr "- 模式: " -#: src/client/game.cpp -msgid "- Port: " -msgstr "- 連線埠: " - #: src/client/game.cpp msgid "- Public: " msgstr "- 公開: " @@ -1263,10 +1252,6 @@ msgstr "已啟用自動前進" msgid "Block bounds hidden" msgstr "區塊邊界隱藏" -#: src/client/game.cpp -msgid "Block bounds shown for all blocks" -msgstr "區塊邊界顯示所有區塊" - #: src/client/game.cpp msgid "Block bounds shown for current block" msgstr "區塊邊界顯示目前區塊" @@ -1284,9 +1269,8 @@ msgid "Camera update enabled" msgstr "已啟用相機更新" #: src/client/game.cpp -#, fuzzy msgid "Can't show block bounds (disabled by game or mod)" -msgstr "不能顯示區塊邊界 (需要「basic_debug」權限)" +msgstr "無法顯示區塊邊界(被遊戲或模組停用)" #: src/client/game.cpp msgid "Change Password" @@ -1312,6 +1296,10 @@ msgstr "已停用用戶端指令稿" msgid "Connecting to server..." msgstr "正在連線至伺服器..." +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "連線錯誤(逾時?)" + #: src/client/game.cpp msgid "Connection failed for unknown reason" msgstr "連線失敗,原因不明" @@ -1320,47 +1308,14 @@ msgstr "連線失敗,原因不明" msgid "Continue" msgstr "繼續" -#: src/client/game.cpp -#, fuzzy, c-format -msgid "" -"Controls:\n" -"- %s: move forwards\n" -"- %s: move backwards\n" -"- %s: move left\n" -"- %s: move right\n" -"- %s: jump/climb up\n" -"- %s: dig/punch/use\n" -"- %s: place/use\n" -"- %s: sneak/climb down\n" -"- %s: drop item\n" -"- %s: inventory\n" -"- Mouse: turn/look\n" -"- Mouse wheel: select item\n" -"- %s: chat\n" -msgstr "" -"控制:\n" -"- %s:向前移動\n" -"- %s:向後移動\n" -"- %s:向左移動\n" -"- %s:向右移動\n" -"- %s:跳躍/向上攀爬\n" -"- %s:挖/打\n" -"- %s:放置/使用\n" -"- %s:潛行/向下攀爬\n" -"- %s:丟棄物品\n" -"- %s:物品欄\n" -"- 滑鼠:旋轉/觀看\n" -"- 滑鼠滾輪:選取物品\n" -"- %s:聊天\n" - #: src/client/game.cpp #, fuzzy msgid "" "Controls:\n" "No menu open:\n" "- slide finger: look around\n" -"- tap: place/use\n" -"- long tap: dig/punch/use\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" "Menu/inventory open:\n" "- double tap (outside):\n" " --> close\n" @@ -1452,9 +1407,13 @@ msgstr "已停用霧氣" msgid "Fog enabled" msgstr "已啟用霧氣" +#: src/client/game.cpp +msgid "Fog enabled by game or mod" +msgstr "霧已由遊戲或模組啟用" + #: src/client/game.cpp msgid "Game info:" -msgstr "遊戲資訊:" +msgstr "遊戲資訊:" #: src/client/game.cpp msgid "Game paused" @@ -1472,17 +1431,13 @@ msgstr "定義物品..." msgid "KiB/s" msgstr "KiB/秒" -#: src/client/game.cpp -msgid "Media..." -msgstr "媒體..." - #: src/client/game.cpp msgid "MiB/s" msgstr "MiB/秒" #: src/client/game.cpp msgid "Minimap currently disabled by game or mod" -msgstr "迷你地圖目前已被遊戲或 Mod 停用" +msgstr "迷你地圖目前已被遊戲或模組停用" #: src/client/game.cpp msgid "Multiplayer" @@ -1576,28 +1531,26 @@ msgid "Unable to listen on %s because IPv6 is disabled" msgstr "無法聽取 %s 因為 IPv6 已停用" #: src/client/game.cpp -#, fuzzy msgid "Unlimited viewing range disabled" -msgstr "已啟用無限視野" +msgstr "已停用無限視野" #: src/client/game.cpp -#, fuzzy msgid "Unlimited viewing range enabled" msgstr "已啟用無限視野" #: src/client/game.cpp msgid "Unlimited viewing range enabled, but forbidden by game or mod" -msgstr "" +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 msgid "Viewing changed to %d (the minimum), but limited to %d by game or mod" -msgstr "" +msgstr "觀看次數改為 %d(最少),但受遊戲或模組限制為 %d" #: src/client/game.cpp #, c-format @@ -1605,20 +1558,20 @@ 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 msgid "" "Viewing range changed to %d (the maximum), but limited to %d by game or mod" -msgstr "" +msgstr "觀看範圍改為%d(最大),但受遊戲或模組限制為%d" #: 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 @@ -1633,14 +1586,9 @@ msgstr "已顯示線框" msgid "Zoom currently disabled by game or mod" msgstr "遠近調整目前已被遊戲或模組停用" -#: src/client/game.cpp -msgid "ok" -msgstr "確定" - #: src/client/gameui.cpp -#, fuzzy msgid "Chat currently disabled by game or mod" -msgstr "遠近調整目前已被遊戲或模組停用" +msgstr "目前聊天已被遊戲或模組停用" #: src/client/gameui.cpp msgid "Chat hidden" @@ -1686,23 +1634,20 @@ msgid "Caps Lock" msgstr "大寫鎖定鍵" #: src/client/keycode.cpp -#, fuzzy msgid "Clear Key" -msgstr "清除" +msgstr "清除鍵" #: src/client/keycode.cpp -#, fuzzy msgid "Control Key" -msgstr "Control" +msgstr "控制鍵" #: src/client/keycode.cpp -#, fuzzy msgid "Delete Key" -msgstr "刪除" +msgstr "刪除鍵" #: src/client/keycode.cpp msgid "Down Arrow" -msgstr "" +msgstr "向下箭頭" #: src/client/keycode.cpp msgid "End" @@ -1718,7 +1663,7 @@ msgstr "執行" #: src/client/keycode.cpp msgid "Help" -msgstr "說明" +msgstr "幫助" #: src/client/keycode.cpp msgid "Home" @@ -1749,9 +1694,8 @@ msgid "Insert" msgstr "插入" #: src/client/keycode.cpp -#, fuzzy msgid "Left Arrow" -msgstr "左 Control" +msgstr "左箭頭" #: src/client/keycode.cpp msgid "Left Button" @@ -1775,9 +1719,8 @@ msgstr "左 Windows 鍵" #. ~ Key name, common on Windows keyboards #: src/client/keycode.cpp -#, fuzzy msgid "Menu Key" -msgstr "選單" +msgstr "選單鍵" #: src/client/keycode.cpp msgid "Middle Button" @@ -1863,9 +1806,8 @@ msgstr "Page up" #. ~ Usually paired with the Break key #: src/client/keycode.cpp -#, fuzzy msgid "Pause Key" -msgstr "暫停" +msgstr "暫停鍵" #: src/client/keycode.cpp msgid "Play" @@ -1916,9 +1858,8 @@ msgid "Select" msgstr "選擇" #: src/client/keycode.cpp -#, fuzzy msgid "Shift Key" -msgstr "Shift" +msgstr "Shift 鍵" #: src/client/keycode.cpp msgid "Sleep" @@ -1938,7 +1879,7 @@ msgstr "Tab" #: src/client/keycode.cpp msgid "Up Arrow" -msgstr "" +msgstr "向上箭頭" #: src/client/keycode.cpp msgid "X Button 1" @@ -1955,7 +1896,7 @@ msgstr "遠近調整" #: src/client/minimap.cpp msgid "Minimap hidden" -msgstr "已隱藏迷你地圖" +msgstr "迷你地圖已隱藏" #: src/client/minimap.cpp #, c-format @@ -1971,27 +1912,35 @@ msgstr "表面模式的迷你地圖,放大 %d 倍" msgid "Minimap in texture mode" msgstr "材質模式的迷你地圖" +#: src/client/shader.cpp +#, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "無法編譯「%s」著色器。" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "著色器已啟用,但是驅動程式不支援 GLSL。" + #. ~ 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 "" +msgstr "%s 模组丟失:" #: src/content/mod_configuration.cpp msgid "" "Install and enable the required mods, or disable the mods causing errors." -msgstr "" +msgstr "安裝並啟用所需的 mod,或停用導致錯誤的 mod。" #: src/content/mod_configuration.cpp msgid "" "Note: this may be caused by a dependency cycle, in which case try updating " "the mods." -msgstr "" +msgstr "注意:這可能是由依賴循環引起的,在這種情況下請嘗試更新 mod。" #: src/content/mod_configuration.cpp -#, fuzzy msgid "Some mods have unsatisfied dependencies:" -msgstr "沒有強制相依元件" +msgstr "有些mod有未滿足的依賴:" #: src/gui/guiChatConsole.cpp msgid "Failed to open webpage" @@ -2083,7 +2032,7 @@ msgstr "已使用此按鍵" #: src/gui/guiKeyChangeMenu.cpp msgid "Keybindings." -msgstr "" +msgstr "鍵綁定。" #: src/gui/guiKeyChangeMenu.cpp msgid "Left" @@ -2161,6 +2110,18 @@ msgstr "遠近調整" msgid "press key" msgstr "按下按鍵" +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "開啟" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "開啟網址?" + +#: src/gui/guiOpenURL.cpp +msgid "Unable to open URL" +msgstr "無法開啟網址" + #: src/gui/guiPasswordChange.cpp msgid "Change" msgstr "變更" @@ -2194,26 +2155,25 @@ msgstr "音量:%d%%" #. 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 "zh_TW" #: src/network/clientpackethandler.cpp msgid "" "Name is not registered. To create an account on this server, click 'Register'" -msgstr "" +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 -#, fuzzy 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" @@ -2224,10 +2184,14 @@ msgid "" "situations.\n" "Range roughly -2 to 2. Multiply by 'scale' for offset in nodes." msgstr "" -"在「比例尺」中單位的 (X,Y,Z) 偏移。\n" -"用於移動適合的低地生成區域靠近 (0, 0)。\n" -"預設值適合曼德博集合,若要用於朱利亞集合則必須修改。\n" -"範圍大約在 -2 至 2 間。乘以節點的偏移值。" +"(X,Y,Z) 分形相對於世界中心的偏移量,以「比例」為單位。\n" +"可用於將所需點移至 (0, 0) 以建立\n" +"合適的生成點,或允許“放大”所需的位置\n" +"透過增加“規模”來強調這一點。\n" +"預設值已調整為適合 Mandelbrot 的生成點\n" +"設定為預設參數,可能需要更改其他參數\n" +"情況。\n" +"範圍大致為 -2 到 2。乘以“scale”作為節點中的偏移量。" #: src/settings_translation_file.cpp msgid "" @@ -2239,6 +2203,13 @@ msgid "" "Default is for a vertically-squashed shape suitable for\n" "an island, set all 3 numbers equal for the raw shape." msgstr "" +"(X,Y,Z) 節點中分形的尺度。\n" +"實際分形大小將大 2 至 3 倍。\n" +"這些數字可以變得非常大,分形確實如此\n" +"不必適應這個世界。\n" +"增加這些以“放大”分形的細節。\n" +"預設值是垂直擠壓的形狀,適合\n" +"一個島嶼,將原始形狀的所有 3 個數字設為相等。" #: src/settings_translation_file.cpp msgid "2D noise that controls the shape/size of ridged mountains." @@ -2261,9 +2232,8 @@ msgid "2D noise that controls the size/occurrence of rolling hills." msgstr "控制波狀丘陵地之大小或產狀的 2D 雜訊值。" #: src/settings_translation_file.cpp -#, fuzzy msgid "2D noise that controls the size/occurrence of step mountain ranges." -msgstr "控制 Step mountains 範圍之形狀或大小的 2D 雜訊值。" +msgstr "控制階梯山脈的大小/出現的 2D 雜訊。" #: src/settings_translation_file.cpp msgid "2D noise that locates the river valleys and channels." @@ -2271,7 +2241,7 @@ msgstr "定位河谷及河道的 2D 雜訊值。" #: src/settings_translation_file.cpp msgid "3D" -msgstr "" +msgstr "3D" #: src/settings_translation_file.cpp msgid "3D clouds" @@ -2282,9 +2252,8 @@ msgid "3D mode" msgstr "3D 模式" #: src/settings_translation_file.cpp -#, fuzzy msgid "3D mode parallax strength" -msgstr "法線貼圖強度" +msgstr "3D模式視差強度" #: src/settings_translation_file.cpp msgid "3D noise defining giant caverns." @@ -2305,6 +2274,10 @@ msgid "" "to be adjusted, as floatland tapering functions best when this noise has\n" "a value range of approximately -2.0 to 2.0." msgstr "" +"懸空島的3D雜訊定義結構。\n" +"如果改變了預設值,雜訊「scale」(預設為0.7)可能需要\n" +"調整,因為當這個噪波的值範圍大約是-2.0到2.0時,\n" +"懸空島逐漸變窄的函數最好。" #: src/settings_translation_file.cpp msgid "3D noise defining structure of river canyon walls." @@ -2323,7 +2296,6 @@ msgid "3D noise that determines number of dungeons per mapchunk." msgstr "決定每個地圖區塊中地城數量的 3D 雜訊值。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "3D support.\n" "Currently supported:\n" @@ -2343,8 +2315,7 @@ msgstr "" "- topbottom:將螢幕分成頂/底部。\n" "- sidebyside:將螢幕分離為一邊一個。\n" "- crossview: 鬥雞眼式 3D\n" -"- pageflip:基於四重緩衝的 3D。\n" -"註:interlaced 模式需要啟用著色器。" +"註:隔行掃描模式需要啟用著色器。" #: src/settings_translation_file.cpp msgid "" @@ -2371,9 +2342,8 @@ msgid "ABM time budget" msgstr "ABM 時間預算" #: src/settings_translation_file.cpp -#, fuzzy msgid "Absolute limit of queued blocks to emerge" -msgstr "發生佇列的絕對限制" +msgstr "出現的排隊區塊的絕對限制" #: src/settings_translation_file.cpp msgid "Acceleration in air" @@ -2403,12 +2373,6 @@ msgstr "活動目標傳送範圍" msgid "Adds particles when digging a node." msgstr "當挖掘節點時加入一些粒子。" -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "調整您螢幕的 DPI 設定(並不只有 X11/Android)例如 4K 螢幕。" - #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." msgstr "調整偵測到的顯示密度,用來縮放 UI 元件。" @@ -2422,16 +2386,24 @@ msgid "" "Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n" "to be sure) creates a solid floatland layer." msgstr "" +"調整浮空島層的密度。\n" +"增加數值以增加密度。可以是正值或負值。\n" +"值 = 0.0:50% 的體積是浮空島。\n" +"值 = 2.0(可以更高,取決於「mgv7_np_floatland」,總是進行測試以確定)建立一個" +"堅固的浮空島層。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Admin name" -msgstr "將物品名稱加至末尾" +msgstr "管理員名稱" #: src/settings_translation_file.cpp msgid "Advanced" msgstr "進階" +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "允許液體呈半透明狀。" + #: src/settings_translation_file.cpp msgid "" "Alters the light curve by applying 'gamma correction' to it.\n" @@ -2440,11 +2412,15 @@ msgid "" "This only has significant effect on daylight and artificial\n" "light, it has very little effect on natural night light." msgstr "" +"透過應用「伽瑪校正」來改變光變曲線。\n" +"較高的值使中間和較低的光照水平更亮。\n" +"值“1.0”使光變曲線保持不變。\n" +"這只對日光和人造光有顯著影響\n" +"在夜晚的自然光照下作用很小。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Always fly fast" -msgstr "總是啟用飛行與快速模式" +msgstr "總是快速飛行" #: src/settings_translation_file.cpp msgid "Ambient occlusion gamma" @@ -2467,14 +2443,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" @@ -2488,6 +2462,17 @@ msgstr "將物品名稱加至工具提示的末尾。" msgid "Apple trees noise" 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 "Arm inertia" msgstr "慣性手臂" @@ -2512,22 +2497,43 @@ msgid "" "clients.\n" "Small values potentially improve performance a lot, at the expense of " "visible\n" -"rendering glitches (some blocks will not be rendered under water and in " -"caves,\n" -"as well as sometimes on land).\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)." +"Stated in MapBlocks (16 nodes)." msgstr "" -"在這樣的距離下,伺服器將積極最佳化那些要傳送給用戶端的方塊。\n" -"較小的值可能會提升效能,但代價是一些可見的彩現問題。\n" -"(有一些在水中與洞穴中的方塊將不會被彩現,以及有時在陸地上)\n" -"將此值設定為大於 max_block_send_distance 將會停用這個最佳化。\n" -"在地圖區塊中顯示(16 個節點)" +"在這個距離上,伺服器將積極優化發送到哪些區塊\n" +"客戶。\n" +"小值可能會大大提高效能,但會犧牲可見的效能\n" +"渲染故障(某些方塊不會在水下和洞穴中渲染,\n" +"以及有時在陸地上)。\n" +"將其設為大於 max_block_send_distance 的值會停用此功能\n" +"最佳化.\n" +"以地圖塊(16 個節點)表示。" + +#: src/settings_translation_file.cpp +#, fuzzy +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 "" +"在這個距離上,伺服器將積極優化發送到哪些區塊\n" +"客戶。\n" +"小值可能會大大提高效能,但會犧牲可見的效能\n" +"渲染故障(某些方塊不會在水下和洞穴中渲染,\n" +"以及有時在陸地上)。\n" +"將其設為大於 max_block_send_distance 的值會停用此功能\n" +"最佳化.\n" +"以地圖塊(16 個節點)表示。" #: src/settings_translation_file.cpp msgid "Audio" -msgstr "" +msgstr "聲音" #: src/settings_translation_file.cpp msgid "Automatically jump up single-node obstacles." @@ -2554,9 +2560,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" @@ -2579,38 +2584,41 @@ msgid "Bind address" msgstr "綁定地址" #: src/settings_translation_file.cpp -#, fuzzy msgid "Biome API" -msgstr "生物雜訊" +msgstr "生物群落 API" #: src/settings_translation_file.cpp msgid "Biome noise" msgstr "生物雜訊" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Block cull optimize distance" +msgstr "區塊傳送最佳化距離" + #: src/settings_translation_file.cpp msgid "Block send optimize distance" msgstr "區塊傳送最佳化距離" #: src/settings_translation_file.cpp msgid "Bloom" -msgstr "" +msgstr "泛光" #: src/settings_translation_file.cpp msgid "Bloom Intensity" -msgstr "" +msgstr "泛光強度" #: src/settings_translation_file.cpp -#, fuzzy msgid "Bloom Radius" -msgstr "雲朵範圍" +msgstr "泛光半徑" #: src/settings_translation_file.cpp msgid "Bloom Strength Factor" -msgstr "" +msgstr "泛光强度因子" #: src/settings_translation_file.cpp msgid "Bobbing" -msgstr "" +msgstr "擺動" #: src/settings_translation_file.cpp msgid "Bold and italic font path" @@ -2637,9 +2645,8 @@ msgid "Builtin" msgstr "內建" #: src/settings_translation_file.cpp -#, fuzzy msgid "Camera" -msgstr "變更相機" +msgstr "相機" #: src/settings_translation_file.cpp msgid "Camera smoothing" @@ -2698,11 +2705,12 @@ msgid "" "Center of light curve boost range.\n" "Where 0.0 is minimum light level, 1.0 is maximum light level." msgstr "" +"光變曲線中心增強範圍。\n" +"其中 0.0 是最小光照級別,1.0 是最大光照級別。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Chat command time message threshold" -msgstr "聊天訊息踢出閾值" +msgstr "聊天命令時間訊息閾值" #: src/settings_translation_file.cpp msgid "Chat commands" @@ -2752,7 +2760,7 @@ msgstr "用戶端" #: src/settings_translation_file.cpp msgid "Client Mesh Chunksize" -msgstr "" +msgstr "客戶端網格區塊大小" #: src/settings_translation_file.cpp msgid "Client and Server" @@ -2767,12 +2775,10 @@ msgid "Client side modding restrictions" msgstr "用戶端修改限制" #: src/settings_translation_file.cpp -#, fuzzy msgid "Client-side Modding" msgstr "用戶端修改" #: src/settings_translation_file.cpp -#, fuzzy msgid "Client-side node lookup range restriction" msgstr "用戶端節點查詢範圍限制" @@ -2789,7 +2795,6 @@ msgid "Clouds" msgstr "雲朵" #: src/settings_translation_file.cpp -#, fuzzy msgid "Clouds are a client-side effect." msgstr "雲朵是用戶端的特效。" @@ -2805,6 +2810,12 @@ msgstr "彩色迷霧" msgid "Colored shadows" 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 "" "Comma-separated list of flags to hide in the content repository.\n" @@ -2815,6 +2826,12 @@ msgid "" "These flags are independent from Minetest 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/content_flags/" #: src/settings_translation_file.cpp msgid "" @@ -2839,6 +2856,10 @@ msgid "" "0 - least compression, fastest\n" "9 - best compression, slowest" msgstr "" +"將地圖區塊儲存到磁碟時使用的壓縮等級。\n" +"-1 - 使用預設壓縮級別\n" +"0 - 最小壓縮,最快\n" +"9 - 最佳壓縮,最慢" #: src/settings_translation_file.cpp msgid "" @@ -2847,6 +2868,10 @@ msgid "" "0 - least compression, fastest\n" "9 - best compression, slowest" msgstr "" +"將地圖區塊發送到客戶端時使用的壓縮等級。\n" +"-1 - 使用預設壓縮級別\n" +"0 - 最小壓縮,最快\n" +"9 - 最佳壓縮,最慢" #: src/settings_translation_file.cpp msgid "Connect glass" @@ -2874,7 +2899,7 @@ msgstr "終端機高度" #: src/settings_translation_file.cpp msgid "Content Repository" -msgstr "" +msgstr "內容儲存庫" #: src/settings_translation_file.cpp msgid "ContentDB Flag Blacklist" @@ -2886,7 +2911,7 @@ msgstr "ContentDB 最大並行下載數" #: src/settings_translation_file.cpp msgid "ContentDB URL" -msgstr "ContentDB URL" +msgstr "ContentDB網址" #: src/settings_translation_file.cpp msgid "" @@ -2903,6 +2928,8 @@ msgid "" "Controls sinking speed in liquid when idling. Negative values will cause\n" "you to rise instead." msgstr "" +"控制空轉時在液體中的下沉速度。\n" +" 負值會導致你上升。" #: src/settings_translation_file.cpp msgid "Controls steepness/depth of lake depressions." @@ -2950,10 +2977,6 @@ msgstr "" "十字準線顏色(R,G,B)。\n" "還控制物件的十字線顏色" -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "DPI" - #: src/settings_translation_file.cpp msgid "Debug log file size threshold" msgstr "除錯紀錄檔案大小閾值" @@ -2964,7 +2987,7 @@ msgstr "除錯記錄等級" #: src/settings_translation_file.cpp msgid "Debugging" -msgstr "" +msgstr "调试" #: src/settings_translation_file.cpp msgid "Dedicated server step" @@ -2975,11 +2998,12 @@ msgid "Default acceleration" msgstr "預設加速" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Default maximum number of forceloaded mapblocks.\n" "Set this to -1 to disable the limit." -msgstr "強制載入地圖區塊的最大數量。" +msgstr "" +"強制載入地圖區塊的預設最大數量。\n" +"將其設為 -1 以停用限制。" #: src/settings_translation_file.cpp msgid "Default password" @@ -3003,6 +3027,28 @@ msgid "" "This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" +"定義陰影過濾品質。\n" +"這透過應用 PCF 或泊松盤來模擬軟陰影效果\n" +"但也使用更多的資源。" + +#: 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" +"Minetest still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" +"定義允許連線的最早的客戶端。\n" +"較舊的客戶端是相容的,因為它們在連接時不會崩潰\n" +"到新伺服器,但它們可能不支援您期望的所有新功能。\n" +"這允許比 strict_protocol_version_checking 更細粒度的控制。\n" +"Minetest 仍然強制執行其自己的內部最低限度,並啟用\n" +"strict_protocol_version_checking 將有效地覆蓋這一點。" #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." @@ -3013,14 +3059,12 @@ msgid "Defines areas with sandy beaches." msgstr "定義沙灘區。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Defines distribution of higher terrain and steepness of cliffs." -msgstr "定義較高的地形區(懸崖頂部)並影響懸崖的陡峭程度。" +msgstr "定義較高地形的分佈和懸崖的陡度。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Defines distribution of higher terrain." -msgstr "定義 'terrain_higher'(懸崖頂部地形)的區域。" +msgstr "定義較高地形的分佈。" #: src/settings_translation_file.cpp msgid "Defines full size of caverns, smaller values create larger caverns." @@ -3032,6 +3076,9 @@ msgid "" "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" #: src/settings_translation_file.cpp msgid "Defines large-scale river channel structure." @@ -3054,6 +3101,8 @@ 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" #: src/settings_translation_file.cpp msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)." @@ -3065,6 +3114,8 @@ msgid "" "methods.\n" "Value of 2 means taking 2x2 = 4 samples." msgstr "" +"定義 FSAA 和 SSAA 抗鋸齒方法的取樣網格的大小。\n" +"值 2 表示採集 2x2 = 4 個樣本。" #: src/settings_translation_file.cpp msgid "Defines the width of the river channel." @@ -3099,9 +3150,8 @@ msgid "Deprecated Lua API handling" msgstr "不推薦使用 Lua API 處理" #: src/settings_translation_file.cpp -#, fuzzy msgid "Depth below which you'll find giant caverns." -msgstr "您會發現大型洞穴的深度。" +msgstr "在其深度之下你會發現巨大的洞穴。" #: src/settings_translation_file.cpp msgid "Depth below which you'll find large caves." @@ -3130,9 +3180,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" @@ -3155,6 +3204,8 @@ msgid "" "Distance in nodes at which transparency depth sorting is enabled\n" "Use this to limit the performance impact of transparency depth sorting" msgstr "" +"啟用透明度深度排序的節點距離\n" +"使用它來限制透明度深度排序對效能的影響" #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." @@ -3169,9 +3220,8 @@ msgid "Double-tapping the jump key toggles fly mode." msgstr "輕擊兩次跳躍鍵以切換成飛行模式。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Dump the mapgen debug information." -msgstr "轉儲 mapgen 的除錯資訊。" +msgstr "轉儲地圖生成器調試資訊。" #: src/settings_translation_file.cpp msgid "Dungeon maximum Y" @@ -3187,16 +3237,20 @@ msgstr "地城雜訊" #: src/settings_translation_file.cpp msgid "Enable Automatic Exposure" -msgstr "" +msgstr "啟用自動曝光" #: src/settings_translation_file.cpp -#, fuzzy msgid "Enable Bloom" -msgstr "全部啟用" +msgstr "啟用泛光" #: src/settings_translation_file.cpp msgid "Enable Bloom Debug" -msgstr "" +msgstr "啟用泛光調試" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable Debanding" +msgstr "啟用傷害" #: src/settings_translation_file.cpp msgid "" @@ -3220,10 +3274,16 @@ msgid "" "On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " "filtering." msgstr "" +"啟用泊松盤(Poisson disk)濾鏡。\n" +"使用泊松盤演算法來產生“軟陰影”。 不啟用的話就會使用 PCF 濾鏡。" + +#: src/settings_translation_file.cpp +msgid "Enable Post Processing" +msgstr "啟用後製處理" #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" -msgstr "" +msgstr "啟用光線追蹤剔除" #: src/settings_translation_file.cpp msgid "" @@ -3232,12 +3292,18 @@ msgid "" "automatically adjust to the brightness of the scene,\n" "simulating the behavior of human eye." msgstr "" +"啟用自動曝光校正\n" +"啟用後,後處理引擎將\n" +"自動調節場景亮度,\n" +"模擬人眼的行為。" #: src/settings_translation_file.cpp msgid "" "Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" +"啟用彩色陰影。\n" +"在真正的半透明節點上投射彩色陰影。 這很貴。" #: src/settings_translation_file.cpp msgid "Enable console window" @@ -3249,7 +3315,7 @@ msgstr "啟用搖桿" #: src/settings_translation_file.cpp msgid "Enable joysticks. Requires a restart to take effect" -msgstr "" +msgstr "啟用操縱桿。 需要重新啟動才能生效" #: src/settings_translation_file.cpp msgid "Enable mod channels support." @@ -3261,7 +3327,12 @@ msgstr "啟用 mod 安全性" #: src/settings_translation_file.cpp msgid "Enable mouse wheel (scroll) for item selection in hotbar." -msgstr "" +msgstr "啟用滑鼠滾輪(滾動)以在熱欄中選擇項目。" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable random mod loading (mainly used for testing)." +msgstr "啟用隨機使用者輸入(僅供測試使用)。" #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." @@ -3277,7 +3348,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Enable split login/register" -msgstr "" +msgstr "啟用分割登入/註冊" #: src/settings_translation_file.cpp msgid "" @@ -3291,6 +3362,10 @@ msgstr "" "較舊的用戶端在這個意義上相容,它們不會在連線至\n" "新伺服器時當掉,但它們可能會不支援一些您預期會有的新功能。" +#: src/settings_translation_file.cpp +msgid "Enable touchscreen" +msgstr "啟用觸控螢幕" + #: src/settings_translation_file.cpp msgid "" "Enable usage of remote media server (if provided by server).\n" @@ -3302,12 +3377,6 @@ msgstr "" "當連線到伺服器時,遠端伺服器提供了一個\n" "顯著較快的下載媒體(如材質)的方式。" -#: src/settings_translation_file.cpp -msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Enable view bobbing and amount of view bobbing.\n" @@ -3333,6 +3402,10 @@ msgid "" "appearance of high dynamic range images. Mid-range contrast is slightly\n" "enhanced, highlights and shadows are gradually compressed." msgstr "" +"開啟Hable的「神秘海域2」電影式的色調映射。\n" +"模擬電影色調曲線及其實現高動態範圍影像的方式。\n" +"略微改善中等範圍對比。\n" +"逐步壓縮高亮和陰影。" #: src/settings_translation_file.cpp msgid "Enables animation of inventory items." @@ -3342,16 +3415,30 @@ msgstr "啟用物品欄物品動畫。" msgid "Enables caching of facedir rotated meshes." msgstr "啟用面旋轉方向的網格快取。" +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +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." +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 "" +"實現減少 CPU 負載或提高渲染效能的權衡\n" +"以不影響遊戲可玩性的輕微視覺損失為代價。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Engine Profiler" -msgstr "山谷分析" +msgstr "引擎分析儀" #: src/settings_translation_file.cpp msgid "Engine profiling data print interval" @@ -3370,19 +3457,24 @@ msgid "" "Values < 1.0 (for example 0.25) create a more defined surface level with\n" "flatter lowlands, suitable for a solid floatland layer." msgstr "" +"floatland 錐度的指數。 改變錐形行為。\n" +"值 = 1.0 建立均勻的線性錐形。\n" +"值 > 1.0 建立適合預設分隔的平滑錐度\n" +"浮地。\n" +"值 < 1.0(例如 0.25)可建立更明確的表面水平\n" +"平坦的低地,適合堅實的浮地層。" #: src/settings_translation_file.cpp msgid "Exposure compensation" -msgstr "" +msgstr "曝光補償" #: src/settings_translation_file.cpp msgid "FPS" -msgstr "" +msgstr "FPS" #: src/settings_translation_file.cpp -#, fuzzy msgid "FPS when unfocused or paused" -msgstr "當遊戲暫停時的最高 FPS。" +msgstr "遊戲暫停時最高 FPS" #: src/settings_translation_file.cpp msgid "Factor noise" @@ -3393,9 +3485,8 @@ msgid "Fall bobbing factor" msgstr "墜落晃動因素" #: src/settings_translation_file.cpp -#, fuzzy msgid "Fallback font path" -msgstr "備用字型" +msgstr "後備字體路徑" #: src/settings_translation_file.cpp msgid "Fast mode acceleration" @@ -3414,16 +3505,15 @@ msgid "Field of view in degrees." msgstr "以度計算的視野。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "File in client/serverlist/ that contains your favorite servers displayed in " "the\n" "Multiplayer Tab." msgstr "" -"在 用戶端/伺服器清單/ 中的檔案包含了顯示在多人遊戲分頁中您最愛的伺服器。" +"客戶端/伺服器清單/ 中的文件,包含顯示在「多人遊戲」標籤中的您\n" +"收藏的伺服器。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Filler depth" msgstr "填充深度" @@ -3436,9 +3526,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." @@ -3454,51 +3543,43 @@ msgstr "固定的地圖種子" #: src/settings_translation_file.cpp msgid "Fixed virtual joystick" -msgstr "" +msgstr "固定虛擬搖桿" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Fixes the position of virtual joystick.\n" "If disabled, virtual joystick will center to first-touch's position." msgstr "" -"(Android) 修正虛擬搖桿的位置。\n" -"如停用,虛擬搖桿將會置中於第一個觸碰的位置。" +"修復虛擬搖桿的位置。\n" +"若停用,虛擬操縱桿將以首次觸碰的位置為中心。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Floatland density" -msgstr "浮地山密度" +msgstr "浮島密度" #: src/settings_translation_file.cpp -#, fuzzy msgid "Floatland maximum Y" -msgstr "浮地山高度" +msgstr "懸空島最大Y座標" #: src/settings_translation_file.cpp -#, fuzzy msgid "Floatland minimum Y" -msgstr "浮地山高度" +msgstr "懸空島最小Y座標" #: src/settings_translation_file.cpp -#, fuzzy msgid "Floatland noise" -msgstr "浮地基礎噪音" +msgstr "懸空島噪音" #: src/settings_translation_file.cpp -#, fuzzy msgid "Floatland taper exponent" -msgstr "浮地山密度" +msgstr "懸空島尖銳指數" #: src/settings_translation_file.cpp -#, fuzzy msgid "Floatland tapering distance" -msgstr "浮地基礎噪音" +msgstr "懸空島尖銳距離" #: src/settings_translation_file.cpp -#, fuzzy msgid "Floatland water level" -msgstr "浮地高度" +msgstr "懸空島水位" #: src/settings_translation_file.cpp msgid "Fog" @@ -3509,17 +3590,16 @@ msgid "Fog start" msgstr "霧氣開始" #: src/settings_translation_file.cpp -#, fuzzy msgid "Font" -msgstr "字型大小" +msgstr "字體" #: src/settings_translation_file.cpp msgid "Font bold by default" -msgstr "" +msgstr "預設字體為粗體" #: src/settings_translation_file.cpp msgid "Font italic by default" -msgstr "" +msgstr "預設字體為斜體" #: src/settings_translation_file.cpp msgid "Font shadow" @@ -3535,21 +3615,23 @@ msgstr "字型大小" #: src/settings_translation_file.cpp msgid "Font size divisible by" -msgstr "" +msgstr "字體大小除以" #: src/settings_translation_file.cpp msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI" -msgstr "" +msgstr "在 96 DPI 下預設字體大小 1 unit = 1 pixel" #: src/settings_translation_file.cpp msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI" -msgstr "" +msgstr "等寬字體的字體大小,其中 1 單位 = 1 像素(96 DPI)" #: 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 "" +"最近聊天文字和聊天提示的字體大小,以磅 (pt) 為單位。\n" +"值為 0 將使用預設字體大小。" #: src/settings_translation_file.cpp msgid "" @@ -3561,6 +3643,10 @@ msgid "" "be\n" "sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32." msgstr "" +"對於無法很好縮放的像素樣式字體,這可以確保使用的字體大小\n" +"使用此字體將始終能被此值(以像素為單位)整除。 例如,\n" +"16 像素高的像素字體應該將其設為 16,因此它只會是\n" +"尺寸為 16、32、48 等,因此請求尺寸為 25 的 mod 將得到 32。" #: src/settings_translation_file.cpp msgid "" @@ -3577,21 +3663,19 @@ msgstr "螢幕截圖的格式。" #: src/settings_translation_file.cpp msgid "Formspec Full-Screen Background Color" -msgstr "" +msgstr "視窗全螢幕背景色" #: src/settings_translation_file.cpp msgid "Formspec Full-Screen Background Opacity" -msgstr "" +msgstr "視窗全螢幕背景不透明度" #: src/settings_translation_file.cpp -#, fuzzy msgid "Formspec full-screen background color (R,G,B)." msgstr "遊戲內聊天視窗背景顏色 (R,G,B)。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Formspec full-screen background opacity (between 0 and 255)." -msgstr "遊戲內聊天視窗背景 alpha 值(不透明度,介於 0 到 255 間)。" +msgstr "窗口全螢幕背景不透明度(0 到 255 之間)。" #: src/settings_translation_file.cpp msgid "Fourth of 4 2D noises that together define hill/mountain range height." @@ -3624,6 +3708,11 @@ msgid "" "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 "" +"客戶端對物件的了解程度,在地圖區塊(16 個節點)中說明。\n" +"\n" +"設定這個大於active_block_range也會導致伺服器\n" +"保持活動物體在該方向的距離\n" +"玩家正在尋找。 (這樣可以避免怪物突然從視野中消失)" #: src/settings_translation_file.cpp msgid "Full screen" @@ -3635,7 +3724,7 @@ msgstr "全螢幕模式。" #: src/settings_translation_file.cpp msgid "GUI" -msgstr "" +msgstr "圖形使用者介面" #: src/settings_translation_file.cpp msgid "GUI scaling" @@ -3650,52 +3739,50 @@ msgid "GUI scaling filter txr2img" msgstr "圖形使用者介面縮放比例過濾器 txr2img" #: src/settings_translation_file.cpp -#, fuzzy msgid "Gamepads" -msgstr "遊戲" +msgstr "遊戲手把" #: src/settings_translation_file.cpp msgid "Global callbacks" msgstr "全域回呼" #: src/settings_translation_file.cpp -#, fuzzy 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 "" -"全域地圖產生屬性。\n" -"在 Mapgen v6 中,「decorations」旗標控制所有除了樹木\n" -"與叢林以外的裝飾,在其他所有的 mapgen 中,這個旗標控制所有裝飾。\n" -"未在旗標字串中指定的旗標將不會自預設值修改。\n" -"以「no」開頭的旗標字串將會用於明確的停用它們。" +"全域地圖生成屬性。\n" +"在 Mapgen v6 中,「裝飾」標誌控制除樹木之外的所有裝飾\n" +"和叢林草,在所有其他地圖生成中,此標誌控制所有裝飾。" #: src/settings_translation_file.cpp msgid "" "Gradient of light curve at maximum light level.\n" "Controls the contrast of the highest light levels." msgstr "" +"最大光照水平下的光曲線梯度。\n" +"控制最高亮度等級的對比。" #: src/settings_translation_file.cpp msgid "" "Gradient of light curve at minimum light level.\n" "Controls the contrast of the lowest light levels." msgstr "" +"最低光照水平下的光曲線梯度。\n" +"控制最低光照水平的對比。" #: src/settings_translation_file.cpp msgid "Graphics" msgstr "圖形" #: src/settings_translation_file.cpp -#, fuzzy msgid "Graphics Effects" -msgstr "圖形" +msgstr "圖形效果" #: src/settings_translation_file.cpp -#, fuzzy msgid "Graphics and Audio" -msgstr "圖形" +msgstr "圖形和音頻" #: src/settings_translation_file.cpp msgid "Gravity" @@ -3710,18 +3797,16 @@ msgid "Ground noise" msgstr "地面雜訊" #: src/settings_translation_file.cpp -#, fuzzy msgid "HTTP mods" -msgstr "HTTP Mod" +msgstr "HTTP mods" #: src/settings_translation_file.cpp msgid "HUD" -msgstr "" +msgstr "HUD" #: src/settings_translation_file.cpp -#, fuzzy msgid "HUD scaling" -msgstr "圖形使用者介面縮放比例" +msgstr "圖形使用者介面縮放" #: src/settings_translation_file.cpp #, fuzzy @@ -3758,9 +3843,8 @@ msgid "Heat noise" msgstr "熱 雜訊" #: src/settings_translation_file.cpp -#, fuzzy msgid "Height component of the initial window size." -msgstr "初始視窗大小的高度組件。" +msgstr "初始視窗大小的高度分量。" #: src/settings_translation_file.cpp msgid "Height noise" @@ -3803,40 +3887,46 @@ msgid "" "Horizontal acceleration in air when jumping or falling,\n" "in nodes per second per second." msgstr "" +"跳躍或墜落時空氣中的水平加速度,\n" +"以每秒節點數為單位。" #: src/settings_translation_file.cpp msgid "" "Horizontal and vertical acceleration in fast mode,\n" "in nodes per second per second." msgstr "" +"快速模式的水平和垂直加速度,\n" +"以每秒節點數為單位。" #: src/settings_translation_file.cpp msgid "" "Horizontal and vertical acceleration on ground or when climbing,\n" "in nodes per second per second." msgstr "" +"行走或攀爬的水平和垂直加速度。\n" +"單位為方塊每二次方秒。" #: src/settings_translation_file.cpp msgid "Hotbar: Enable mouse wheel for selection" -msgstr "" +msgstr "熱鍵欄:啟用滑鼠滾輪進行選擇" #: src/settings_translation_file.cpp msgid "Hotbar: Invert mouse wheel direction" -msgstr "" +msgstr "Hotbar:反轉滑鼠滾輪方向" #: src/settings_translation_file.cpp -#, fuzzy msgid "How deep to make rivers." -msgstr "河流多深" +msgstr "生成的河流多深。" #: src/settings_translation_file.cpp msgid "" "How fast liquid waves will move. Higher = faster.\n" "If negative, liquid waves will move backwards." msgstr "" +"液體波移動的速度有多快。 更高=更快。\n" +"如果為負值,液體波將會向後移動。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "How long the server will wait before unloading unused mapblocks, stated in " "seconds.\n" @@ -3846,16 +3936,16 @@ msgstr "" "較高的值會較平滑,但會使用更多的記憶體。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "How much you are slowed down when moving inside a liquid.\n" "Decrease this to increase liquid resistance to movement." -msgstr "減少此值可增加液體的運動阻力。" +msgstr "" +"當你在液體中移動時,你的速度會減慢多少。\n" +"減少此值可增加液體對運動的阻力。" #: src/settings_translation_file.cpp -#, fuzzy msgid "How wide to make rivers." -msgstr "河流多寬" +msgstr "生成河流多寬。" #: src/settings_translation_file.cpp msgid "Humidity blend noise" @@ -3886,22 +3976,23 @@ msgstr "" "以避免無謂的浪費 CPU 的電力。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n" "enabled." -msgstr "若停用,在飛行與快速模式皆啟用時,「使用」鍵將用於快速飛行。" +msgstr "" +"如果停用,「Aux1」鍵用於快速飛行(如果飛行模式和快速模式同時存在)\n" +"已啟用。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down " "and\n" "descending." -msgstr "若啟用,向下爬與下降將使用「使用」鍵而非「潛行」鍵。" +msgstr "" +"如果啟用,「Aux1」鍵將取代潛行鍵的向下攀爬和\n" +"下降。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "If enabled, account registration is separate from login in the UI.\n" "If disabled, new accounts will be registered automatically when logging in." @@ -3930,11 +4021,10 @@ msgstr "" "只在您知道您在幹嘛時才啟用這個選項。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "If enabled, players cannot join without a password or change theirs to an " "empty password." -msgstr "若啟用,新玩家將無法以空密碼加入。" +msgstr "如果啟用,玩家在沒有密碼的情況下無法加入或將密碼變更為空密碼。" #: src/settings_translation_file.cpp #, fuzzy @@ -3950,14 +4040,13 @@ msgstr "" "不可能看見的內容,而使穿牆模式的效用降低。" #: src/settings_translation_file.cpp -#, fuzzy 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 "" -"若啟用,您可以在您站立的位置(腳與眼睛的高度)放置方塊。當在小區域裡與節點盒" -"一同工作時非常有用。" +"如果啟用,您可以將節點放置在您站立的位置(腳+眼睛水平)。\n" +"這在小區域內使用節點盒時非常有用。" #: src/settings_translation_file.cpp msgid "" @@ -3965,12 +4054,16 @@ msgid "" "limited\n" "to this distance from the player to the node." msgstr "" +"如果啟用了節點範圍的 CSM 限制,則 get_node 呼叫將受到限制\n" +"從玩家到節點的距離。" #: 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 "" +"如果聊天指令的執行時間比指定的時間長\n" +"秒,將時間訊息加入聊天命令訊息中" #: src/settings_translation_file.cpp msgid "" @@ -3979,6 +4072,10 @@ msgid "" "deleting an older debug.txt.1 if it exists.\n" "debug.txt is only moved if this setting is positive." msgstr "" +"如果 debug.txt 檔案大小超過指定的兆位元組數\n" +"此設定開啟時,檔案被移到debug.txt.1,\n" +"刪除較舊的 debug.txt.1(如果存在)。\n" +"僅當此設定為正時,才會移動 debug.txt。" #: src/settings_translation_file.cpp msgid "If this is set, players will always (re)spawn at the given position." @@ -4002,7 +4099,7 @@ msgstr "遊戲中的聊天終端機高度,介於 0.1 (10%) 至 1.0 (100%) 間 #: src/settings_translation_file.cpp msgid "Initial vertical speed when jumping, in nodes per second." -msgstr "" +msgstr "跳躍時的初始垂直速度,以每秒節點為單位。" #: src/settings_translation_file.cpp msgid "" @@ -4013,7 +4110,6 @@ msgstr "" "這通常僅被核心/內建貢獻者需要" #: src/settings_translation_file.cpp -#, fuzzy msgid "Instrument chat commands on registration." msgstr "分析登錄的聊天指令。" @@ -4044,9 +4140,8 @@ msgid "Interval of saving important changes in the world, stated in seconds." msgstr "儲存世界中的重要變更的間隔,以秒計。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Interval of sending time of day to clients, stated in seconds." -msgstr "傳送當日時間至用戶端的間隔。" +msgstr "向客戶端發送一天中的時間間隔,以秒為單位。" #: src/settings_translation_file.cpp msgid "Inventory items animations" @@ -4058,21 +4153,19 @@ msgstr "滑鼠反相" #: src/settings_translation_file.cpp msgid "Invert mouse wheel (scroll) direction for item selection in hotbar." -msgstr "" +msgstr "反轉滑鼠滾輪(滾動)方向以在熱欄中選擇項目。" #: src/settings_translation_file.cpp msgid "Invert vertical mouse movement." msgstr "反轉滑鼠移動的方向。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Italic font path" -msgstr "等寬字型路徑" +msgstr "斜體字體路徑" #: src/settings_translation_file.cpp -#, fuzzy msgid "Italic monospace font path" -msgstr "等寬字型路徑" +msgstr "斜體等寬字體路徑" #: src/settings_translation_file.cpp msgid "Item entity TTL" @@ -4089,6 +4182,10 @@ msgid "" "increases processing load.\n" "At iterations = 20 this mapgen has a similar load to mapgen V7." msgstr "" +"遞歸函數的迭代。\n" +"增加此值會增加精細細節的數量,但也會增加\n" +"增加處理負荷。\n" +"在迭代次數 = 20 時,此 mapgen 具有與 mapgen V7 類似的負載。" #: src/settings_translation_file.cpp msgid "Joystick ID" @@ -4099,21 +4196,18 @@ msgid "Joystick button repetition interval" msgstr "搖桿按鈕重覆間隔" #: src/settings_translation_file.cpp -#, fuzzy msgid "Joystick dead zone" -msgstr "搖桿類型" +msgstr "搖桿死區" #: src/settings_translation_file.cpp msgid "Joystick frustum sensitivity" msgstr "搖桿靈敏度" #: src/settings_translation_file.cpp -#, fuzzy msgid "Joystick type" msgstr "搖桿類型" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Julia set only.\n" "W component of hypercomplex constant.\n" @@ -4121,61 +4215,63 @@ msgid "" "Has no effect on 3D fractals.\n" "Range roughly -2 to 2." msgstr "" -"僅朱利亞集合:可交換超複數的 W 元素決定了 朱利亞形狀。\n" -"在 3D 碎形上沒有效果。\n" -"範圍約在 -2 至 2 間。" +"僅朱莉婭集合。\n" +"超複數常數的W成分。\n" +"改變分形圖形形狀。\n" +"對3D分形無影響。\n" +"大致在-2到2之間。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Julia set only.\n" "X component of hypercomplex constant.\n" "Alters the shape of the fractal.\n" "Range roughly -2 to 2." msgstr "" -"僅朱利亞集合:可交換超複數的 X 元素決定了 朱利亞形狀。\n" -"在 3D 碎形上沒有效果。\n" -"範圍約在 -2 至 2 間。" +"朱莉婭只設置。\n" +"超複常數的 X 分量。\n" +"改變分形的形狀。\n" +"範圍大致為 -2 到 2。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Julia set only.\n" "Y component of hypercomplex constant.\n" "Alters the shape of the fractal.\n" "Range roughly -2 to 2." msgstr "" -"僅朱利亞集合:可交換超複數的 Y 元素決定了 朱利亞形狀。\n" -"在 3D 碎形上沒有效果。\n" -"範圍約在 -2 至 2 間。" +"朱莉婭只設置。\n" +"超複常數的 X 分量。\n" +"改變分形的形狀。\n" +"範圍大致為 -2 到 2。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Julia set only.\n" "Z component of hypercomplex constant.\n" "Alters the shape of the fractal.\n" "Range roughly -2 to 2." msgstr "" -"僅朱利亞集合:可交換超複數的 Z 元素決定了 朱利亞形狀。\n" -"在 3D 碎形上沒有效果。\n" -"範圍約在 -2 至 2 間。" +"朱莉婭只設置。\n" +"超複常數的 Z 分量。\n" +"改變分形的形狀。\n" +"範圍大致為 -2 到 2。" #: src/settings_translation_file.cpp msgid "Julia w" -msgstr "Julia w" +msgstr "朱莉婭w" #: src/settings_translation_file.cpp msgid "Julia x" -msgstr "Julia x" +msgstr "朱莉婭x" #: src/settings_translation_file.cpp msgid "Julia y" -msgstr "Julia y" +msgstr "茱莉亞y" #: src/settings_translation_file.cpp msgid "Julia z" -msgstr "Julia z" +msgstr "茱莉亞z" #: src/settings_translation_file.cpp msgid "Jumping speed" @@ -4183,11 +4279,11 @@ msgstr "跳躍速度" #: src/settings_translation_file.cpp msgid "Keyboard and Mouse" -msgstr "" +msgstr "鍵盤和滑鼠" #: src/settings_translation_file.cpp msgid "Kick players who sent more than X messages per 10 seconds." -msgstr "" +msgstr "踢出每 10 秒發送超過 X 則訊息的玩家。" #: src/settings_translation_file.cpp msgid "Lake steepness" @@ -4207,15 +4303,15 @@ 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" @@ -4236,36 +4332,34 @@ msgstr "" #: src/settings_translation_file.cpp #, fuzzy msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network, stated in seconds." -msgstr "伺服器 tick 的長度與相關物件的間隔通常透過網路更新。" +"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" +"網絡,以秒為單位。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Length of liquid waves." -msgstr "波動的水速度" +msgstr "波動的水速度。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Length of time between Active Block Modifier (ABM) execution cycles, stated " "in seconds." -msgstr "在 ABM 執行循環間的時間長度" +msgstr "在 ABM 執行循環間的時間長度。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Length of time between NodeTimer execution cycles, stated in seconds." -msgstr "在 Node 計時器執行循環間的時間長度" +msgstr "在 Node 計時器執行循環間的時間長度。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Length of time between active block management cycles, stated in seconds." -msgstr "在活躍方塊管理循環的時間中間" +msgstr "在活躍方塊管理循環的時間中間。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Level of logging to be written to debug.txt:\n" "- (no logging)\n" @@ -4277,43 +4371,43 @@ msgid "" "- verbose\n" "- trace" msgstr "" -"要被寫入到 debug.txt 的紀錄等級:\n" -"- (不記錄)\n" -"- none(無等級的訊息)\n" -"- error\n" -"- warning\n" -"- action\n" -"- info\n" -"- verbose" +"要寫入 debug.txt 的日誌記錄等級:\n" +"- <無>(不記錄)\n" +"- 無(沒有等級的消息)\n" +"- 錯誤\n" +"- 警告\n" +"- 行動\n" +"- 資訊\n" +"- 详细\n" +"- 追逐" #: src/settings_translation_file.cpp msgid "Light curve boost" -msgstr "" +msgstr "亮度曲線提升" #: src/settings_translation_file.cpp msgid "Light curve boost center" -msgstr "" +msgstr "亮度曲線提升中心" #: src/settings_translation_file.cpp msgid "Light curve boost spread" -msgstr "" +msgstr "亮度曲線提升點差" #: src/settings_translation_file.cpp msgid "Light curve gamma" -msgstr "" +msgstr "亮度曲線伽瑪" #: src/settings_translation_file.cpp msgid "Light curve high gradient" -msgstr "" +msgstr "亮度曲線高梯度" #: src/settings_translation_file.cpp msgid "Light curve low gradient" -msgstr "" +msgstr "亮度曲線低梯度" #: src/settings_translation_file.cpp -#, fuzzy msgid "Lighting" -msgstr "平滑光線" +msgstr "光照" #: src/settings_translation_file.cpp msgid "" @@ -4356,7 +4450,6 @@ msgid "Liquid queue purge time" msgstr "液體佇列清除時間" #: src/settings_translation_file.cpp -#, fuzzy msgid "Liquid sinking" msgstr "液體下沉" @@ -4392,15 +4485,17 @@ msgid "" "from the bright objects.\n" "Range: from 0.1 to 8, default: 1" msgstr "" +"控制暈效果傳播多遠的邏輯值\n" +"來自明亮的物體。\n" +"範圍:0.1 到 8,預設值:1" #: src/settings_translation_file.cpp msgid "Lower Y limit of dungeons." -msgstr "" +msgstr "地下城的 Y 下限。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Lower Y limit of floatlands." -msgstr "大型偽隨機洞穴的 Y 上限。" +msgstr "懸空島的 Y 下限。" #: src/settings_translation_file.cpp msgid "Main menu script" @@ -4411,17 +4506,13 @@ msgid "" "Make fog and sky colors depend on daytime (dawn/sunset) and view direction." msgstr "讓霧與天空的顏色取決於時間(黎明/日落)與觀看方向。" -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "讓所有的液體不透明" - #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" -msgstr "" +msgstr "磁碟儲存的映射壓縮級別" #: src/settings_translation_file.cpp msgid "Map Compression Level for Network Transfer" -msgstr "" +msgstr "網路傳輸的映射壓縮級別" #: src/settings_translation_file.cpp msgid "Map directory" @@ -4429,30 +4520,25 @@ msgstr "地圖目錄" #: src/settings_translation_file.cpp msgid "Map generation attributes specific to Mapgen Carpathian." -msgstr "" +msgstr "針對Carpathian地圖產生器的屬性。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Map generation attributes specific to Mapgen Flat.\n" "Occasional lakes and hills can be added to the flat world." msgstr "" -"專用於 Mapgen flat 的地圖生成屬性。\n" -"可能會有少數的湖泊或是丘陵會在扁平的世界中生成。\n" -"未在旗標字串中指定的旗標將不會自預設值修改。\n" -"以「no」開頭的旗標字串將會用於明確的停用它們。" +"Flat地圖 特有的地圖生成屬性。\n" +"偶爾的湖泊和山丘可以添加到平坦的世界。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Map generation attributes specific to Mapgen Fractal.\n" "'terrain' enables the generation of non-fractal terrain:\n" "ocean, islands and underground." msgstr "" -"專用於 Mapgen flat 的地圖生成屬性。\n" -"可能會有少數的湖泊或是丘陵會在扁平的世界中生成。\n" -"未在旗標字串中指定的旗標將不會自預設值修改。\n" -"以「no」開頭的旗標字串將會用於明確的停用它們。" +"Mapgen Fractal 特有的地圖生成屬性。\n" +"'terrain' 能夠產生非分形地形:\n" +"海洋、島嶼和地下。" #: src/settings_translation_file.cpp msgid "" @@ -4463,10 +4549,16 @@ msgid "" "to become shallower and occasionally dry.\n" "'altitude_dry': Reduces humidity with altitude." msgstr "" +"針對Valley地圖產生器的屬性。\n" +"'altitude_chill':隨海拔高度減少熱量。\n" +"'humid_rivers':增加河流周圍的濕度。\n" +"'vary_river_depth':如果啟用,高熱量低濕度導致河流\n" +"變淺甚至乾枯。\n" +"'altitude_dry':隨海拔高度減少濕度。" #: src/settings_translation_file.cpp msgid "Map generation attributes specific to Mapgen v5." -msgstr "" +msgstr "Mapgen v5 特有的地圖生成屬性。" #: src/settings_translation_file.cpp #, fuzzy @@ -4474,27 +4566,26 @@ 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." +"the 'jungles' flag is ignored.\n" +"The 'temples' flag disables generation of desert temples. Normal dungeons " +"will appear instead." msgstr "" -"專用於 Mapgen v6 的地圖生成屬性。\n" -"'snowbiomes' 旗標啟用了五個新的生態系。\n" -"當新的生態系啟用時,叢林生態系會自動啟用,\n" -"而 'jungles' 會被忽略。\n" -"未在旗標字串中指定的旗標將不會自預設值修改。\n" -"以「no」開頭的旗標字串將會用於明確的停用它們。" +"Mapgen v6 特有的地圖生成屬性。\n" +"「雪生物群落」標誌啟用新的 5 個生物群落系統。\n" +"當「雪生物群落」標誌啟用時,叢林會自動啟用並且\n" +"'jungles' 標誌被忽略。" #: src/settings_translation_file.cpp -#, fuzzy 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 "" -"專用於 Mapgen flat 的地圖生成屬性。\n" -"可能會有少數的湖泊或是丘陵會在扁平的世界中生成。\n" -"未在旗標字串中指定的旗標將不會自預設值修改。\n" -"以「no」開頭的旗標字串將會用於明確的停用它們。" +"針對v7地圖產生器的屬性。\n" +"'ridges':启用河流。\n" +"'floatlands':漂浮於大氣中的陸塊。\n" +"'caverns':地下深處的巨大洞穴。" #: src/settings_translation_file.cpp msgid "Map generation limit" @@ -4505,9 +4596,8 @@ msgid "Map save interval" msgstr "地圖儲存間隔" #: src/settings_translation_file.cpp -#, fuzzy msgid "Map shadows update frames" -msgstr "液體更新 tick" +msgstr "地圖陰影更新幀" #: src/settings_translation_file.cpp msgid "Mapblock limit" @@ -4522,11 +4612,6 @@ msgstr "地圖區塊網格生成延遲" msgid "Mapblock mesh generation threads" msgstr "地圖區塊網格生成延遲" -#: src/settings_translation_file.cpp -#, fuzzy -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "地圖區塊網格生成器的地圖區塊快取大小 MB" - #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" msgstr "地圖區塊卸除逾時" @@ -4542,17 +4627,14 @@ msgid "Mapgen Carpathian specific flags" msgstr "Mapgen flat 特別旗標" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen Flat" -msgstr "Mapgen flat" +msgstr "地圖產生器Flat" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen Flat specific flags" -msgstr "Mapgen flat 特別旗標" +msgstr "地圖產生器平地標籤" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen Fractal" msgstr "地圖產生器分形" @@ -4562,9 +4644,8 @@ msgid "Mapgen Fractal specific flags" msgstr "Mapgen flat 特別旗標" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen V5" -msgstr "Mapgen v5" +msgstr "地圖產生器 v5" #: src/settings_translation_file.cpp #, fuzzy @@ -4572,17 +4653,14 @@ msgid "Mapgen V5 specific flags" msgstr "Mapgen v5 特別旗標" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen V6" -msgstr "Mapgen v6" +msgstr "地圖產生器 v6" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen V6 specific flags" -msgstr "Mapgen v6 特別旗標" +msgstr "地圖產生器 v6 標籤" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen V7" msgstr "地圖產生器 v7" @@ -4633,13 +4711,12 @@ msgid "Maximum FPS" msgstr "最高 FPS" #: src/settings_translation_file.cpp -#, fuzzy msgid "Maximum FPS when the window is not focused, or when the game is paused." -msgstr "當遊戲暫停時的最高 FPS。" +msgstr "視窗未對焦或遊戲暫停時的最大 FPS。" #: src/settings_translation_file.cpp msgid "Maximum distance to render shadows." -msgstr "" +msgstr "渲染陰影的最大距離。" #: src/settings_translation_file.cpp msgid "Maximum forceloaded blocks" @@ -4651,17 +4728,19 @@ msgstr "快捷列最大寬度" #: src/settings_translation_file.cpp msgid "Maximum limit of random number of large caves per mapchunk." -msgstr "" +msgstr "每個地圖區塊的大型洞穴隨機數量的最大限制。" #: src/settings_translation_file.cpp msgid "Maximum limit of random number of small caves per mapchunk." -msgstr "" +msgstr "每個地圖區塊的小洞穴隨機數量的最大限制。" #: src/settings_translation_file.cpp msgid "" "Maximum liquid resistance. Controls deceleration when entering liquid at\n" "high speed." msgstr "" +"最大液體阻力。 控制進入液體時的減速度\n" +"高速。" #: src/settings_translation_file.cpp msgid "" @@ -4669,19 +4748,21 @@ msgid "" "The maximum total count is calculated dynamically:\n" "max_total = ceil((#clients + max_users) * per_client / 4)" msgstr "" +"每個客戶端同時發送的最大區塊數。\n" +"最大總計數是動態計算的:\n" +"max_total = ceil((#clients + max_users) * per_client / 4)" #: src/settings_translation_file.cpp msgid "Maximum number of blocks that can be queued for loading." msgstr "可被放進佇列內等待載入的最大區塊數。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Maximum number of blocks to be queued that are to be generated.\n" "This limit is enforced per player." msgstr "" -"可被放進佇列內等待生成的最大區塊數。\n" -"將其設定留空則會自動選擇適當的值。" +"要產生的要排隊的最大區塊數。\n" +"此限制是針對每個玩家強制執行的。" #: src/settings_translation_file.cpp #, fuzzy @@ -4698,6 +4779,8 @@ msgid "" "be queued.\n" "This should be lower than curl_parallel_limit." msgstr "" +"最大同時下載數。 超過此限制的下載將排隊。\n" +"這應該低於curl_parallel_limit。" #: src/settings_translation_file.cpp msgid "" @@ -4756,6 +4839,8 @@ msgid "" "Maximum size of the outgoing chat queue.\n" "0 to disable queueing and -1 to make the queue size unlimited." msgstr "" +"傳出聊天佇列的最大大小。\n" +"0 禁用佇列,-1 使隊列大小不受限制。" #: src/settings_translation_file.cpp #, fuzzy @@ -4768,7 +4853,7 @@ msgstr "檔案下載(例如下載 mod)可花費的最大時間,以毫秒 msgid "" "Maximum time an interactive request (e.g. server list fetch) may take, " "stated in milliseconds." -msgstr "" +msgstr "交互請求(例如伺服器清單取得)可能花費的最長時間,以毫秒為單位。" #: src/settings_translation_file.cpp msgid "Maximum users" @@ -4792,19 +4877,24 @@ msgstr "用於突顯物件的方法。" #: src/settings_translation_file.cpp msgid "Minimal level of logging to be written to chat." -msgstr "" +msgstr "要寫入聊天的最低層級的日誌記錄。" #: src/settings_translation_file.cpp msgid "Minimap scan height" msgstr "迷你地圖掃描高度" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Minimum dig repetition interval" +msgstr "放置重複間隔" + #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." -msgstr "" +msgstr "每個地圖區塊的大型洞穴隨機數量的最小限制。" #: src/settings_translation_file.cpp msgid "Minimum limit of random number of small caves per mapchunk." -msgstr "" +msgstr "每個地圖區塊的小洞穴隨機數量的最小限制。" #: src/settings_translation_file.cpp msgid "Mipmapping" @@ -4812,21 +4902,19 @@ msgstr "映射貼圖" #: src/settings_translation_file.cpp msgid "Miscellaneous" -msgstr "" +msgstr "各種的" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mod Profiler" -msgstr "分析器" +msgstr "模組分析器" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mod Security" -msgstr "安全" +msgstr "模組安全" #: src/settings_translation_file.cpp msgid "Mod channels" -msgstr "" +msgstr "模組頻道" #: src/settings_translation_file.cpp #, fuzzy @@ -4871,6 +4959,10 @@ msgstr "滑鼠靈敏度" msgid "Mouse sensitivity multiplier." msgstr "滑鼠靈敏度倍數。" +#: src/settings_translation_file.cpp +msgid "Movement threshold" +msgstr "移動閾值" + #: src/settings_translation_file.cpp msgid "Mud noise" msgstr "泥土雜訊" @@ -4885,7 +4977,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Mute sound" -msgstr "" +msgstr "靜音" #: src/settings_translation_file.cpp msgid "" @@ -4894,6 +4986,10 @@ msgid "" "Current mapgens in a highly unstable state:\n" "- The optional floatlands of v7 (disabled by default)." msgstr "" +"建立新世界時要使用的地圖產生器的名稱。\n" +"在主選單中創建一個世界將覆蓋它。\n" +"目前mapgens處於高度不穩定狀態:\n" +"- v7 的可選浮動區域(預設為停用)。" #: src/settings_translation_file.cpp msgid "" @@ -4919,7 +5015,6 @@ msgstr "" "當從主選單啟動時,這個值將會被覆寫。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Networking" msgstr "網路" @@ -4961,6 +5056,16 @@ msgid "" "processes, especially in singleplayer and/or when running Lua code in\n" "'on_generated'. For many users the optimum setting may be '1'." msgstr "" +"要使用的emerge 執行緒數。\n" +"值 0:\n" +"- 自動選擇。 出現的線程數將為\n" +"-“處理器數量 - 2”,下限為 1。\n" +"任何其他值:\n" +"- 指定emerge執行緒數,下限為1。\n" +"警告:增加emerge線程的數量會增加引擎mapgen\n" +"速度,但這可能會幹擾其他內容,從而損害遊戲效能\n" +"進程,尤其是在單人遊戲中和/或在以下環境中運行 Lua 程式碼時\n" +"'on_generate'。 對於許多用戶來說,最佳設定可能是“1”。" #: src/settings_translation_file.cpp #, fuzzy @@ -4974,9 +5079,8 @@ msgstr "" "記憶體耗費(根據經驗,4096=100MB)。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Number of messages a player may send per 10 seconds." -msgstr "玩家每 10 秒能傳送的訊息量" +msgstr "玩家每 10 秒能傳送的訊息量。" #: src/settings_translation_file.cpp msgid "" @@ -4984,24 +5088,22 @@ msgid "" "Value of 0 (default) will let Minetest autodetect the number of available " "threads." msgstr "" +"用於網格產生的線程數。\n" +"值 0(預設)將讓 Minetest 自動偵測可用執行緒的數量。" #: src/settings_translation_file.cpp msgid "Occlusion Culler" -msgstr "" +msgstr "剔除閉塞" #: src/settings_translation_file.cpp #, fuzzy msgid "Occlusion Culling" msgstr "伺服器端遮擋剔除" -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "不透明液體" - #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." -msgstr "" +msgstr "預設字體後面的陰影的不透明度 (alpha),介於 0 到 255 之間。" #: src/settings_translation_file.cpp msgid "" @@ -5009,10 +5111,16 @@ msgid "" "formspec is\n" "open." msgstr "" +"當視窗失去焦點時開啟暫停選單。 如果表單規格是則不暫停\n" +"打開。" + +#: src/settings_translation_file.cpp +msgid "OpenGL debug" +msgstr "OpenGL 偵錯" #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." -msgstr "" +msgstr "聊天網站連結顏色的可選覆蓋。" #: src/settings_translation_file.cpp msgid "" @@ -5020,12 +5128,16 @@ msgid "" "This font will be used for certain languages or if the default font is " "unavailable." msgstr "" +"後備字體的路徑。 必須是 TrueType 字型。\n" +"此字體將用於某些語言或預設字體不可用時。" #: 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 "" +"儲存螢幕截圖的路徑。 可以是絕對路徑或相對路徑。\n" +"如果該資料夾尚不存在,則會建立該資料夾。" #: src/settings_translation_file.cpp msgid "" @@ -5038,34 +5150,36 @@ 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 "" +"預設字體的路徑。 必須是 TrueType 字型。\n" +"如果無法載入字體,將使用後備字體。" #: 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 "" +"等寬字體的路徑。 必須是 TrueType 字型。\n" +"該字體用於例如 控制台和分析器螢幕。" #: src/settings_translation_file.cpp msgid "Pause on lost window focus" -msgstr "" +msgstr "失去視窗焦點時暫停" #: src/settings_translation_file.cpp msgid "Per-player limit of queued blocks load from disk" -msgstr "" +msgstr "每個玩家從磁碟加載的排隊塊限制" #: src/settings_translation_file.cpp -#, fuzzy msgid "Per-player limit of queued blocks to generate" -msgstr "要生成的出現佇列的限制" +msgstr "每個玩家產生的排隊區塊的限制" #: src/settings_translation_file.cpp msgid "Physics" msgstr "物理" #: src/settings_translation_file.cpp -#, fuzzy msgid "Place repetition interval" -msgstr "右鍵點擊重覆間隔" +msgstr "放置重複間隔" #: src/settings_translation_file.cpp msgid "Player transfer distance" @@ -5078,7 +5192,7 @@ msgstr "雙線性過濾器" #: src/settings_translation_file.cpp msgid "Post Processing" -msgstr "" +msgstr "後製處理" #: src/settings_translation_file.cpp msgid "" @@ -5087,17 +5201,21 @@ msgid "" "Enable this when you dig or place too often by accident.\n" "On touchscreens, this only affects digging." msgstr "" +"防止按住對應按鈕時重複挖掘和放置。\n" +"當您意外地頻繁挖掘或放置時啟用此功能。\n" +"在觸控螢幕上,這只會影響挖掘。" #: src/settings_translation_file.cpp msgid "Prevent mods from doing insecure things like running shell commands." msgstr "避免 mod 做出不安全的舉動,像是執行 shell 指令等。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Print the engine's profiling data in regular intervals (in seconds).\n" "0 = disable. Useful for developers." -msgstr "引擎性能資料印出間隔的秒數。0 = 停用。對開發者有用。" +msgstr "" +"定期(以秒為單位)列印引擎的分析數據。\n" +"0 = 禁用。 對開發人員有用。" #: src/settings_translation_file.cpp msgid "Privileges that players with basic_privs can grant" @@ -5109,7 +5227,7 @@ msgstr "分析器" #: src/settings_translation_file.cpp msgid "Prometheus listener address" -msgstr "" +msgstr "Prometheus 監聽器位址" #: src/settings_translation_file.cpp msgid "" @@ -5118,9 +5236,21 @@ msgid "" "enable metrics listener for Prometheus on that address.\n" "Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" +"Prometheus 監聽器地址。\n" +"如果Minetest在編輯時啓用了ENABLE_PROMETHEUS選項,\n" +"在該地址上為 Prometheus 啓用指標偵聽器。\n" +"可以從 http://127.0.0.1:30000/metrics 獲取指標" #: src/settings_translation_file.cpp msgid "Proportion of large caves that contain liquid." +msgstr "含有液體的大型洞穴的比例。" + +#: src/settings_translation_file.cpp +msgid "Protocol version minimum" +msgstr "協定版本不符合" + +#: src/settings_translation_file.cpp +msgid "Punch gesture" msgstr "" #: src/settings_translation_file.cpp @@ -5133,25 +5263,26 @@ msgstr "" "大於 26 的值將會在雲的角落有銳角的產生。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Raises terrain to make valleys around the rivers." -msgstr "提升地形以讓山谷在河流周圍" +msgstr "提升地形以讓山谷在河流周圍。" #: src/settings_translation_file.cpp msgid "Random input" msgstr "隨機輸入" +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "依隨機順序載入 mod" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "最近聊天訊息" #: src/settings_translation_file.cpp -#, fuzzy msgid "Regular font path" -msgstr "報告路徑" +msgstr "常規字型路徑" #: src/settings_translation_file.cpp -#, fuzzy msgid "Remember screen size" msgstr "自動儲存視窗大小" @@ -5188,6 +5319,16 @@ msgid "" "csm_restriction_noderange)\n" "READ_PLAYERINFO: 32 (disable get_player_names call client-side)" msgstr "" +"在伺服器上限制一些客戶端上的功能。\n" +"將下面的標誌位結合來限制客戶端功能,設定為0為\n" +"無限制:\n" +"LOAD_CLIENT_MODS:1(禁止載入客戶端 mod)\n" +"CHAT_MESSAGES:2(禁止客戶端呼叫 send_chat_message)\n" +"READ_ITEMDEFS:4(禁止客戶端呼叫 get_item_def)\n" +"READ_NODEDEFS:8(禁止客戶端呼叫 get_node_def)\n" +"LOOKUP_NODES_LIMIT:16(禁止客戶端 get_node 呼叫限制為\n" +"csm_restriction_noderange)\n" +"READ_PLAYERINFO:32(禁止客戶端呼叫 get_player_names)" #: src/settings_translation_file.cpp msgid "Ridge mountain spread noise" @@ -5206,17 +5347,14 @@ msgid "Ridged mountain size noise" msgstr "山脊大小雜訊" #: src/settings_translation_file.cpp -#, fuzzy msgid "River channel depth" msgstr "河流深度" #: src/settings_translation_file.cpp -#, fuzzy msgid "River channel width" -msgstr "河流深度" +msgstr "河流寬度" #: src/settings_translation_file.cpp -#, fuzzy msgid "River depth" msgstr "河流深度" @@ -5225,14 +5363,12 @@ msgid "River noise" msgstr "河流雜訊" #: src/settings_translation_file.cpp -#, fuzzy msgid "River size" msgstr "河流大小" #: src/settings_translation_file.cpp -#, fuzzy msgid "River valley width" -msgstr "河流深度" +msgstr "河谷寬度" #: src/settings_translation_file.cpp msgid "Rollback recording" @@ -5248,7 +5384,7 @@ msgstr "波狀丘陵地展開雜訊" #: src/settings_translation_file.cpp msgid "Safe digging and placing" -msgstr "" +msgstr "安全挖掘和放置" #: src/settings_translation_file.cpp msgid "Sandy beaches occur when np_beach exceeds this value." @@ -5266,13 +5402,16 @@ msgid "" "is maximized is stored in window_maximized.\n" "(Autosaving window_maximized only works if compiled with SDL.)" msgstr "" +"修改時自動儲存視窗大小。\n" +"如果為 true,則螢幕尺寸會儲存在 screen_w 和 screen_h 中,以及視窗是否\n" +"最大化儲存在window_maximized中。\n" +"(自動儲存 window_maximized 僅在使用 SDL 編譯時才有效。)" #: src/settings_translation_file.cpp msgid "Saving map received from server" msgstr "儲存從伺服器接收到的地圖" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Scale GUI by a user specified value.\n" "Use a nearest-neighbor-anti-alias filter to scale the GUI.\n" @@ -5280,16 +5419,15 @@ msgid "" "pixels when scaling down, at the cost of blurring some\n" "edge pixels when images are scaled by non-integer sizes." msgstr "" -"由使用者指定一個值來作為放大圖形使用者介面的比例。\n" -"使用最近相鄰與反鋸齒過濾器以放大圖形使用者介面。\n" -"這將可以讓一些粗糙的邊緣變得較圓滑,並當\n" -"比例縮小時會混合像素,代價是在模糊一些\n" -"邊緣的像素時會以非整數的大小縮放。" +"依使用者指定的值縮放 GUI。\n" +"使用最近鄰抗混疊過濾器來縮放 GUI。\n" +"這將平滑一些粗糙的邊緣,並混合\n" +"縮小時的像素,代價是模糊一些\n" +"當影像以非整數大小縮放時的邊緣像素。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Screen" -msgstr "螢幕:" +msgstr "螢幕" #: src/settings_translation_file.cpp msgid "Screen height" @@ -5322,9 +5460,8 @@ msgstr "" "使用 0 來使用預設品質。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Screenshots" -msgstr "螢幕擷取" +msgstr "螢幕截圖" #: src/settings_translation_file.cpp msgid "Seabed noise" @@ -5339,18 +5476,18 @@ msgid "Second of two 3D noises that together define tunnels." msgstr "二之二 一同定義隧道的 3D 雜訊。" #: src/settings_translation_file.cpp -#, fuzzy msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous" -msgstr "請見 http://www.sqlite.org/pragma.html#pragma_synchronous" +msgstr "請見 https://www.sqlite.org/pragma.html#pragma_synchronous" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Select the antialiasing method to apply.\n" "\n" "* None - No antialiasing (default)\n" "\n" -"* FSAA - Hardware-provided full-screen antialiasing (incompatible with " -"shaders)\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" @@ -5364,6 +5501,22 @@ 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 "" +"選擇要應用的抗鋸齒方法。\n" +"\n" +"* 無 - 無抗鋸齒(預設)\n" +"\n" +"* FSAA - 硬體提供的全螢幕抗鋸齒(與著色器不相容)\n" +"又稱多樣本抗鋸齒 (MSAA)\n" +"平滑塊邊緣,但不影響紋理的內部。\n" +"需要重新啟動才能變更此選項。\n" +"\n" +"* FXAA - 快速近似抗鋸齒(需著色器)\n" +"應用後處理濾鏡來偵測和平滑高對比度邊緣。\n" +"提供速度和影像品質之間的平衡。\n" +"\n" +"* SSAA - 超級採樣抗鋸齒(需要著色器)\n" +"渲染場景的更高解析度影像,然後按比例縮小以減少\n" +"混疊效應。 這是最慢且最準確的方法。" #: src/settings_translation_file.cpp msgid "Selection box border color (R,G,B)." @@ -5421,19 +5574,16 @@ msgstr "" "18 = 4D \"Mandelbulb\" julia set." #: src/settings_translation_file.cpp -#, fuzzy msgid "Server" -msgstr "伺服器 URL" +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" @@ -5456,23 +5606,20 @@ msgid "Server port" msgstr "伺服器埠" #: src/settings_translation_file.cpp -#, fuzzy 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" msgstr "伺服器清單 URL" #: src/settings_translation_file.cpp -#, fuzzy msgid "Serverlist and MOTD" -msgstr "伺服器清單 URL" +msgstr "伺服器列表和 MOTD" #: src/settings_translation_file.cpp msgid "Serverlist file" @@ -5484,6 +5631,9 @@ msgid "" "Games may change orbit tilt via API.\n" "Value of 0 means no tilt / vertical orbit." msgstr "" +"設定太陽/月球軌道的預設傾斜度(以度為單位)。\n" +"遊戲可能會透過 API 改變軌道傾斜度。\n" +"0 值表示無傾斜/垂直軌道。" #: src/settings_translation_file.cpp msgid "" @@ -5491,20 +5641,22 @@ msgid "" "Value of 0.0 (default) means no exposure compensation.\n" "Range: from -1 to 1.0" msgstr "" +"以 EV 單位設定曝光補償。\n" +"值 0.0(預設)表示無曝光補償。\n" +"範圍:從-1到1.0" #: src/settings_translation_file.cpp msgid "" -"Set the language. Leave empty to use the system language.\n" +"Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" -"設定語言。留空以使用系統語言。\n" -"變更後必須重新啟動以使其生效。" +"設定語言。預設情況下,使用系統語言。\n" +"變更後需要重新啟動。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Set the maximum length of a chat message (in characters) sent by clients." -msgstr "設定用戶端傳送之聊天訊息的最大字元長度。" +msgstr "設定客戶端發送的聊天訊息的最大長度(以字元為單位)。" #: src/settings_translation_file.cpp msgid "" @@ -5512,6 +5664,9 @@ msgid "" "Adjusts the intensity of in-game dynamic shadows.\n" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" +"設定陰影強度伽瑪。\n" +"調整遊戲中動態陰影的強度。\n" +"較低的值意味著較淺的陰影,較高的值意味著較暗的陰影。" #: src/settings_translation_file.cpp msgid "" @@ -5519,40 +5674,37 @@ msgid "" "Lower values mean sharper shadows, bigger values mean softer shadows.\n" "Minimum value: 1.0; maximum value: 15.0" msgstr "" +"設定軟陰影半徑大小。\n" +"較低的值意味著更清晰的陰影,更大的值意味著更柔和的陰影。\n" +"最小值:1.0; 最大值:15.0" #: src/settings_translation_file.cpp -#, fuzzy msgid "Set to true to enable Shadow Mapping." -msgstr "" -"設定為真以啟用擺動的樹葉。\n" -"必須同時啟用著色器。" +msgstr "設定為 true 以啟用陰影貼圖。" #: src/settings_translation_file.cpp msgid "" "Set to true to enable bloom effect.\n" "Bright colors will bleed over the neighboring objects." msgstr "" +"設定為 true 以啟用光暈效果。\n" +"明亮的顏色會滲透到鄰近的物體上。" + +#: src/settings_translation_file.cpp +msgid "Set to true to enable volumetric lighting effect (a.k.a. \"Godrays\")." +msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Set to true to enable waving leaves." -msgstr "" -"設定為真以啟用擺動的樹葉。\n" -"必須同時啟用著色器。" +msgstr "設定為 true 以啟用揮舞的葉子。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Set to true to enable waving liquids (like water)." -msgstr "" -"設定為真以啟用波動的水。\n" -"必須同時啟用著色器。" +msgstr "設定為 true 以啟用波動液體(如水)。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Set to true to enable waving plants." -msgstr "" -"設定為真以啟用擺動的植物。\n" -"必須同時啟用著色器。" +msgstr "設定為 true 以啟用波浪植物。" #: src/settings_translation_file.cpp msgid "" @@ -5561,6 +5713,10 @@ msgid "" "top-left - processed base image, top-right - final image\n" "bottom-left - raw base image, bottom-right - bloom texture." msgstr "" +"設定為 true 以渲染光暈效果的調試細分。\n" +"在調試模式下,螢幕分為 4 個象限:\n" +"左上 - 處理後的基礎影像,右上 - 最終影像\n" +"左下角 - 原始基礎影像,右下角 - 綻放紋理。" #: src/settings_translation_file.cpp msgid "" @@ -5568,6 +5724,9 @@ msgid "" "On false, 16 bits texture will be used.\n" "This can cause much more artifacts in the shadow." msgstr "" +"將陰影紋理品質設定為 32 位元。\n" +"如果為 false,將使用 16 位元紋理。\n" +"這可能會在陰影中產生更多偽影。" #: src/settings_translation_file.cpp msgid "Shader path" @@ -5578,44 +5737,39 @@ msgid "Shaders" msgstr "著色器" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" -"cards.\n" -"This only works with the OpenGL video backend." +"cards." msgstr "" -"著色器讓您可以有進階視覺效果並可能會在某些顯示卡上增強效能。\n" -"這僅在 OpenGL 視訊後端上才能運作。" +"著色器允許實現高級視覺效果,\n" +"並可能提高某些顯示卡的性能。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Shadow filter quality" -msgstr "螢幕截圖品質" +msgstr "陰影濾鏡質量" #: src/settings_translation_file.cpp msgid "Shadow map max distance in nodes to render shadows" -msgstr "" +msgstr "陰影貼圖節點中渲染陰影的最大距離" #: src/settings_translation_file.cpp msgid "Shadow map texture in 32 bits" -msgstr "" +msgstr "32 位元陰影貼圖紋理" #: src/settings_translation_file.cpp -#, fuzzy msgid "Shadow map texture size" -msgstr "過濾器的最大材質大小" +msgstr "陰影貼圖紋理大小" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Shadow offset (in pixels) of the default font. If 0, then shadow will not be " "drawn." -msgstr "字型陰影偏移,若為 0 則陰影將不會被繪製。" +msgstr "預設字體的陰影偏移(以像素為單位)。 如果為 0,則不會繪製陰影。" #: src/settings_translation_file.cpp msgid "Shadow strength gamma" -msgstr "" +msgstr "陰影強度伽馬" #: src/settings_translation_file.cpp msgid "Show debug info" @@ -5626,17 +5780,16 @@ msgid "Show entity selection boxes" msgstr "顯示物體選取方塊" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Show entity selection boxes\n" "A restart is required after changing this." msgstr "" -"設定語言。留空以使用系統語言。\n" -"變更後必須重新啟動以使其生效。" +"顯示實體選擇框\n" +"更改後需要重新啟動。" #: src/settings_translation_file.cpp msgid "Show name tag backgrounds by default" -msgstr "" +msgstr "預設顯示名稱標籤背景" #: src/settings_translation_file.cpp msgid "Shutdown message" @@ -5650,6 +5803,11 @@ msgid "" "draw calls, benefiting especially high-end GPUs.\n" "Systems with a low-end GPU (or no GPU) would benefit from smaller values." msgstr "" +"客戶端將一起考慮的地圖塊立方體的邊長\n" +"生成網格時。\n" +"較大的值透過減少 GPU 的數量來提高 GPU 的利用率\n" +"繪製調用,尤其有利於高階 GPU。\n" +"具有低端 GPU(或沒有 GPU)的系統將受益於較小的值。" #: src/settings_translation_file.cpp msgid "" @@ -5660,37 +5818,32 @@ msgid "" "Altering this value is for special usage, leaving it unchanged is\n" "recommended." msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" -"網格生成器的地圖區塊快取大小。增加這個將會\n" -"增加快取命中率,減少從主執行緒複製資料,從\n" -"而減少抖動。" +"由mapgen產生的mapchunk的大小,以mapblocks(16個節點)表示。\n" +"警告:這樣做沒有任何好處,而且存在一些危險\n" +"將該數值增加到 5 以上。\n" +"減少該值會增加洞穴和地牢的密度。\n" +"改變這個值是為了特殊用途,保持不變是\n" +"受到推崇的。" #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" -msgstr "" +msgstr "天體軌道傾斜" #: src/settings_translation_file.cpp msgid "Slice w" msgstr "切片 w" #: src/settings_translation_file.cpp -#, fuzzy msgid "Slope and fill work together to modify the heights." -msgstr "坡度與填充一同運作來修改高度" +msgstr "坡度與填充一同運作來修改高度。" #: src/settings_translation_file.cpp msgid "Small cave maximum number" -msgstr "" +msgstr "小洞穴最大數量" #: src/settings_translation_file.cpp msgid "Small cave minimum number" -msgstr "" +msgstr "小洞穴最少數量" #: src/settings_translation_file.cpp msgid "Small-scale humidity variation for blending biomes on borders." @@ -5708,29 +5861,36 @@ msgstr "平滑光" #, fuzzy msgid "" "Smooths rotation of camera when in cinematic mode, 0 to disable. Enter " -"cinematic mode by using the key set in Change Keys." -msgstr "在電影模式中讓攝影機旋轉變流暢。設為 0 以停用。" +"cinematic mode by using the key set in Controls." +msgstr "" +"在電影模式下平滑相機的旋轉,0 表示停用。 使用“更改鍵”中設定的鍵進入電影模式。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Smooths rotation of camera, also called look or mouse smoothing. 0 to " "disable." -msgstr "在電影模式中讓攝影機旋轉變流暢。設為 0 以停用。" +msgstr "平滑相機的旋轉,也稱為外觀或滑鼠平滑。 0 禁用。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Sneaking speed" -msgstr "走路速度" +msgstr "潜行速度" #: src/settings_translation_file.cpp msgid "Sneaking speed, in nodes per second." -msgstr "" +msgstr "潛行速度,以方塊每秒為單位。" + +#: src/settings_translation_file.cpp +msgid "Soft shadow radius" +msgstr "軟陰影半徑" + +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "聲音" #: src/settings_translation_file.cpp #, fuzzy -msgid "Soft shadow radius" -msgstr "字型陰影 alpha 值" +msgid "Sound Extensions Blacklist" +msgstr "ContentDB 旗標黑名單列表" #: src/settings_translation_file.cpp msgid "" @@ -5750,6 +5910,8 @@ msgid "" "Note that mods or games may explicitly set a stack for certain (or all) " "items." msgstr "" +"指定節點、項目和工具的預設堆疊大小。\n" +"請注意,模組或遊戲可能會明確為某些(或所有)項目設定堆疊。" #: src/settings_translation_file.cpp msgid "" @@ -5758,6 +5920,10 @@ msgid "" "will consume more resources.\n" "Minimum value: 1; maximum value: 16" msgstr "" +"在給定數量的幀上傳播陰影貼圖的完整更新。\n" +"較高的值可能會使陰影滯後,較低的值\n" +"會消耗更多的資源。\n" +"最小值:1; 最大值:16" #: src/settings_translation_file.cpp msgid "" @@ -5765,30 +5931,29 @@ msgid "" "Controls the width of the range to be boosted.\n" "Standard deviation of the light curve boost Gaussian." msgstr "" +"光變曲線增強範圍的擴展。\n" +"控制要提升的範圍的寬度。\n" +"光變曲線的標準差增強高斯。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Static spawn point" -msgstr "靜態重生點" +msgstr "靜態生成點" #: src/settings_translation_file.cpp msgid "Steepness noise" msgstr "坡度雜訊" #: src/settings_translation_file.cpp -#, fuzzy msgid "Step mountain size noise" -msgstr "山雜訊" +msgstr "階梯山大小的噪音" #: src/settings_translation_file.cpp -#, fuzzy msgid "Step mountain spread noise" -msgstr "山雜訊" +msgstr "單步山峰廣度噪音" #: src/settings_translation_file.cpp -#, fuzzy msgid "Strength of 3D mode parallax." -msgstr "視差強度。" +msgstr "3D 模式視差的強度。" #: src/settings_translation_file.cpp msgid "" @@ -5796,6 +5961,9 @@ msgid "" "The 3 'boost' parameters define a range of the light\n" "curve that is boosted in brightness." msgstr "" +"光曲線增強的強度。\n" +"3 個「增強」參數定義了光的範圍\n" +"亮度增強的曲線。" #: src/settings_translation_file.cpp msgid "Strict protocol checking" @@ -5803,7 +5971,7 @@ msgstr "嚴格協議檢查" #: src/settings_translation_file.cpp msgid "Strip color codes" -msgstr "" +msgstr "條帶顏色代碼" #: src/settings_translation_file.cpp msgid "" @@ -5818,6 +5986,16 @@ msgid "" "server-intensive extreme water flow and to avoid vast flooding of the\n" "world surface below." msgstr "" +"可選水的表面水平放置在固體漂浮層上。\n" +"預設情況下禁用水,只有設定此值後才會放置水\n" +"到上面的“mgv7_floatland_ymax”-“mgv7_floatland_taper”(\n" +"上部逐漸變細)。\n" +"***警告,對世界和伺服器效能的潛在危險***:\n" +"啟用水放置時,必須配置和測試浮地\n" +"透過將“mgv7_floatland_密度”設定為 2.0(或其他\n" +"所需值取決於“mgv7_np_floatland”),以避免\n" +"伺服器密集型極端水流並避免大量洪水\n" +"下面的世界表面。" #: src/settings_translation_file.cpp msgid "Synchronous SQLite" @@ -5836,7 +6014,6 @@ msgid "Terrain base noise" msgstr "地形基礎高度" #: src/settings_translation_file.cpp -#, fuzzy msgid "Terrain height" msgstr "地形高度" @@ -5878,6 +6055,9 @@ msgid "" "This must be a power of two.\n" "Bigger numbers create better shadows but it is also more expensive." msgstr "" +"用於渲染陰影貼圖的紋理大小。\n" +"這必須是二的冪。\n" +"數字越大,陰影效果越好,但運算成本也越高。" #: src/settings_translation_file.cpp msgid "" @@ -5888,15 +6068,20 @@ msgid "" "this option allows enforcing it for certain node types. Note though that\n" "that is considered EXPERIMENTAL and may not work properly." msgstr "" +"節點上的紋理可以與節點或世界對齊。\n" +"前一種模式更適合機器、家具等東西,而前一種模式更適合機器、家具等。\n" +"後者使樓梯和微塊更適應周圍環境。\n" +"然而,由於這種可能性是新的,因此舊伺服器可能無法使用,\n" +"此選項允許對某些節點類型強制執行。 但請注意\n" +"這被認為是實驗性的,可能無法正常工作。" #: src/settings_translation_file.cpp msgid "The URL for the content repository" -msgstr "" +msgstr "內容儲存庫的 URL" #: src/settings_translation_file.cpp -#, fuzzy msgid "The dead zone of the joystick" -msgstr "要使用的搖桿的識別碼" +msgstr "搖桿死區" #: src/settings_translation_file.cpp msgid "" @@ -5907,18 +6092,38 @@ msgstr "" "當呼叫「/profiler save [格式]」但不包含格式時。" #: src/settings_translation_file.cpp -#, fuzzy +msgid "" +"The delay in milliseconds after which a touch interaction is considered a " +"long tap." +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 "" +"The gesture for 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" +"Combat is more or less impossible." +msgstr "" + #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "要使用的搖桿的識別碼" #: src/settings_translation_file.cpp -msgid "The length in pixels it takes for touchscreen interaction to start." -msgstr "" +#, fuzzy +msgid "" +"The length in pixels after which a touch interaction is considered movement." +msgstr "觸控螢幕互動開始所需的長度(以像素為單位)。" #: src/settings_translation_file.cpp msgid "" @@ -5927,6 +6132,19 @@ msgid "" "0.0 = Wave doesn't move at all.\n" "Default is 1.0 (1/2 node)." msgstr "" +"波動液體表面的最大高度。\n" +"4.0 = 波高為兩個節點。\n" +"0.0 = 波浪根本不移動。\n" +"預設值為 1.0(1/2 節點)。" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"The minimum time in seconds it takes between digging nodes when holding\n" +"the dig button." +msgstr "" +"按住時重複放置節點之間所花費的時間(以秒為單位)\n" +"地點按鈕。" #: src/settings_translation_file.cpp msgid "The network interface that the server listens on." @@ -5950,23 +6168,32 @@ msgid "" "maintained.\n" "This should be configured together with active_object_send_range_blocks." 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.\n" -"Shaders are supported by OpenGL and OGLES2 (experimental)." -msgstr "" +"每位玩家周圍方塊體積的半徑\n" +"活動塊內容,在地圖塊(16 個節點)中說明。\n" +"在活動區塊中載入物件並運行 ABM。\n" +"這也是活動物體(生物)維持的最小範圍。\n" +"這應該與 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." +msgstr "" +"渲染後端。\n" +"注意:修改後需要重啟!\n" +"OpenGL 是桌面的預設設置,Android 的預設設定是 OGLES2。\n" +"OpenGL 和 OGLES2(實驗性)支援著色器。" + +#: src/settings_translation_file.cpp +msgid "" "The sensitivity of the joystick axes for moving the\n" "in-game view frustum around." msgstr "" -"在遊戲中,視野四處移動時的\n" -"搖桿靈敏度。" +"操縱桿軸移動的靈敏度\n" +"遊戲中的視錐體周圍。" #: src/settings_translation_file.cpp msgid "" @@ -5995,6 +6222,8 @@ msgid "" "The time budget allowed for ABMs to execute on each step\n" "(as a fraction of the ABM Interval)" msgstr "" +"ABM 執行每個步驟所需的時間預算\n" +"(作為 ABM 間隔的一部分)" #: src/settings_translation_file.cpp msgid "" @@ -6005,11 +6234,12 @@ msgstr "" "當按住搖桿的組合。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "The time in seconds it takes between repeated node placements when holding\n" "the place button." -msgstr "當按住滑鼠右鍵時,重覆右鍵點選的間隔以秒計。" +msgstr "" +"按住時重複放置節點之間所花費的時間(以秒為單位)\n" +"地點按鈕。" #: src/settings_translation_file.cpp msgid "The type of joystick" @@ -6021,11 +6251,18 @@ msgid "" "enabled. Also, the vertical distance over which humidity drops by 10 if\n" "'altitude_dry' is enabled." msgstr "" +"如果「altitude_chill」為,則熱量下降 20 的垂直距離\n" +"已啟用。 此外,濕度下降 10 的垂直距離,如果\n" +"“altitude_dry”已啟用。" #: src/settings_translation_file.cpp msgid "Third of 4 2D noises that together define hill/mountain range height." msgstr "四之三 一同定義山丘範圍高度的 2D 雜訊。" +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Time in seconds for item entity (dropped items) to live.\n" @@ -6036,7 +6273,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Time of day when a new world is started, in millihours (0-23999)." -msgstr "" +msgstr "一天中開始新世界的時間,以毫秒為單位 (0-23999)。" #: src/settings_translation_file.cpp msgid "Time send interval" @@ -6066,32 +6303,28 @@ msgid "Tooltip delay" msgstr "工具提示延遲" #: src/settings_translation_file.cpp -#, fuzzy msgid "Touchscreen" -msgstr "海灘雜訊閾值" +msgstr "觸控螢幕" #: src/settings_translation_file.cpp -#, fuzzy msgid "Touchscreen sensitivity" -msgstr "滑鼠靈敏度" +msgstr "觸控螢幕靈敏度" #: src/settings_translation_file.cpp -#, fuzzy msgid "Touchscreen sensitivity multiplier." -msgstr "滑鼠靈敏度倍數。" - -#: src/settings_translation_file.cpp -#, fuzzy -msgid "Touchscreen threshold" -msgstr "海灘雜訊閾值" +msgstr "觸控螢幕靈敏度倍數。" #: src/settings_translation_file.cpp msgid "Tradeoffs for performance" -msgstr "" +msgstr "性能的權衡" + +#: src/settings_translation_file.cpp +msgid "Translucent liquids" +msgstr "半透明液體" #: src/settings_translation_file.cpp msgid "Transparency Sorting Distance" -msgstr "" +msgstr "透明分選距離" #: src/settings_translation_file.cpp msgid "Trees noise" @@ -6102,7 +6335,6 @@ msgid "Trilinear filtering" msgstr "三線性過濾器" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "True = 256\n" "False = 128\n" @@ -6110,7 +6342,7 @@ msgid "" msgstr "" "True = 256\n" "False = 128\n" -"對於讓迷你地圖在較慢的機器上變得流暢有效。" +"使迷你地圖在速度較慢的機器上更加平滑。" #: src/settings_translation_file.cpp msgid "Trusted mods" @@ -6125,11 +6357,20 @@ msgid "" "\n" "This setting should only be changed if you have performance problems." msgstr "" +"occlusion_culler 類型\n" +"\n" +"「loops」是具有巢狀循環和 O(n³) 複雜度的遺留演算法\n" +"「bfs」是基於廣度優先搜尋和側面剔除的新演算法\n" +"\n" +"僅當出現效能問題時才應變更此設定。" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"URL to JSON file which provides information about the newest Minetest release" -msgstr "" +"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 版本的信息" #: src/settings_translation_file.cpp msgid "URL to the server list displayed in the Multiplayer Tab." @@ -6137,10 +6378,9 @@ msgstr "會在多人遊戲分頁中顯示的伺服器清單的 URL。" #: src/settings_translation_file.cpp msgid "Undersampling" -msgstr "Undersampling" +msgstr "欠取樣" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Undersampling is similar to using a lower screen resolution, but it applies\n" "to the game world only, keeping the GUI intact.\n" @@ -6148,9 +6388,10 @@ msgid "" "image.\n" "Higher values result in a less detailed image." msgstr "" -"Undersampling 類似於較低的螢幕解析度,但其\n" -"僅適用於遊戲世界,保持圖形使用者介面完好無損。\n" -"它應該有顯著的效能提升,代價是細節較差的圖片。" +"欠採樣與使用較低的螢幕解析度類似,但它適用\n" +"僅適用於遊戲世界,保持 GUI 完整。\n" +"它應該會以不太詳細的圖像為代價顯著提高性能。\n" +"數值越高,影像的細節越少。" #: src/settings_translation_file.cpp msgid "Unlimited player transfer distance" @@ -6162,16 +6403,15 @@ msgstr "卸除未使用的伺服器資料" #: src/settings_translation_file.cpp msgid "Update information URL" -msgstr "" +msgstr "更新資訊網址" #: src/settings_translation_file.cpp msgid "Upper Y limit of dungeons." -msgstr "" +msgstr "地下城的 Y 值上限。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Upper Y limit of floatlands." -msgstr "大型偽隨機洞穴的 Y 上限。" +msgstr "懸空島的 Y 上限。" #: src/settings_translation_file.cpp msgid "Use 3D cloud look instead of flat." @@ -6193,13 +6433,15 @@ msgstr "當縮放材質時使用三線性過濾。" #: src/settings_translation_file.cpp msgid "Use crosshair for touch screen" -msgstr "" +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 "" +"使用十字線選擇物件而不是整個螢幕。\n" +"如果啟用,將顯示十字線並將其用於選擇物件。" #: src/settings_translation_file.cpp msgid "" @@ -6207,6 +6449,9 @@ msgid "" "especially when using a high-resolution texture pack.\n" "Gamma-correct downscaling is not supported." msgstr "" +"縮放紋理時使用 mipmap。 可能會稍微提高性能,\n" +"尤其是在使用高解析度材質包時。\n" +"不支援伽瑪校正縮小。" #: src/settings_translation_file.cpp msgid "" @@ -6214,6 +6459,9 @@ msgid "" "This flag enables use of raytraced occlusion culling test for\n" "client mesh sizes smaller than 4x4x4 map blocks." msgstr "" +"在新剔除器中使用光線追蹤遮擋剔除。\n" +"該標誌允許使用光線追蹤遮擋剔除測試\n" +"客戶端網格尺寸小於 4x4x4 地圖塊。" #: src/settings_translation_file.cpp msgid "" @@ -6221,6 +6469,9 @@ msgid "" "If both bilinear and trilinear filtering are enabled, trilinear filtering\n" "is applied." msgstr "" +"縮放紋理時使用三線性過濾。\n" +"如果同時啟用雙線性和三線性過濾,則三線性過濾被申請\n" +"被應用。" #: src/settings_translation_file.cpp #, fuzzy @@ -6234,24 +6485,17 @@ msgstr "" #: src/settings_translation_file.cpp msgid "User Interfaces" -msgstr "" +msgstr "使用者介面" #: src/settings_translation_file.cpp -msgid "VBO" -msgstr "VBO" - -#: src/settings_translation_file.cpp -#, fuzzy msgid "VSync" msgstr "垂直同步" #: src/settings_translation_file.cpp -#, fuzzy msgid "Valley depth" msgstr "山谷深度" #: src/settings_translation_file.cpp -#, fuzzy msgid "Valley fill" msgstr "山谷填充" @@ -6261,7 +6505,6 @@ msgid "Valley profile" msgstr "山谷分析" #: src/settings_translation_file.cpp -#, fuzzy msgid "Valley slope" msgstr "山谷坡度" @@ -6303,13 +6546,13 @@ msgstr "懸崖坡度變化。" #: src/settings_translation_file.cpp msgid "Vertical climbing speed, in nodes per second." -msgstr "" +msgstr "垂直攀登速度,以每秒節點為單位。" #: src/settings_translation_file.cpp msgid "" "Vertical screen synchronization. Your system may still force VSync on even " "if this is disabled." -msgstr "" +msgstr "垂直螢幕同步。 即使停用垂直同步,您的系統仍可能強制啟用垂直同步。" #: src/settings_translation_file.cpp msgid "Video driver" @@ -6329,23 +6572,35 @@ msgstr "視野" #: src/settings_translation_file.cpp msgid "Virtual joystick triggers Aux1 button" -msgstr "" +msgstr "虛擬操縱桿觸發 Aux1 按鈕" #: src/settings_translation_file.cpp msgid "Volume" msgstr "音量" #: src/settings_translation_file.cpp -#, fuzzy +msgid "Volume multiplier when the window is unfocused." +msgstr "" + +#: src/settings_translation_file.cpp msgid "" "Volume of all sounds.\n" "Requires the sound system to be enabled." msgstr "" -"啟用視差遮蔽貼圖。\n" -"必須啟用著色器。" +"所有聲音的音量。\n" +"需要啟用音響系統。" #: src/settings_translation_file.cpp #, fuzzy +msgid "Volume when unfocused" +msgstr "遊戲暫停時最高 FPS" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volumetric lighting" +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" @@ -6353,14 +6608,15 @@ msgid "" "Has no effect on 3D fractals.\n" "Range roughly -2 to 2." msgstr "" -"4D 碎形生成的 3D 切片的 W 座標。\n" -"決定了會生成怎樣的 4D 形狀的 3D 切片。\n" -"對 3D 碎形沒有影響。\n" -"範圍約在 -2 至 2 間。" +"產生的 4D 分形 3D 切片的 W 座標。\n" +"確定產生 4D 形狀的哪一個 3D 切片。\n" +"改變分形的形狀。\n" +"對 3D 分形沒有影響。\n" +"範圍大致為 -2 到 2。" #: src/settings_translation_file.cpp msgid "Walking and flying speed, in nodes per second." -msgstr "" +msgstr "步行和飛行速度,單位為方塊每秒。" #: src/settings_translation_file.cpp msgid "Walking speed" @@ -6368,7 +6624,7 @@ msgstr "走路速度" #: src/settings_translation_file.cpp msgid "Walking, flying and climbing speed in fast mode, in nodes per second." -msgstr "" +msgstr "快速模式的步行、飛行和攀爬速度,單位為方塊每秒。" #: src/settings_translation_file.cpp msgid "Water level" @@ -6387,9 +6643,8 @@ msgid "Waving leaves" msgstr "葉子擺動" #: src/settings_translation_file.cpp -#, fuzzy msgid "Waving liquids" -msgstr "擺動節點" +msgstr "波動的液體" #: src/settings_translation_file.cpp #, fuzzy @@ -6402,18 +6657,16 @@ msgid "Waving liquids wave speed" msgstr "波動的水速度" #: src/settings_translation_file.cpp -#, fuzzy msgid "Waving liquids wavelength" -msgstr "波動的水長度" +msgstr "波動液體的波長" #: src/settings_translation_file.cpp msgid "Waving plants" msgstr "植物擺動" #: src/settings_translation_file.cpp -#, fuzzy msgid "Weblink color" -msgstr "色彩選取框" +msgstr "網路連結顏色" #: src/settings_translation_file.cpp msgid "" @@ -6438,7 +6691,6 @@ msgstr "" "來軟體支援不佳的顯示卡驅動程式使用。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "When using bilinear/trilinear/anisotropic filters, low-resolution textures\n" "can be blurred, so automatically upscale them with nearest-neighbor\n" @@ -6449,19 +6701,22 @@ msgid "" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." msgstr "" -"當使用雙線性/三線性/各向異性過濾器時,低解析度材質\n" -"會被模糊,所以會自動將大小縮放至最近的內插值\n" -"以讓像素保持清晰。這會設定最小材質大小\n" -"供放大材質使用;較高的值看起來較銳利,但需要更多的\n" -"記憶體。建議為 2 的次方。將這個值設定高於 1 不會\n" -"有任何視覺效果,除非雙線性/三線性/各向異性過濾\n" -"已啟用。" +"使用雙線性/三線性/各向異性濾鏡時,低解析度紋理\n" +"可以被模糊,所以自動用最近鄰來升級它們\n" +"插值以保留清晰的像素。 這設定了最小紋理尺寸\n" +"用於升級紋理; 數值越高看起來越清晰,但需要更多\n" +"記憶。 建議使用 2 的冪。 僅當以下情況時才應用此設置\n" +"雙線性/三線性/各向異性過濾已啟用。\n" +"這也用作世界對齊的基本節點紋理大小\n" +"紋理自動縮放。" #: src/settings_translation_file.cpp msgid "" "Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" +"預設是否應顯示名稱標籤背景。\n" +"模組可能仍會設定背景。" #: src/settings_translation_file.cpp msgid "Whether node texture animations should be desynchronized per mapblock." @@ -6477,7 +6732,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Whether the window is maximized." -msgstr "" +msgstr "視窗是否最大化。" #: src/settings_translation_file.cpp msgid "" @@ -6498,6 +6753,10 @@ msgid "" "In-game, you can toggle the mute state with the mute key or by using the\n" "pause menu." msgstr "" +"是否靜音。 您可以隨時取消靜音,除非\n" +"聲音系統被停用(enable_sound=false)。\n" +"在遊戲中,您可以使用靜音鍵或使用\n" +"暫停選單。" #: src/settings_translation_file.cpp msgid "" @@ -6516,7 +6775,7 @@ msgstr "選取框在節點周邊的選取框線。" #: src/settings_translation_file.cpp msgid "Window maximized" -msgstr "" +msgstr "視窗最大化" #: src/settings_translation_file.cpp msgid "" @@ -6536,9 +6795,8 @@ msgstr "" "若從主選單啟動則不需要。" #: src/settings_translation_file.cpp -#, fuzzy msgid "World start time" -msgstr "世界遊戲" +msgstr "世界開始時間" #: src/settings_translation_file.cpp msgid "" @@ -6549,10 +6807,16 @@ msgid "" "See also texture_min_size.\n" "Warning: This option is EXPERIMENTAL!" msgstr "" +"世界對齊的紋理可以縮放以跨越多個節點。 然而,\n" +"伺服器可能不會發送您想要的比例,特別是如果您使用\n" +"專門設計的材質包; 使用此選項,客戶端嘗試\n" +"根據紋理大小自動決定比例。\n" +"另請參閱texture_min_size。\n" +"警告:此選項是實驗性的!" #: src/settings_translation_file.cpp msgid "World-aligned textures mode" -msgstr "" +msgstr "世界對齊紋理模式" #: src/settings_translation_file.cpp msgid "Y of flat ground." @@ -6562,7 +6826,7 @@ msgstr "扁平地面的 Y。" msgid "" "Y of mountain density gradient zero level. Used to shift mountains " "vertically." -msgstr "" +msgstr "Y 山體密度梯度為0級。 用於垂直移動山脈。" #: src/settings_translation_file.cpp #, fuzzy @@ -6580,6 +6844,10 @@ 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 "" +"浮動地逐漸從全密度逐漸縮小為零的Y距離。\n" +"錐度在距Y極限的距離處開始。\n" +"對於堅實的浮地層,這可控制丘陵/山脈的高度。\n" +"必須小於或等於兩個Y極限距離的一半。" #: src/settings_translation_file.cpp msgid "Y-level of average terrain surface." @@ -6605,16 +6873,15 @@ msgstr "海底的 Y 高度。" #: src/settings_translation_file.cpp msgid "cURL" -msgstr "" +msgstr "cURL" #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "cURL 檔案下載逾時" #: src/settings_translation_file.cpp -#, fuzzy msgid "cURL interactive timeout" -msgstr "cURL 逾時" +msgstr "cURL互動超時" #: src/settings_translation_file.cpp msgid "cURL parallel limit" @@ -6623,12 +6890,18 @@ msgstr "cURL 並行限制" #~ msgid "(game support required)" #~ msgstr "(需遊戲支援)" +#~ msgid "- Address: " +#~ msgstr "- 地址: " + #~ msgid "- Creative Mode: " #~ msgstr "- 創造模式: " #~ msgid "- Damage: " #~ msgstr "- 傷害: " +#~ msgid "- Port: " +#~ msgstr "- 連線埠: " + #~ msgid "" #~ "0 = parallax occlusion with slope information (faster).\n" #~ "1 = relief mapping (slower, more accurate)." @@ -6663,6 +6936,11 @@ msgstr "cURL 並行限制" #~ "把這個留空以啟動本機伺服器。\n" #~ "注意在主選單中的地址欄會覆寫這個設定。" +#~ msgid "" +#~ "Adjust dpi configuration to your screen (non X11/Android only) e.g. for " +#~ "4k screens." +#~ msgstr "調整您螢幕的 DPI 設定(並不只有 X11/Android)例如 4K 螢幕。" + #~ msgid "" #~ "Adjust the gamma encoding for the light tables. Higher numbers are " #~ "brighter.\n" @@ -6702,6 +6980,9 @@ msgstr "cURL 並行限制" #~ msgid "Bits per pixel (aka color depth) in fullscreen mode." #~ msgstr "全螢幕模式中的位元/像素(又稱色彩深度)。" +#~ msgid "Block bounds shown for all blocks" +#~ msgstr "區塊邊界顯示所有區塊" + #~ msgid "Bump Mapping" #~ msgstr "映射貼圖" @@ -6711,6 +6992,9 @@ msgstr "cURL 並行限制" #~ msgid "Camera update toggle key" #~ msgstr "攝影機切換更新按鍵" +#~ msgid "Change Keys" +#~ msgstr "變更按鍵" + #, fuzzy #~ msgid "Change keys" #~ msgstr "變更按鍵" @@ -6769,6 +7053,38 @@ msgstr "cURL 並行限制" #~ msgid "Controls width of tunnels, a smaller value creates wider tunnels." #~ msgstr "控制隧道的寬度,較小的值會創造出較寬的隧道。" +#, c-format +#~ msgid "" +#~ "Controls:\n" +#~ "- %s: move forwards\n" +#~ "- %s: move backwards\n" +#~ "- %s: move left\n" +#~ "- %s: move right\n" +#~ "- %s: jump/climb up\n" +#~ "- %s: dig/punch/use\n" +#~ "- %s: place/use\n" +#~ "- %s: sneak/climb down\n" +#~ "- %s: drop item\n" +#~ "- %s: inventory\n" +#~ "- Mouse: turn/look\n" +#~ "- Mouse wheel: select item\n" +#~ "- %s: chat\n" +#~ msgstr "" +#~ "控制:\n" +#~ "- %s:向前移動\n" +#~ "- %s:向後移動\n" +#~ "- %s:向左移動\n" +#~ "- %s:向右移動\n" +#~ "- %s:跳躍/向上攀爬\n" +#~ "- %s:挖/打\n" +#~ "- %s:放置/使用\n" +#~ "- %s:潛行/向下攀爬\n" +#~ "- %s:丟棄物品\n" +#~ "- %s:物品欄\n" +#~ "- 滑鼠:旋轉/觀看\n" +#~ "- 滑鼠滾輪:選取物品\n" +#~ "- %s:聊天\n" + #~ msgid "Creative" #~ msgstr "創造" @@ -6778,6 +7094,9 @@ msgstr "cURL 並行限制" #~ msgid "Crosshair color (R,G,B)." #~ msgstr "十字色彩 (R,G,B)。" +#~ msgid "DPI" +#~ msgstr "DPI" + #~ msgid "Damage" #~ msgstr "傷害" @@ -6864,6 +7183,13 @@ msgstr "cURL 並行限制" #~ msgid "Enable register confirmation" #~ msgstr "啟用註冊確認" +#~ msgid "" +#~ "Enable vertex buffer objects.\n" +#~ "This should greatly improve graphics performance." +#~ msgstr "" +#~ "啟用頂點緩衝區物件。\n" +#~ "這應該會大大提高圖形性能。" + #~ msgid "Enabled" #~ msgstr "已啟用" @@ -7141,6 +7467,9 @@ msgstr "cURL 並行限制" #~ msgid "Instrumentation" #~ msgstr "儀表" +#~ msgid "Invalid gamespec." +#~ msgstr "遊戲規格無效。" + #~ msgid "Inventory key" #~ msgstr "物品欄按鍵" @@ -7833,6 +8162,13 @@ msgstr "cURL 並行限制" #~ msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles." #~ msgstr "讓 DirectX 與 LuaJIT 一同運作。若其造成麻煩則請停用。" +#~ msgid "Makes all liquids opaque" +#~ msgstr "讓所有的液體不透明" + +#, fuzzy +#~ msgid "Mapblock mesh generator's MapBlock cache size in MB" +#~ msgstr "地圖區塊網格生成器的地圖區塊快取大小 MB" + #~ msgid "Menus" #~ msgstr "選單" @@ -8046,15 +8382,21 @@ msgstr "cURL 並行限制" #~ msgid "Simple Leaves" #~ msgstr "簡易葉子" +#~ msgid "" +#~ "Size of the MapBlock cache of the mesh generator. Increasing this will\n" +#~ "increase the cache hit %, reducing the data being copied from the main\n" +#~ "thread, thus reducing jitter." +#~ msgstr "" +#~ "網格生成器的地圖區塊快取大小。增加這個將會\n" +#~ "增加快取命中率,減少從主執行緒複製資料,從\n" +#~ "而減少抖動。" + #~ msgid "Smooth Lighting" #~ msgstr "平滑光線" #~ msgid "Smooths rotation of camera. 0 to disable." #~ msgstr "讓旋轉攝影機時較流暢。設為 0 以停用。" -#~ msgid "Sound" -#~ msgstr "聲音" - #~ msgid "Special" #~ msgstr "特殊" @@ -8112,6 +8454,10 @@ msgstr "cURL 並行限制" #~ msgid "Touch threshold (px):" #~ msgstr "觸控閾值:(像素)" +#, fuzzy +#~ msgid "Touchscreen threshold" +#~ msgstr "海灘雜訊閾值" + #~ msgid "Trilinear Filter" #~ msgstr "三線性過濾器" @@ -8136,6 +8482,9 @@ msgstr "cURL 並行限制" #~ msgid "Use bilinear filtering when scaling textures down." #~ msgstr "當縮放材質時使用雙線性過濾。" +#~ msgid "VBO" +#~ msgstr "VBO" + #~ msgid "Variation of hill height and lake depth on floatland smooth terrain." #~ msgstr "在平整浮地地形的山丘高度與湖泊深度變化。" @@ -8219,8 +8568,14 @@ msgstr "cURL 並行限制" #~ msgid "You died." #~ msgstr "您已死亡" +#~ msgid "You have no games installed." +#~ msgstr "您未安裝任何遊戲。" + #~ msgid "Z" #~ msgstr "Z" #~ msgid "needs_fallback_font" #~ msgstr "yes" + +#~ msgid "ok" +#~ msgstr "確定" diff --git a/shell.nix b/shell.nix new file mode 100644 index 000000000..ca412c38c --- /dev/null +++ b/shell.nix @@ -0,0 +1,25 @@ +{ pkgs ? import {}, }: + +pkgs.mkShell { + LOCALE_ARCHIVE = "${pkgs.glibcLocales}/lib/locale/locale-archive"; + env.LANG = "C.UTF-8"; + env.LC_ALL = "C.UTF-8"; + + packages = [ + pkgs.gcc + pkgs.cmake + pkgs.zlib + pkgs.zstd + pkgs.libjpeg + pkgs.libpng + pkgs.libGL + pkgs.SDL2 + pkgs.openal + pkgs.curl + pkgs.libvorbis + pkgs.libogg + pkgs.gettext + pkgs.freetype + pkgs.sqlite + ]; +} diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 955bf05f2..cad22ca6f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -648,6 +648,9 @@ if(BUILD_CLIENT) if(BUILD_UNITTESTS OR BUILD_BENCHMARKS) target_link_libraries(${PROJECT_NAME} Catch2::Catch2) endif() + if(BUILD_WITH_TRACY) + target_link_libraries(${PROJECT_NAME} Tracy::TracyClient) + endif() if(PRECOMPILE_HEADERS) target_precompile_headers(${PROJECT_NAME} PRIVATE ${PRECOMPILED_HEADERS_LIST}) @@ -715,6 +718,9 @@ if(BUILD_SERVER) if(BUILD_UNITTESTS OR BUILD_BENCHMARKS) target_link_libraries(${PROJECT_NAME}server Catch2::Catch2) endif() + if(BUILD_WITH_TRACY) + target_link_libraries(${PROJECT_NAME}server Tracy::TracyClient) + endif() if(PRECOMPILE_HEADERS) target_precompile_headers(${PROJECT_NAME}server PRIVATE ${PRECOMPILED_HEADERS_LIST}) @@ -781,7 +787,7 @@ endif() if(MSVC) # Visual Studio - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D _WIN32_WINNT=0x0601 /D WIN32_LEAN_AND_MEAN") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D _WIN32_WINNT=0x0601 /D WIN32_LEAN_AND_MEAN /D _CRT_SECURE_NO_WARNINGS") # EHa enables SEH exceptions (used for catching segfaults) set(CMAKE_CXX_FLAGS_RELEASE "/EHa /Ox /MD /GS- /Zi /fp:fast /D NDEBUG /D _HAS_ITERATOR_DEBUGGING=0") if(CMAKE_SIZEOF_VOID_P EQUAL 4) diff --git a/src/activeobject.h b/src/activeobject.h index 52f997fdf..cb868346a 100644 --- a/src/activeobject.h +++ b/src/activeobject.h @@ -96,6 +96,9 @@ struct BoneOverride { core::quaternion previous; core::quaternion next; + // Redundantly store the euler angles serverside + // so that we can return them in the appropriate getters + v3f next_radians; bool absolute = false; f32 interp_timer = 0; } rotation; @@ -152,17 +155,19 @@ typedef std::unordered_map BoneOverrideMap; class ActiveObject { public: - ActiveObject(u16 id): + typedef u16 object_t; + + ActiveObject(object_t id): m_id(id) { } - u16 getId() const + object_t getId() const { return m_id; } - void setId(u16 id) + void setId(object_t id) { m_id = id; } @@ -193,14 +198,22 @@ public: virtual bool collideWithObjects() const = 0; - virtual void setAttachment(int parent_id, const std::string &bone, v3f position, + virtual void setAttachment(object_t parent_id, const std::string &bone, v3f position, v3f rotation, bool force_visible) {} - virtual void getAttachment(int *parent_id, std::string *bone, v3f *position, + virtual void getAttachment(object_t *parent_id, std::string *bone, v3f *position, v3f *rotation, bool *force_visible) const {} + // Detach all children virtual void clearChildAttachments() {} - virtual void clearParentAttachment() {} - virtual void addAttachmentChild(int child_id) {} - virtual void removeAttachmentChild(int child_id) {} + // Detach from parent + virtual void clearParentAttachment() + { + setAttachment(0, "", v3f(), v3f(), false); + } + + // To be be called from setAttachment() and descendants, but not manually! + virtual void addAttachmentChild(object_t child_id) {} + virtual void removeAttachmentChild(object_t child_id) {} + protected: - u16 m_id; // 0 is invalid, "no id" + object_t m_id; // 0 is invalid, "no id" }; diff --git a/src/client/camera.cpp b/src/client/camera.cpp index 5e724d05e..bf9ec0bd5 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 #define CAMERA_OFFSET_STEP 200 #define WIELDMESH_OFFSET_X 55.0f @@ -62,7 +63,7 @@ Camera::Camera(MapDrawControl &draw_control, Client *client, RenderingEngine *re // all other 3D scene nodes and before the GUI. m_wieldmgr = smgr->createNewSceneManager(); m_wieldmgr->addCameraSceneNode(); - m_wieldnode = new WieldMeshSceneNode(m_wieldmgr, -1, false); + m_wieldnode = new WieldMeshSceneNode(m_wieldmgr, -1); m_wieldnode->setItem(ItemStack(), m_client); m_wieldnode->drop(); // m_wieldmgr grabbed it diff --git a/src/client/camera.h b/src/client/camera.h index 88533181b..8f85da0e1 100644 --- a/src/client/camera.h +++ b/src/client/camera.h @@ -19,7 +19,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #pragma once -#include "irrlichttypes_extrabloated.h" +#include "irrlichttypes.h" #include "inventory.h" #include "util/numeric.h" #include "client/localplayer.h" diff --git a/src/client/client.cpp b/src/client/client.cpp index 61140d87a..1a2f51db9 100644 --- a/src/client/client.cpp +++ b/src/client/client.cpp @@ -52,6 +52,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "profiler.h" #include "shader.h" #include "gettext.h" +#include "clientdynamicinfo.h" #include "clientmap.h" #include "clientmedia.h" #include "version.h" @@ -119,7 +120,7 @@ Client::Client( m_rendering_engine(rendering_engine), m_mesh_update_manager(std::make_unique(this)), m_env( - new ClientMap(this, rendering_engine, control, 666), + make_irr(this, rendering_engine, control, 666), tsrc, this ), m_particle_manager(std::make_unique(&m_env)), @@ -392,15 +393,12 @@ void Client::connect(const Address &address, const std::string &address_name, } m_address_name = address_name; - m_con.reset(new con::Connection(PROTOCOL_ID, 512, CONNECTION_TIMEOUT, - address.isIPv6(), this)); + m_con.reset(con::createMTP(CONNECTION_TIMEOUT, address.isIPv6(), this)); infostream << "Connecting to server at "; address.print(infostream); infostream << std::endl; - // Since we use TryReceive() a timeout here would be ineffective anyway - m_con->SetTimeoutMs(0); m_con->Connect(address); initLocalMapSaving(address, m_address_name, is_local_server); @@ -439,20 +437,16 @@ void Client::step(float dtime) } } - // UGLY hack to fix 2 second startup delay caused by non existent - // server client startup synchronization in local server or singleplayer mode - static bool initial_step = true; - if (initial_step) { - initial_step = false; - } - else if(m_state == LC_Created) { + // The issue that made this workaround necessary was fixed in August 2024, but + // it's not like we can remove this code - ever. + if (m_state == LC_Created) { float &counter = m_connection_reinit_timer; counter -= dtime; - if(counter <= 0.0) { - counter = 2.0; + if (counter <= 0) { + counter = 1.5f; LocalPlayer *myplayer = m_env.getLocalPlayer(); - FATAL_ERROR_IF(myplayer == NULL, "Local player not found in environment."); + FATAL_ERROR_IF(!myplayer, "Local player not found in environment"); sendInit(myplayer->getName()); } @@ -833,7 +827,7 @@ bool Client::loadMedia(const std::string &data, const std::string &filename, } const char *model_ext[] = { - ".x", ".b3d", ".obj", + ".x", ".b3d", ".obj", ".gltf", NULL }; name = removeStringEnd(filename, model_ext); @@ -866,13 +860,13 @@ bool Client::loadMedia(const std::string &data, const std::string &filename, } // Virtual methods from con::PeerHandler -void Client::peerAdded(con::Peer *peer) +void Client::peerAdded(con::IPeer *peer) { infostream << "Client::peerAdded(): peer->id=" << peer->id << std::endl; } -void Client::deletingPeer(con::Peer *peer, bool timeout) +void Client::deletingPeer(con::IPeer *peer, bool timeout) { infostream << "Client::deletingPeer(): " "Server Peer is getting deleted " @@ -1147,10 +1141,7 @@ void Client::sendInit(const std::string &playerName) { NetworkPacket pkt(TOSERVER_INIT, 1 + 2 + 2 + (1 + playerName.size())); - // we don't support network compression yet - u16 supp_comp_modes = NETPROTO_COMPRESSION_NONE; - - pkt << (u8) SER_FMT_VER_HIGHEST_READ << (u16) supp_comp_modes; + pkt << (u8) SER_FMT_VER_HIGHEST_READ << (u16) 0; pkt << (u16) CLIENT_PROTOCOL_VERSION_MIN << (u16) CLIENT_PROTOCOL_VERSION_MAX; pkt << playerName; @@ -1368,9 +1359,9 @@ void Client::sendDamage(u16 damage) Send(&pkt); } -void Client::sendRespawn() +void Client::sendRespawnLegacy() { - NetworkPacket pkt(TOSERVER_RESPAWN, 0); + NetworkPacket pkt(TOSERVER_RESPAWN_LEGACY, 0); Send(&pkt); } @@ -1594,7 +1585,7 @@ Inventory* Client::getInventory(const InventoryLocation &loc) { // Check if we are working with local player inventory LocalPlayer *player = m_env.getLocalPlayer(); - if (!player || strcmp(player->getName(), loc.name.c_str()) != 0) + if (!player || player->getName() != loc.name) return NULL; return &player->inventory; } diff --git a/src/client/client.h b/src/client/client.h index 7918e6d90..8fba92fad 100644 --- a/src/client/client.h +++ b/src/client/client.h @@ -20,22 +20,20 @@ with this program; if not, write to the Free Software Foundation, Inc., #pragma once #include "clientenvironment.h" -#include "irrlichttypes_extrabloated.h" +#include "irrlichttypes.h" #include #include #include #include #include #include -#include "clientobject.h" #include "gamedef.h" #include "inventorymanager.h" -#include "client/hud.h" -#include "tileanimation.h" #include "network/address.h" +#include "network/networkprotocol.h" // multiple enums #include "network/peerhandler.h" #include "gameparams.h" -#include "clientdynamicinfo.h" +#include "script/common/c_types.h" // LuaError #include "util/numeric.h" #include "clouds.h" @@ -45,34 +43,35 @@ with this program; if not, write to the Free Software Foundation, Inc., #define CLIENT_CHAT_MESSAGE_LIMIT_PER_10S 10.0f -struct ClientEvent; -struct MeshMakeData; -struct ChatMessage; -class MapBlockMesh; -class RenderingEngine; -class IWritableTextureSource; -class IWritableShaderSource; -class IWritableItemDefManager; -class ISoundManager; -class NodeDefManager; -//class IWritableCraftDefManager; +class Camera; class ClientMediaDownloader; -class SingleMediaDownloader; -struct MapDrawControl; +class ISoundManager; +class IWritableItemDefManager; +class IWritableShaderSource; +class IWritableTextureSource; +class MapBlockMesh; +class MapDatabase; +class MeshUpdateManager; +class Minimap; class ModChannelMgr; class MtEventManager; -struct PointedThing; -struct MapNode; -class MapDatabase; -class Minimap; -struct MinimapMapblock; -class MeshUpdateManager; -class ParticleManager; -class Camera; -struct PlayerControl; class NetworkPacket; +class NodeDefManager; +class ParticleManager; +class RenderingEngine; +class SingleMediaDownloader; +struct ChatMessage; +struct ClientDynamicInfo; +struct ClientEvent; +struct MapDrawControl; +struct MapNode; +struct MeshMakeData; +struct MinimapMapblock; +struct PlayerControl; +struct PointedThing; + namespace con { -class Connection; +class IConnection; } using sound_handle_t = int; @@ -196,7 +195,7 @@ public: void handleCommand_Breath(NetworkPacket* pkt); void handleCommand_MovePlayer(NetworkPacket* pkt); void handleCommand_MovePlayerRel(NetworkPacket* pkt); - void handleCommand_DeathScreen(NetworkPacket* pkt); + void handleCommand_DeathScreenLegacy(NetworkPacket* pkt); void handleCommand_AnnounceMedia(NetworkPacket* pkt); void handleCommand_Media(NetworkPacket* pkt); void handleCommand_NodeDef(NetworkPacket* pkt); @@ -251,7 +250,7 @@ public: void sendChangePassword(const std::string &oldpassword, const std::string &newpassword); void sendDamage(u16 damage); - void sendRespawn(); + void sendRespawnLegacy(); void sendReady(); void sendHaveMedia(const std::vector &tokens); void sendUpdateClientInfo(const ClientDynamicInfo &info); @@ -456,8 +455,8 @@ private: void loadMods(); // Virtual methods from con::PeerHandler - void peerAdded(con::Peer *peer) override; - void deletingPeer(con::Peer *peer, bool timeout) override; + void peerAdded(con::IPeer *peer) override; + void deletingPeer(con::IPeer *peer, bool timeout) override; void initLocalMapSaving(const Address &address, const std::string &hostname, @@ -497,7 +496,7 @@ private: std::unique_ptr m_mesh_update_manager; ClientEnvironment m_env; std::unique_ptr m_particle_manager; - std::unique_ptr m_con; + std::unique_ptr m_con; std::string m_address_name; ELoginRegister m_allow_login_or_register = ELoginRegister::Any; Camera *m_camera = nullptr; diff --git a/src/client/clientenvironment.cpp b/src/client/clientenvironment.cpp index 7e1676ffe..08c5586ea 100644 --- a/src/client/clientenvironment.cpp +++ b/src/client/clientenvironment.cpp @@ -43,10 +43,10 @@ with this program; if not, write to the Free Software Foundation, Inc., ClientEnvironment */ -ClientEnvironment::ClientEnvironment(ClientMap *map, +ClientEnvironment::ClientEnvironment(irr_ptr map, ITextureSource *texturesource, Client *client): Environment(client), - m_map(map), + m_map(std::move(map)), m_texturesource(texturesource), m_client(client) { @@ -60,18 +60,17 @@ ClientEnvironment::~ClientEnvironment() delete simple_object; } - // Drop/delete map - m_map->drop(); + m_map.reset(); delete m_local_player; } -Map & ClientEnvironment::getMap() +Map &ClientEnvironment::getMap() { return *m_map; } -ClientMap & ClientEnvironment::getClientMap() +ClientMap &ClientEnvironment::getClientMap() { return *m_map; } @@ -368,7 +367,7 @@ void ClientEnvironment::addActiveObject(u16 id, u8 type, void ClientEnvironment::removeActiveObject(u16 id) { // Get current attachment childs to detach them visually - std::unordered_set attachment_childs; + std::unordered_set attachment_childs; if (auto *obj = getActiveObject(id)) attachment_childs = obj->getAttachmentChildIds(); diff --git a/src/client/clientenvironment.h b/src/client/clientenvironment.h index bdb8b9726..db31e69f2 100644 --- a/src/client/clientenvironment.h +++ b/src/client/clientenvironment.h @@ -22,6 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "environment.h" #include "util/numeric.h" // IntervalLimiter #include "activeobjectmgr.h" // client::ActiveObjectMgr +#include "irr_ptr.h" #include #ifdef SERVER @@ -66,7 +67,7 @@ typedef std::unordered_map ClientActiveObjectMap; class ClientEnvironment : public Environment { public: - ClientEnvironment(ClientMap *map, ITextureSource *texturesource, Client *client); + ClientEnvironment(irr_ptr map, ITextureSource *texturesource, Client *client); ~ClientEnvironment(); Map & getMap(); @@ -151,7 +152,7 @@ public: u64 getFrameTimeDelta() const { return m_frame_dtime; } private: - ClientMap *m_map; + irr_ptr m_map; LocalPlayer *m_local_player = nullptr; ITextureSource *m_texturesource; Client *m_client; diff --git a/src/client/clientevent.h b/src/client/clientevent.h index 243a94596..8c505786b 100644 --- a/src/client/clientevent.h +++ b/src/client/clientevent.h @@ -20,7 +20,8 @@ with this program; if not, write to the Free Software Foundation, Inc., #pragma once #include -#include "irrlichttypes_bloated.h" +#include "irrlichttypes.h" +#include "client/hud.h" // HudElementStat struct ParticleParameters; struct ParticleSpawnerParameters; @@ -34,7 +35,7 @@ enum ClientEventType : u8 CE_NONE, CE_PLAYER_DAMAGE, CE_PLAYER_FORCE_MOVE, - CE_DEATHSCREEN, + CE_DEATHSCREEN_LEGACY, CE_SHOW_FORMSPEC, CE_SHOW_LOCAL_FORMSPEC, CE_SPAWN_PARTICLE, @@ -95,13 +96,6 @@ struct ClientEvent f32 yaw; } player_force_move; struct - { - bool set_camera_point_target; - f32 camera_point_target_x; - f32 camera_point_target_y; - f32 camera_point_target_z; - } deathscreen; - struct { std::string *formspec; std::string *formname; @@ -136,6 +130,7 @@ struct ClientEvent f32 density; u32 color_bright; u32 color_ambient; + u32 color_shadow; f32 height; f32 thickness; f32 speed_x; diff --git a/src/client/clientlauncher.cpp b/src/client/clientlauncher.cpp index 6379fc141..e99fbff42 100644 --- a/src/client/clientlauncher.cpp +++ b/src/client/clientlauncher.cpp @@ -19,7 +19,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "gui/mainmenumanager.h" #include "clouds.h" -#include "gui/touchscreengui.h" +#include "gui/touchcontrols.h" #include "server.h" #include "filesys.h" #include "gui/guiMainMenu.h" @@ -27,6 +27,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "player.h" #include "chat.h" #include "gettext.h" +#include "inputhandler.h" #include "profiler.h" #include "gui/guiEngine.h" #include "fontengine.h" @@ -34,6 +35,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "version.h" #include "renderingengine.h" #include "network/networkexceptions.h" +#include "util/tracy_wrapper.h" #include #include #include @@ -69,6 +71,7 @@ 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("gui_scaling", setting_changed_callback, this); delete g_fontengine; @@ -129,6 +132,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("gui_scaling", setting_changed_callback, this); g_fontengine = new FontEngine(guienv); @@ -136,8 +140,10 @@ bool ClientLauncher::run(GameStartData &start_data, const Settings &cmd_args) // Create the menu clouds // This is only global so it can be used by RenderingEngine::draw_load_screen(). assert(!g_menucloudsmgr && !g_menuclouds); + std::unique_ptr ssrc(createShaderSource()); + ssrc->addShaderConstantSetterFactory(new FogShaderConstantSetterFactory()); g_menucloudsmgr = m_rendering_engine->get_scene_manager()->createNewSceneManager(); - g_menuclouds = new Clouds(g_menucloudsmgr, nullptr, -1, rand()); + g_menuclouds = new Clouds(g_menucloudsmgr, ssrc.get(), -1, rand()); g_menuclouds->setHeight(100.0f); g_menuclouds->update(v3f(0, 0, 0), video::SColor(255, 240, 240, 255)); scene::ICameraSceneNode* camera; @@ -228,9 +234,9 @@ bool ClientLauncher::run(GameStartData &start_data, const Settings &cmd_args) m_rendering_engine->get_scene_manager()->clear(); - if (g_touchscreengui) { - delete g_touchscreengui; - g_touchscreengui = NULL; + if (g_touchcontrols) { + delete g_touchcontrols; + g_touchcontrols = NULL; } /* Save the settings when leaving the game. @@ -350,6 +356,7 @@ void ClientLauncher::config_guienv() float density = rangelim(g_settings->getFloat("gui_scaling"), 0.5f, 20) * RenderingEngine::getDisplayDensity(); + skin->setScale(density); skin->setSize(gui::EGDS_CHECK_BOX_WIDTH, (s32)(17.0f * density)); skin->setSize(gui::EGDS_SCROLLBAR_SIZE, (s32)(21.0f * density)); skin->setSize(gui::EGDS_WINDOW_BUTTON_WIDTH, (s32)(15.0f * density)); @@ -540,15 +547,19 @@ void ClientLauncher::main_menu(MainMenuData *menudata) video::IVideoDriver *driver = m_rendering_engine->get_video_driver(); infostream << "Waiting for other menus" << std::endl; + auto framemarker = FrameMarker("ClientLauncher::main_menu()-wait-frame").started(); while (m_rendering_engine->run() && !*kill) { if (!isMenuActive()) break; driver->beginScene(true, true, video::SColor(255, 128, 128, 128)); m_rendering_engine->get_gui_env()->drawAll(); driver->endScene(); + framemarker.end(); // On some computers framerate doesn't seem to be automatically limited sleep_ms(25); + framemarker.start(); } + framemarker.end(); infostream << "Waited for other menus" << std::endl; auto *cur_control = m_rendering_engine->get_raw_device()->getCursorControl(); diff --git a/src/client/clientlauncher.h b/src/client/clientlauncher.h index 7b070451a..ad7604c87 100644 --- a/src/client/clientlauncher.h +++ b/src/client/clientlauncher.h @@ -19,11 +19,14 @@ with this program; if not, write to the Free Software Foundation, Inc., #pragma once -#include "irrlichttypes_extrabloated.h" -#include "client/inputhandler.h" -#include "gameparams.h" +#include class RenderingEngine; +class Settings; +class MyEventReceiver; +class InputHandler; +struct GameStartData; +struct MainMenuData; class ClientLauncher { diff --git a/src/client/clientmap.cpp b/src/client/clientmap.cpp index 45995c0ea..d608ae2f6 100644 --- a/src/client/clientmap.cpp +++ b/src/client/clientmap.cpp @@ -22,6 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "client/mesh.h" #include "mapblock_mesh.h" #include +#include #include #include "mapsector.h" #include "mapblock.h" @@ -30,6 +31,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "settings.h" #include "camera.h" // CameraModes #include "util/basic_macros.h" +#include "util/tracy_wrapper.h" #include "client/renderingengine.h" #include @@ -73,11 +75,23 @@ namespace { }; } +/* + ClientMap +*/ + static void on_settings_changed(const std::string &name, void *data) { - static_cast(data)->onSettingChanged(name); + static_cast(data)->onSettingChanged(name, false); } -// ClientMap + +static const std::string ClientMap_settings[] = { + "trilinear_filter", + "bilinear_filter", + "anisotropic_filter", + "transparency_sorting_distance", + "occlusion_culler", + "enable_raytraced_culling", +}; ClientMap::ClientMap( Client *client, @@ -102,37 +116,32 @@ ClientMap::ClientMap( m_box = aabb3f(-BS*1000000,-BS*1000000,-BS*1000000, BS*1000000,BS*1000000,BS*1000000); - /* TODO: Add a callback function so these can be updated when a setting - * changes. At this point in time it doesn't matter (e.g. /set - * is documented to change server settings only) - * - * TODO: Local caching of settings is not optimal and should at some stage - * be updated to use a global settings object for getting thse values - * (as opposed to the this local caching). This can be addressed in - * a later release. - */ - m_cache_trilinear_filter = g_settings->getBool("trilinear_filter"); - m_cache_bilinear_filter = g_settings->getBool("bilinear_filter"); - m_cache_anistropic_filter = g_settings->getBool("anisotropic_filter"); - m_cache_transparency_sorting_distance = g_settings->getU16("transparency_sorting_distance"); - m_loops_occlusion_culler = g_settings->get("occlusion_culler") == "loops"; - g_settings->registerChangedCallback("occlusion_culler", on_settings_changed, this); - m_enable_raytraced_culling = g_settings->getBool("enable_raytraced_culling"); - g_settings->registerChangedCallback("enable_raytraced_culling", on_settings_changed, this); + for (const auto &name : ClientMap_settings) + g_settings->registerChangedCallback(name, on_settings_changed, this); + // load all settings at once + onSettingChanged("", true); } -void ClientMap::onSettingChanged(const std::string &name) +void ClientMap::onSettingChanged(std::string_view name, bool all) { - if (name == "occlusion_culler") + if (all || name == "trilinear_filter") + m_cache_trilinear_filter = g_settings->getBool("trilinear_filter"); + if (all || name == "bilinear_filter") + m_cache_bilinear_filter = g_settings->getBool("bilinear_filter"); + if (all || name == "anisotropic_filter") + m_cache_anistropic_filter = g_settings->getBool("anisotropic_filter"); + if (all || name == "transparency_sorting_distance") + m_cache_transparency_sorting_distance = g_settings->getU16("transparency_sorting_distance"); + if (all || name == "occlusion_culler") m_loops_occlusion_culler = g_settings->get("occlusion_culler") == "loops"; - if (name == "enable_raytraced_culling") + if (all || name == "enable_raytraced_culling") m_enable_raytraced_culling = g_settings->getBool("enable_raytraced_culling"); } ClientMap::~ClientMap() { - g_settings->deregisterChangedCallback("occlusion_culler", on_settings_changed, this); - g_settings->deregisterChangedCallback("enable_raytraced_culling", on_settings_changed, this); + for (const auto &name : ClientMap_settings) + g_settings->deregisterChangedCallback(name, on_settings_changed, this); } void ClientMap::updateCamera(v3f pos, v3f dir, f32 fov, v3s16 offset, video::SColor light_color) @@ -185,6 +194,13 @@ void ClientMap::OnRegisterSceneNode() // we have other way to find it } +void ClientMap::render() +{ + video::IVideoDriver* driver = SceneManager->getVideoDriver(); + driver->setTransform(video::ETS_WORLD, AbsoluteTransformation); + renderMap(driver, SceneManager->getSceneNodeRenderPass()); +} + void ClientMap::getBlocksInViewRange(v3s16 cam_pos_nodes, v3s16 *p_blocks_min, v3s16 *p_blocks_max, float range) { @@ -699,6 +715,8 @@ void ClientMap::touchMapBlocks() void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass) { + ZoneScoped; + bool is_transparent_pass = pass == scene::ESNRP_TRANSPARENT; std::string prefix; @@ -767,15 +785,12 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass) if (is_frustum_culled(mesh_sphere_center, mesh_sphere_radius)) continue; - v3f block_pos_r = intToFloat(block->getPosRelative() + MAP_BLOCKSIZE / 2, BS); - - float d = camera_position.getDistanceFrom(block_pos_r); - d = MYMAX(0,d - BLOCK_MAX_RADIUS); - // Mesh animation if (pass == scene::ESNRP_SOLID) { - // Pretty random but this should work somewhat nicely - bool faraway = d >= BS * 50; + // 50 nodes is pretty arbitrary but it should work somewhat nicely + float distance_sq = camera_position.getDistanceFromSQ(mesh_sphere_center); + bool faraway = distance_sq >= std::pow(BS * 50 + mesh_sphere_radius, 2.0f); + if (block_mesh->isAnimationForced() || !faraway || mesh_animate_count < (m_control.range_all ? 200 : 50)) { @@ -844,10 +859,8 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass) drawcall_count += draw_order.size(); for (auto &descriptor : draw_order) { - scene::IMeshBuffer *buf = descriptor.getBuffer(); - if (!descriptor.m_reuse_material) { - auto &material = buf->getMaterial(); + auto &material = descriptor.getMaterial(); // Apply filter settings material.forEachTexture([this] (auto &tex) { @@ -879,8 +892,7 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass) m.setTranslation(block_wpos - offset); driver->setTransform(video::ETS_WORLD, m); - descriptor.draw(driver); - vertex_count += buf->getIndexCount(); + vertex_count += descriptor.draw(driver); } g_profiler->avg(prefix + "draw meshes [ms]", draw.stop(true)); @@ -1197,13 +1209,22 @@ void ClientMap::renderMapShadows(video::IVideoDriver *driver, // Render all mesh buffers in order drawcall_count += draw_order.size(); - for (auto &descriptor : draw_order) { - scene::IMeshBuffer *buf = descriptor.getBuffer(); + bool translucent_foliage = g_settings->getBool("enable_translucent_foliage"); + video::E_MATERIAL_TYPE leaves_material = video::EMT_SOLID; + + // For translucent leaves, we want to use backface culling instead of frontface. + if (translucent_foliage) { + // this is the material leaves would use, compare to nodedef.cpp + auto* shdsrc = m_client->getShaderSource(); + const u32 leaves_shader = shdsrc->getShader("nodes_shader", TILE_MATERIAL_WAVING_LEAVES, NDT_ALLFACES); + leaves_material = shdsrc->getShaderInfo(leaves_shader).material; + } + + for (auto &descriptor : draw_order) { if (!descriptor.m_reuse_material) { // override some material properties - video::SMaterial local_material = buf->getMaterial(); - local_material.MaterialType = material.MaterialType; + video::SMaterial local_material = descriptor.getMaterial(); // do not override culling if the original material renders both back // and front faces in solid mode (e.g. plantlike) // Transparent plants would still render shadows only from one side, @@ -1212,8 +1233,12 @@ void ClientMap::renderMapShadows(video::IVideoDriver *driver, local_material.BackfaceCulling = material.BackfaceCulling; local_material.FrontfaceCulling = material.FrontfaceCulling; } + if (local_material.MaterialType == leaves_material && translucent_foliage) { + local_material.BackfaceCulling = true; + local_material.FrontfaceCulling = false; + } + local_material.MaterialType = material.MaterialType; local_material.BlendOperation = material.BlendOperation; - local_material.Lighting = false; driver->setMaterial(local_material); ++material_swaps; } @@ -1222,8 +1247,7 @@ void ClientMap::renderMapShadows(video::IVideoDriver *driver, m.setTranslation(block_wpos - offset); driver->setTransform(video::ETS_WORLD, m); - descriptor.draw(driver); - vertex_count += buf->getIndexCount(); + vertex_count += descriptor.draw(driver); } // restore the driver material state @@ -1305,27 +1329,35 @@ void ClientMap::updateTransparentMeshBuffers() ScopeProfiler sp(g_profiler, "CM::updateTransparentMeshBuffers", SPT_AVG); u32 sorted_blocks = 0; u32 unsorted_blocks = 0; - f32 sorting_distance_sq = std::pow(m_cache_transparency_sorting_distance * BS, 2.0f); - + bool transparency_sorting_enabled = m_cache_transparency_sorting_distance > 0; + f32 sorting_distance = m_cache_transparency_sorting_distance * BS; // Update the order of transparent mesh buffers in each mesh for (auto it = m_drawlist.begin(); it != m_drawlist.end(); it++) { - MapBlock* block = it->second; - if (!block->mesh) + MapBlock *block = it->second; + MapBlockMesh *blockmesh = block->mesh; + if (!blockmesh) continue; if (m_needs_update_transparent_meshes || - block->mesh->getTransparentBuffers().size() == 0) { + blockmesh->getTransparentBuffers().size() == 0) { + bool do_sort_block = transparency_sorting_enabled; - v3s16 block_pos = block->getPos(); - v3f block_pos_f = intToFloat(block_pos * MAP_BLOCKSIZE + MAP_BLOCKSIZE / 2, BS); - f32 distance = m_camera_position.getDistanceFromSQ(block_pos_f); - if (distance <= sorting_distance_sq) { - block->mesh->updateTransparentBuffers(m_camera_position, block_pos); - ++sorted_blocks; + if (do_sort_block) { + v3f mesh_sphere_center = intToFloat(block->getPosRelative(), BS) + + blockmesh->getBoundingSphereCenter(); + f32 mesh_sphere_radius = blockmesh->getBoundingRadius(); + f32 distance_sq = m_camera_position.getDistanceFromSQ(mesh_sphere_center); + + if (distance_sq > std::pow(sorting_distance + mesh_sphere_radius, 2.0f)) + do_sort_block = false; } - else { - block->mesh->consolidateTransparentBuffers(); + + if (do_sort_block) { + blockmesh->updateTransparentBuffers(m_camera_position, block->getPos()); + ++sorted_blocks; + } else { + blockmesh->consolidateTransparentBuffers(); ++unsorted_blocks; } } @@ -1336,19 +1368,19 @@ void ClientMap::updateTransparentMeshBuffers() m_needs_update_transparent_meshes = false; } -scene::IMeshBuffer* ClientMap::DrawDescriptor::getBuffer() +video::SMaterial &ClientMap::DrawDescriptor::getMaterial() { - return m_use_partial_buffer ? m_partial_buffer->getBuffer() : m_buffer; + return (m_use_partial_buffer ? m_partial_buffer->getBuffer() : m_buffer)->getMaterial(); } -void ClientMap::DrawDescriptor::draw(video::IVideoDriver* driver) +u32 ClientMap::DrawDescriptor::draw(video::IVideoDriver* driver) { if (m_use_partial_buffer) { - m_partial_buffer->beforeDraw(); - driver->drawMeshBuffer(m_partial_buffer->getBuffer()); - m_partial_buffer->afterDraw(); + m_partial_buffer->draw(driver); + return m_partial_buffer->getBuffer()->getVertexCount(); } else { driver->drawMeshBuffer(m_buffer); + return m_buffer->getVertexCount(); } } diff --git a/src/client/clientmap.h b/src/client/clientmap.h index 05c33d67c..2f0a2e986 100644 --- a/src/client/clientmap.h +++ b/src/client/clientmap.h @@ -19,7 +19,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #pragma once -#include "irrlichttypes_extrabloated.h" +#include "irrlichttypes_bloated.h" #include "map.h" #include "camera.h" #include @@ -41,6 +41,16 @@ class Client; class ITextureSource; class PartialMeshBuffer; +namespace irr::scene +{ + class IMeshBuffer; +} + +namespace irr::video +{ + class IVideoDriver; +} + /* ClientMap @@ -75,12 +85,7 @@ public: virtual void OnRegisterSceneNode() override; - virtual void render() override - { - video::IVideoDriver* driver = SceneManager->getVideoDriver(); - driver->setTransform(video::ETS_WORLD, AbsoluteTransformation); - renderMap(driver, SceneManager->getSceneNodeRenderPass()); - } + virtual void render() override; virtual const aabb3f &getBoundingBox() const override { @@ -112,7 +117,7 @@ public: f32 getWantedRange() const { return m_control.wanted_range; } f32 getCameraFov() const { return m_camera_fov; } - void onSettingChanged(const std::string &name); + void onSettingChanged(std::string_view name, bool all); protected: // use drop() instead @@ -162,8 +167,9 @@ private: m_pos(pos), m_partial_buffer(buffer), m_reuse_material(false), m_use_partial_buffer(true) {} - scene::IMeshBuffer* getBuffer(); - void draw(video::IVideoDriver* driver); + video::SMaterial &getMaterial(); + /// @return index count + u32 draw(video::IVideoDriver* driver); }; Client *m_client; diff --git a/src/client/clientobject.h b/src/client/clientobject.h index f63681313..8c2c68d15 100644 --- a/src/client/clientobject.h +++ b/src/client/clientobject.h @@ -19,7 +19,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #pragma once -#include "irrlichttypes_extrabloated.h" +#include "irrlichttypes_bloated.h" #include "activeobject.h" #include #include @@ -34,6 +34,13 @@ class LocalPlayer; struct ItemStack; class WieldMeshSceneNode; +namespace irr::scene +{ + class IAnimatedMeshSceneNode; + class ISceneNode; + class ISceneManager; +} + class ClientActiveObject : public ActiveObject { public: @@ -57,8 +64,8 @@ public: virtual bool isLocalPlayer() const { return false; } virtual ClientActiveObject *getParent() const { return nullptr; }; - virtual const std::unordered_set &getAttachmentChildIds() const - { static std::unordered_set rv; return rv; } + virtual const std::unordered_set &getAttachmentChildIds() const + { static std::unordered_set rv; return rv; } virtual void updateAttachments() {}; virtual bool doShowSelectionBox() { return true; } diff --git a/src/client/clouds.cpp b/src/client/clouds.cpp index 5d9f6c1da..ebea5aaeb 100644 --- a/src/client/clouds.cpp +++ b/src/client/clouds.cpp @@ -28,10 +28,9 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "settings.h" #include -// Menu clouds are created later class Clouds; -Clouds *g_menuclouds = NULL; -scene::ISceneManager *g_menucloudsmgr = NULL; +scene::ISceneManager *g_menucloudsmgr = nullptr; +Clouds *g_menuclouds = nullptr; // Constant for now static constexpr const float cloud_size = BS * 64.0f; @@ -48,11 +47,9 @@ Clouds::Clouds(scene::ISceneManager* mgr, IShaderSource *ssrc, scene::ISceneNode(g_settings->getBool("enable_volumetric_clouds") ? nullptr : mgr->getRootSceneNode(), mgr, id), m_seed(seed) { + assert(ssrc); m_enable_shaders = g_settings->getBool("enable_shaders"); - // menu clouds use shader-less clouds for simplicity (ssrc == NULL) - m_enable_shaders = m_enable_shaders && ssrc; - m_material.Lighting = false; m_material.BackfaceCulling = true; m_material.FogEnable = true; m_material.AntiAliasing = video::EAAM_SIMPLE; @@ -68,6 +65,8 @@ Clouds::Clouds(scene::ISceneManager* mgr, IShaderSource *ssrc, readSettings(); g_settings->registerChangedCallback("enable_3d_clouds", &cloud_3d_setting_changed, this); + g_settings->registerChangedCallback("soft_clouds", + &cloud_3d_setting_changed, this); updateBox(); @@ -79,6 +78,8 @@ Clouds::~Clouds() { g_settings->deregisterChangedCallback("enable_3d_clouds", &cloud_3d_setting_changed, this); + g_settings->deregisterChangedCallback("soft_clouds", + &cloud_3d_setting_changed, this); } void Clouds::OnRegisterSceneNode() @@ -134,7 +135,7 @@ void Clouds::updateMesh() m_last_noise_center = center_of_drawing_in_noise_i; m_mesh_valid = true; - const u32 num_faces_to_draw = m_enable_3d ? 6 : 1; + const u32 num_faces_to_draw = is3D() ? 6 : 1; // Colors with primitive shading @@ -143,18 +144,21 @@ void Clouds::updateMesh() 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 EmissiveColor + // 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); } - c_side_1_f.r *= 0.95f; - c_side_1_f.g *= 0.95f; - c_side_1_f.b *= 0.95f; - c_side_2_f.r *= 0.90f; - c_side_2_f.g *= 0.90f; - c_side_2_f.b *= 0.90f; - c_bottom_f.r *= 0.80f; - c_bottom_f.g *= 0.80f; - c_bottom_f.b *= 0.80f; + 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; + c_side_1_f.b *= shadow.b * 0.25f + 0.75f; + c_side_2_f.r *= shadow.r * 0.5f + 0.5f; + c_side_2_f.g *= shadow.g * 0.5f + 0.5f; + c_side_2_f.b *= shadow.b * 0.5f + 0.5f; + c_bottom_f.r *= shadow.r; + c_bottom_f.g *= shadow.g; + c_bottom_f.b *= shadow.b; + video::SColor c_top = c_top_f.toSColor(); video::SColor c_side_1 = c_side_1_f.toSColor(); video::SColor c_side_2 = c_side_2_f.toSColor(); @@ -179,21 +183,23 @@ void Clouds::updateMesh() auto *mb = m_meshbuffer.get(); + auto &vertices = mb->Vertices->Data; + auto &indices = mb->Indices->Data; { const u32 vertex_count = num_faces_to_draw * 16 * m_cloud_radius_i * m_cloud_radius_i; const u32 quad_count = vertex_count / 4; const u32 index_count = quad_count * 6; // reserve memory - mb->Vertices.reallocate(vertex_count); - mb->Indices.reallocate(index_count); + vertices.reserve(vertex_count); + indices.reserve(index_count); } #define GETINDEX(x, z, radius) (((z)+(radius))*(radius)*2 + (x)+(radius)) #define INAREA(x, z, radius) \ ((x) >= -(radius) && (x) < (radius) && (z) >= -(radius) && (z) < (radius)) - mb->Vertices.set_used(0); + vertices.clear(); for (s16 zi0= -m_cloud_radius_i; zi0 < m_cloud_radius_i; zi0++) for (s16 xi0= -m_cloud_radius_i; xi0 < m_cloud_radius_i; xi0++) { @@ -221,16 +227,17 @@ void Clouds::updateMesh() const f32 rx = cloud_size / 2.0f; // if clouds are flat, the top layer should be at the given height - const f32 ry = m_enable_3d ? m_params.thickness * BS : 0.0f; + const f32 ry = is3D() ? m_params.thickness * BS : 0.0f; const f32 rz = cloud_size / 2; - for(u32 i = 0; i < num_faces_to_draw; i++) + bool soft_clouds_enabled = g_settings->getBool("soft_clouds"); + for (u32 i = 0; i < num_faces_to_draw; i++) { - switch(i) + switch (i) { case 0: // top - for (video::S3DVertex &vertex : v) { - vertex.Normal.set(0,1,0); + for (video::S3DVertex& vertex : v) { + vertex.Normal.set(0, 1, 0); } v[0].Pos.set(-rx, ry,-rz); v[1].Pos.set(-rx, ry, rz); @@ -240,12 +247,20 @@ void Clouds::updateMesh() case 1: // back if (INAREA(xi, zi - 1, m_cloud_radius_i)) { u32 j = GETINDEX(xi, zi - 1, m_cloud_radius_i); - if(m_grid[j]) + if (grid[j]) continue; } - for (video::S3DVertex &vertex : v) { - vertex.Color = c_side_1; - vertex.Normal.set(0,0,-1); + if (soft_clouds_enabled) { + for (video::S3DVertex& vertex : v) { + vertex.Normal.set(0, 0, -1); + } + v[2].Color = c_bottom; + v[3].Color = c_bottom; + } else { + for (video::S3DVertex& vertex : v) { + vertex.Color = c_side_1; + vertex.Normal.set(0, 0, -1); + } } v[0].Pos.set(-rx, ry,-rz); v[1].Pos.set( rx, ry,-rz); @@ -254,28 +269,45 @@ void Clouds::updateMesh() break; case 2: //right if (INAREA(xi + 1, zi, m_cloud_radius_i)) { - u32 j = GETINDEX(xi+1, zi, m_cloud_radius_i); - if(m_grid[j]) + u32 j = GETINDEX(xi + 1, zi, m_cloud_radius_i); + if (grid[j]) continue; } - for (video::S3DVertex &vertex : v) { - vertex.Color = c_side_2; - vertex.Normal.set(1,0,0); + if (soft_clouds_enabled) { + for (video::S3DVertex& vertex : v) { + vertex.Normal.set(1, 0, 0); + } + v[2].Color = c_bottom; + v[3].Color = c_bottom; } - v[0].Pos.set( rx, ry,-rz); - v[1].Pos.set( rx, ry, rz); - v[2].Pos.set( rx, 0, rz); - v[3].Pos.set( rx, 0,-rz); + else { + for (video::S3DVertex& vertex : v) { + vertex.Color = c_side_2; + vertex.Normal.set(1, 0, 0); + } + } + v[0].Pos.set(rx, ry,-rz); + v[1].Pos.set(rx, ry, rz); + v[2].Pos.set(rx, 0, rz); + v[3].Pos.set(rx, 0,-rz); break; case 3: // front if (INAREA(xi, zi + 1, m_cloud_radius_i)) { u32 j = GETINDEX(xi, zi + 1, m_cloud_radius_i); - if(m_grid[j]) + if (grid[j]) continue; } - for (video::S3DVertex &vertex : v) { - vertex.Color = c_side_1; - vertex.Normal.set(0,0,-1); + if (soft_clouds_enabled) { + for (video::S3DVertex& vertex : v) { + vertex.Normal.set(0, 0, -1); + } + v[2].Color = c_bottom; + v[3].Color = c_bottom; + } else { + for (video::S3DVertex& vertex : v) { + vertex.Color = c_side_1; + vertex.Normal.set(0, 0, -1); + } } v[0].Pos.set( rx, ry, rz); v[1].Pos.set(-rx, ry, rz); @@ -283,14 +315,22 @@ void Clouds::updateMesh() v[3].Pos.set( rx, 0, rz); break; case 4: // left - if (INAREA(xi-1, zi, m_cloud_radius_i)) { - u32 j = GETINDEX(xi-1, zi, m_cloud_radius_i); - if(m_grid[j]) + if (INAREA(xi - 1, zi, m_cloud_radius_i)) { + u32 j = GETINDEX(xi - 1, zi, m_cloud_radius_i); + if (grid[j]) continue; } - for (video::S3DVertex &vertex : v) { - vertex.Color = c_side_2; - vertex.Normal.set(-1,0,0); + if (soft_clouds_enabled) { + for (video::S3DVertex& vertex : v) { + vertex.Normal.set(-1, 0, 0); + } + v[2].Color = c_bottom; + v[3].Color = c_bottom; + } else { + for (video::S3DVertex& vertex : v) { + vertex.Color = c_side_2; + vertex.Normal.set(-1, 0, 0); + } } v[0].Pos.set(-rx, ry, rz); v[1].Pos.set(-rx, ry,-rz); @@ -298,9 +338,9 @@ void Clouds::updateMesh() v[3].Pos.set(-rx, 0, rz); break; case 5: // bottom - for (video::S3DVertex &vertex : v) { + for (video::S3DVertex& vertex : v) { vertex.Color = c_bottom; - vertex.Normal.set(0,-1,0); + vertex.Normal.set(0, -1, 0); } v[0].Pos.set( rx, 0, rz); v[1].Pos.set(-rx, 0, rz); @@ -313,7 +353,7 @@ void Clouds::updateMesh() for (video::S3DVertex &vertex : v) { vertex.Pos += pos; - mb->Vertices.push_back(vertex); + vertices.push_back(vertex); } } } @@ -323,18 +363,18 @@ void Clouds::updateMesh() const u32 index_count = quad_count * 6; // rewrite index array as needed if (mb->getIndexCount() > index_count) { - mb->Indices.set_used(index_count); + indices.resize(index_count); mb->setDirty(scene::EBT_INDEX); } else if (mb->getIndexCount() < index_count) { const u32 start = mb->getIndexCount() / 6; assert(start * 6 == mb->getIndexCount()); for (u32 k = start; k < quad_count; k++) { - mb->Indices.push_back(4 * k + 0); - mb->Indices.push_back(4 * k + 1); - mb->Indices.push_back(4 * k + 2); - mb->Indices.push_back(4 * k + 2); - mb->Indices.push_back(4 * k + 3); - mb->Indices.push_back(4 * k + 0); + indices.push_back(4 * k + 0); + indices.push_back(4 * k + 1); + indices.push_back(4 * k + 2); + indices.push_back(4 * k + 2); + indices.push_back(4 * k + 3); + indices.push_back(4 * k + 0); } mb->setDirty(scene::EBT_INDEX); } @@ -364,9 +404,9 @@ void Clouds::render() updateAbsolutePosition(); } - m_material.BackfaceCulling = m_enable_3d; + m_material.BackfaceCulling = is3D(); if (m_enable_shaders) - m_material.EmissiveColor = m_color.toSColor(); + m_material.ColorParam = m_color.toSColor(); driver->setTransform(video::ETS_WORLD, AbsoluteTransformation); driver->setMaterial(m_material); @@ -441,7 +481,7 @@ void Clouds::update(const v3f &camera_p, const video::SColorf &color_diffuse) // is the camera inside the cloud mesh? m_camera_pos = camera_p; m_camera_inside_cloud = false; // default - if (m_enable_3d) { + if (is3D()) { float camera_height = camera_p.Y - BS * m_camera_offset.Y; if (camera_height >= m_box.MinEdge.Y && camera_height <= m_box.MaxEdge.Y) { diff --git a/src/client/clouds.h b/src/client/clouds.h index 75b0f2a36..67a2aed28 100644 --- a/src/client/clouds.h +++ b/src/client/clouds.h @@ -19,20 +19,28 @@ with this program; if not, write to the Free Software Foundation, Inc., #pragma once +#include "irrlichttypes_bloated.h" #include "constants.h" #include "irr_ptr.h" -#include "irrlichttypes_extrabloated.h" #include "skyparams.h" #include +#include +#include +#include class IShaderSource; -// Menu clouds -class Clouds; -extern Clouds *g_menuclouds; +namespace irr::scene +{ + class ISceneManager; +} -// Scene manager used for menu clouds +// Menu clouds +// The mainmenu and the loading screen use the same Clouds object so that the +// clouds don't jump when switching between the two. +class Clouds; extern scene::ISceneManager *g_menucloudsmgr; +extern Clouds *g_menuclouds; class Clouds : public scene::ISceneNode { @@ -107,6 +115,14 @@ public: m_params.color_ambient = color_ambient; } + void setColorShadow(video::SColor color_shadow) + { + if (m_params.color_shadow == color_shadow) + return; + m_params.color_shadow = color_shadow; + invalidateMesh(); + } + void setHeight(float height) { if (m_params.height == height) @@ -157,8 +173,8 @@ private: { float height_bs = m_params.height * BS; float thickness_bs = m_params.thickness * BS; - m_box = aabb3f(-BS * 1000000.0f, height_bs - BS * m_camera_offset.Y, -BS * 1000000.0f, - BS * 1000000.0f, height_bs + thickness_bs - BS * m_camera_offset.Y, BS * 1000000.0f); + m_box = aabb3f(-BS * 1000000.0f, height_bs, -BS * 1000000.0f, + BS * 1000000.0f, height_bs + thickness_bs, BS * 1000000.0f); } void updateMesh(); @@ -169,7 +185,10 @@ private: bool gridFilled(int x, int y) const; - video::ITexture *m_density_texture = nullptr; + // Are the clouds 3D? + inline bool is3D() const { + return m_enable_3d && m_params.thickness >= 0.01f; + } video::SMaterial m_material; irr_ptr m_meshbuffer; diff --git a/src/client/content_cao.cpp b/src/client/content_cao.cpp index 0044cc16e..adec70983 100644 --- a/src/client/content_cao.cpp +++ b/src/client/content_cao.cpp @@ -186,6 +186,12 @@ static bool logOnce(const std::ostringstream &from, std::ostream &log_to) return true; } +static void setColorParam(scene::ISceneNode *node, video::SColor color) +{ + for (u32 i = 0; i < node->getMaterialCount(); ++i) + node->getMaterial(i).ColorParam = color; +} + /* TestCAO */ @@ -255,7 +261,6 @@ void TestCAO::addToScene(ITextureSource *tsrc, scene::ISceneManager *smgr) u16 indices[] = {0,1,2,2,3,0}; buf->append(vertices, 4, indices, 6); // Set material - buf->getMaterial().Lighting = false; buf->getMaterial().BackfaceCulling = false; buf->getMaterial().TextureLayers[0].Texture = tsrc->getTextureForMesh("rat.png"); buf->getMaterial().TextureLayers[0].MinFilter = video::ETMINF_NEAREST_MIPMAP_NEAREST; @@ -385,7 +390,7 @@ void GenericCAO::processInitData(const std::string &data) if (m_is_player) { // Check if it's the current player LocalPlayer *player = m_env->getLocalPlayer(); - if (player && strcmp(player->getName(), m_name.c_str()) == 0) { + if (player && player->getName() == m_name) { m_is_local_player = true; m_is_visible = false; player->setCAO(this); @@ -465,7 +470,7 @@ scene::IAnimatedMeshSceneNode *GenericCAO::getAnimatedMeshSceneNode() const void GenericCAO::setChildrenVisible(bool toset) { - for (u16 cao_id : m_attachment_child_ids) { + for (object_t cao_id : m_attachment_child_ids) { GenericCAO *obj = m_env->getGenericCAO(cao_id); if (obj) { // Check if the entity is forced to appear in first person. @@ -474,10 +479,10 @@ void GenericCAO::setChildrenVisible(bool toset) } } -void GenericCAO::setAttachment(int parent_id, const std::string &bone, +void GenericCAO::setAttachment(object_t parent_id, const std::string &bone, v3f position, v3f rotation, bool force_visible) { - int old_parent = m_attachment_parent_id; + const auto old_parent = m_attachment_parent_id; m_attachment_parent_id = parent_id; m_attachment_bone = bone; m_attachment_position = position; @@ -509,7 +514,7 @@ void GenericCAO::setAttachment(int parent_id, const std::string &bone, } } -void GenericCAO::getAttachment(int *parent_id, std::string *bone, v3f *position, +void GenericCAO::getAttachment(object_t *parent_id, std::string *bone, v3f *position, v3f *rotation, bool *force_visible) const { *parent_id = m_attachment_parent_id; @@ -523,29 +528,21 @@ void GenericCAO::clearChildAttachments() { // Cannot use for-loop here: setAttachment() modifies 'm_attachment_child_ids'! while (!m_attachment_child_ids.empty()) { - int child_id = *m_attachment_child_ids.begin(); + const auto child_id = *m_attachment_child_ids.begin(); - if (ClientActiveObject *child = m_env->getActiveObject(child_id)) - child->setAttachment(0, "", v3f(), v3f(), false); - - removeAttachmentChild(child_id); + if (auto *child = m_env->getActiveObject(child_id)) + child->clearParentAttachment(); + else + removeAttachmentChild(child_id); } } -void GenericCAO::clearParentAttachment() -{ - if (m_attachment_parent_id) - setAttachment(0, "", m_attachment_position, m_attachment_rotation, false); - else - setAttachment(0, "", v3f(), v3f(), false); -} - -void GenericCAO::addAttachmentChild(int child_id) +void GenericCAO::addAttachmentChild(object_t child_id) { m_attachment_child_ids.insert(child_id); } -void GenericCAO::removeAttachmentChild(int child_id) +void GenericCAO::removeAttachmentChild(object_t child_id) { m_attachment_child_ids.erase(child_id); } @@ -650,12 +647,7 @@ void GenericCAO::addToScene(ITextureSource *tsrc, scene::ISceneManager *smgr) auto setMaterial = [this] (video::SMaterial &mat) { mat.MaterialType = m_material_type; - mat.Lighting = false; mat.FogEnable = true; - if (m_enable_shaders) { - mat.GouraudShading = false; - mat.NormalizeNormals = true; - } mat.forEachTexture([] (auto &tex) { tex.MinFilter = video::ETMINF_NEAREST_MIPMAP_NEAREST; tex.MagFilter = video::ETMAGF_NEAREST; @@ -712,7 +704,7 @@ void GenericCAO::addToScene(ITextureSource *tsrc, scene::ISceneManager *smgr) // Set material setMaterial(buf->getMaterial()); if (m_enable_shaders) { - buf->getMaterial().EmissiveColor = c; + buf->getMaterial().ColorParam = c; } // Add to mesh @@ -738,7 +730,7 @@ void GenericCAO::addToScene(ITextureSource *tsrc, scene::ISceneManager *smgr) // Set material setMaterial(buf->getMaterial()); if (m_enable_shaders) { - buf->getMaterial().EmissiveColor = c; + buf->getMaterial().ColorParam = c; } // Add to mesh @@ -782,8 +774,6 @@ void GenericCAO::addToScene(ITextureSource *tsrc, scene::ISceneManager *smgr) // set vertex colors to ensure alpha is set setMeshColor(m_animated_meshnode->getMesh(), video::SColor(0xFFFFFFFF)); - setAnimatedMeshColor(m_animated_meshnode, video::SColor(0xFFFFFFFF)); - setSceneNodeMaterials(m_animated_meshnode); m_animated_meshnode->forEachMaterial([this] (auto &mat) { @@ -818,15 +808,21 @@ void GenericCAO::addToScene(ITextureSource *tsrc, scene::ISceneManager *smgr) } /* Set VBO hint */ - // - if shaders are disabled we modify the mesh often - // - sprites are also modified often - // - the wieldmesh sets its own hint - // - bone transformations do not need to modify the vertex data + // wieldmesh sets its own hint, no need to handle it if (m_enable_shaders && (m_meshnode || m_animated_meshnode)) { - if (m_meshnode) + // sprite uses vertex animation + if (m_meshnode && m_prop.visual != "upright_sprite") m_meshnode->getMesh()->setHardwareMappingHint(scene::EHM_STATIC); - if (m_animated_meshnode) - m_animated_meshnode->getMesh()->setHardwareMappingHint(scene::EHM_STATIC); + + if (m_animated_meshnode) { + auto *mesh = m_animated_meshnode->getMesh(); + // skinning happens on the CPU + if (m_animated_meshnode->getJointCount() > 0) + mesh->setHardwareMappingHint(scene::EHM_STREAM, scene::EBT_VERTEX); + else + mesh->setHardwareMappingHint(scene::EHM_STATIC, scene::EBT_VERTEX); + mesh->setHardwareMappingHint(scene::EHM_STATIC, scene::EBT_INDEX); + } } /* don't update while punch texture modifier is active */ @@ -852,14 +848,19 @@ void GenericCAO::addToScene(ITextureSource *tsrc, scene::ISceneManager *smgr) if (m_animated_meshnode) { u32 mat_count = m_animated_meshnode->getMaterialCount(); + assert(mat_count == m_animated_meshnode->getMesh()->getMeshBufferCount()); + u32 max_tex_idx = 0; + for (u32 i = 0; i < mat_count; ++i) { + max_tex_idx = std::max(max_tex_idx, + m_animated_meshnode->getMesh()->getTextureSlot(i)); + } if (mat_count == 0 || m_prop.textures.empty()) { // nothing - } else if (mat_count > m_prop.textures.size()) { + } else if (max_tex_idx >= m_prop.textures.size()) { std::ostringstream oss; oss << "GenericCAO::addToScene(): Model " - << m_prop.mesh << " loaded with " << mat_count - << " mesh buffers but only " << m_prop.textures.size() - << " texture(s) specified, this is deprecated."; + << m_prop.mesh << " is missing " << (max_tex_idx + 1 - m_prop.textures.size()) + << " more texture(s), this is deprecated."; logOnce(oss, warningstream); video::ITexture *last = m_animated_meshnode->getMaterial(0).TextureLayers[0].Texture; @@ -926,26 +927,15 @@ void GenericCAO::setNodeLight(const video::SColor &light_color) } if (m_enable_shaders) { - if (m_prop.visual == "upright_sprite") { - if (!m_meshnode) - return; - for (u32 i = 0; i < m_meshnode->getMaterialCount(); ++i) - m_meshnode->getMaterial(i).EmissiveColor = light_color; - } else { - scene::ISceneNode *node = getSceneNode(); - if (!node) - return; - - for (u32 i = 0; i < node->getMaterialCount(); ++i) { - video::SMaterial &material = node->getMaterial(i); - material.EmissiveColor = light_color; - } - } + auto *node = getSceneNode(); + if (!node) + return; + setColorParam(node, light_color); } else { if (m_meshnode) { setMeshColor(m_meshnode->getMesh(), light_color); } else if (m_animated_meshnode) { - setAnimatedMeshColor(m_animated_meshnode, light_color); + setMeshColor(m_animated_meshnode->getMesh(), light_color); } else if (m_spritenode) { m_spritenode->setColor(light_color); } @@ -1267,6 +1257,16 @@ void GenericCAO::step(float dtime, ClientEnvironment *env) } } +static void setMeshBufferTextureCoords(scene::IMeshBuffer *buf, const v2f *uv, u32 count) +{ + assert(buf->getVertexType() == video::EVT_STANDARD); + assert(buf->getVertexCount() == count); + auto *vertices = static_cast(buf->getVertices()); + for (u32 i = 0; i < count; i++) + vertices[i].TCoords = uv[i]; + buf->setDirty(scene::EBT_VERTEX); +} + void GenericCAO::updateTexturePos() { if(m_spritenode) @@ -1360,15 +1360,6 @@ void GenericCAO::updateTextures(std::string mod) material.MaterialTypeParam = m_material_type_param; material.setTexture(0, tsrc->getTextureForMesh(texturestring)); - // This allows setting per-material colors. However, until a real lighting - // system is added, the code below will have no effect. Once MineTest - // has directional lighting, it should work automatically. - if (!m_prop.colors.empty()) { - material.AmbientColor = m_prop.colors[0]; - material.DiffuseColor = m_prop.colors[0]; - material.SpecularColor = m_prop.colors[0]; - } - material.forEachTexture([=] (auto &tex) { setMaterialFilters(tex, use_bilinear_filter, use_trilinear_filter, use_anisotropic_filter); @@ -1378,9 +1369,11 @@ void GenericCAO::updateTextures(std::string mod) else if (m_animated_meshnode) { if (m_prop.visual == "mesh") { - for (u32 i = 0; i < m_prop.textures.size() && - i < m_animated_meshnode->getMaterialCount(); ++i) { - std::string texturestring = m_prop.textures[i]; + for (u32 i = 0; i < m_animated_meshnode->getMaterialCount(); ++i) { + const auto texture_idx = m_animated_meshnode->getMesh()->getTextureSlot(i); + if (texture_idx >= m_prop.textures.size()) + continue; + std::string texturestring = m_prop.textures[texture_idx]; if (texturestring.empty()) continue; // Empty texture string means don't modify that material texturestring += mod; @@ -1395,7 +1388,6 @@ void GenericCAO::updateTextures(std::string mod) material.MaterialType = m_material_type; material.MaterialTypeParam = m_material_type_param; material.TextureLayers[0].Texture = texture; - material.Lighting = true; material.BackfaceCulling = m_prop.backface_culling; // don't filter low-res textures, makes them look blurry @@ -1410,17 +1402,6 @@ void GenericCAO::updateTextures(std::string mod) use_anisotropic_filter); }); } - for (u32 i = 0; i < m_prop.colors.size() && - i < m_animated_meshnode->getMaterialCount(); ++i) - { - video::SMaterial &material = m_animated_meshnode->getMaterial(i); - // This allows setting per-material colors. However, until a real lighting - // system is added, the code below will have no effect. Once MineTest - // has directional lighting, it should work automatically. - material.AmbientColor = m_prop.colors[i]; - material.DiffuseColor = m_prop.colors[i]; - material.SpecularColor = m_prop.colors[i]; - } } } @@ -1438,20 +1419,9 @@ void GenericCAO::updateTextures(std::string mod) video::SMaterial &material = m_meshnode->getMaterial(i); material.MaterialType = m_material_type; material.MaterialTypeParam = m_material_type_param; - material.Lighting = false; material.setTexture(0, tsrc->getTextureForMesh(texturestring)); material.getTextureMatrix(0).makeIdentity(); - // This allows setting per-material colors. However, until a real lighting - // system is added, the code below will have no effect. Once MineTest - // has directional lighting, it should work automatically. - if(m_prop.colors.size() > i) - { - material.AmbientColor = m_prop.colors[i]; - material.DiffuseColor = m_prop.colors[i]; - material.SpecularColor = m_prop.colors[i]; - } - material.forEachTexture([=] (auto &tex) { setMaterialFilters(tex, use_bilinear_filter, use_trilinear_filter, use_anisotropic_filter); @@ -1468,15 +1438,6 @@ void GenericCAO::updateTextures(std::string mod) auto &material = m_meshnode->getMaterial(0); material.setTexture(0, tsrc->getTextureForMesh(tname)); - // This allows setting per-material colors. However, until a real lighting - // system is added, the code below will have no effect. Once MineTest - // has directional lighting, it should work automatically. - if(!m_prop.colors.empty()) { - material.AmbientColor = m_prop.colors[0]; - material.DiffuseColor = m_prop.colors[0]; - material.SpecularColor = m_prop.colors[0]; - } - material.forEachTexture([=] (auto &tex) { setMaterialFilters(tex, use_bilinear_filter, use_trilinear_filter, use_anisotropic_filter); @@ -1493,19 +1454,6 @@ void GenericCAO::updateTextures(std::string mod) auto &material = m_meshnode->getMaterial(1); material.setTexture(0, tsrc->getTextureForMesh(tname)); - // This allows setting per-material colors. However, until a real lighting - // system is added, the code below will have no effect. Once MineTest - // has directional lighting, it should work automatically. - if (m_prop.colors.size() >= 2) { - material.AmbientColor = m_prop.colors[1]; - material.DiffuseColor = m_prop.colors[1]; - material.SpecularColor = m_prop.colors[1]; - } else if (!m_prop.colors.empty()) { - material.AmbientColor = m_prop.colors[0]; - material.DiffuseColor = m_prop.colors[0]; - material.SpecularColor = m_prop.colors[0]; - } - material.forEachTexture([=] (auto &tex) { setMaterialFilters(tex, use_bilinear_filter, use_trilinear_filter, use_anisotropic_filter); @@ -1526,9 +1474,8 @@ void GenericCAO::updateAnimation() if (!m_animated_meshnode) return; - if (m_animated_meshnode->getStartFrame() != m_animation_range.X || - m_animated_meshnode->getEndFrame() != m_animation_range.Y) - m_animated_meshnode->setFrameLoop(m_animation_range.X, m_animation_range.Y); + // Note: This sets the current frame as well, (re)starting the animation. + m_animated_meshnode->setFrameLoop(m_animation_range.X, m_animation_range.Y); if (m_animated_meshnode->getAnimationSpeed() != m_animation_speed) m_animated_meshnode->setAnimationSpeed(m_animation_speed); m_animated_meshnode->setTransitionTime(m_animation_blend); diff --git a/src/client/content_cao.h b/src/client/content_cao.h index 7fdcb73da..3fdf01bc7 100644 --- a/src/client/content_cao.h +++ b/src/client/content_cao.h @@ -106,8 +106,8 @@ private: // stores position and rotation for each bone name BoneOverrideMap m_bone_override; - int m_attachment_parent_id = 0; - std::unordered_set m_attachment_child_ids; + object_t m_attachment_parent_id = 0; + std::unordered_set m_attachment_child_ids; std::string m_attachment_bone = ""; v3f m_attachment_position; v3f m_attachment_rotation; @@ -226,16 +226,15 @@ public: } void setChildrenVisible(bool toset); - void setAttachment(int parent_id, const std::string &bone, v3f position, + void setAttachment(object_t parent_id, const std::string &bone, v3f position, v3f rotation, bool force_visible) override; - void getAttachment(int *parent_id, std::string *bone, v3f *position, + void getAttachment(object_t *parent_id, std::string *bone, v3f *position, v3f *rotation, bool *force_visible) const override; void clearChildAttachments() override; - void clearParentAttachment() override; - void addAttachmentChild(int child_id) override; - void removeAttachmentChild(int child_id) override; + void addAttachmentChild(object_t child_id) override; + void removeAttachmentChild(object_t child_id) override; ClientActiveObject *getParent() const override; - const std::unordered_set &getAttachmentChildIds() const override + const std::unordered_set &getAttachmentChildIds() const override { return m_attachment_child_ids; } void updateAttachments() override; diff --git a/src/client/content_cso.cpp b/src/client/content_cso.cpp index c175df72e..733044b23 100644 --- a/src/client/content_cso.cpp +++ b/src/client/content_cso.cpp @@ -19,6 +19,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "content_cso.h" #include +#include #include "client/texturesource.h" #include "clientenvironment.h" #include "client.h" @@ -39,7 +40,6 @@ public: video::ITexture *tex = env->getGameDef()->tsrc()->getTextureForMesh("smoke_puff.png"); m_spritenode->forEachMaterial([tex] (auto &mat) { mat.TextureLayers[0].Texture = tex; - mat.Lighting = false; mat.TextureLayers[0].MinFilter = video::ETMINF_NEAREST_MIPMAP_NEAREST; mat.TextureLayers[0].MagFilter = video::ETMAGF_NEAREST; mat.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL; diff --git a/src/client/content_cso.h b/src/client/content_cso.h index cc9213175..b94580a61 100644 --- a/src/client/content_cso.h +++ b/src/client/content_cso.h @@ -19,8 +19,13 @@ with this program; if not, write to the Free Software Foundation, Inc., #pragma once -#include "irrlichttypes_extrabloated.h" +#include "irrlichttypes_bloated.h" #include "clientsimpleobject.h" +namespace irr::scene +{ + class ISceneManager; +} + ClientSimpleObject* createSmokePuff(scene::ISceneManager *smgr, ClientEnvironment *env, v3f pos, v2f size); diff --git a/src/client/content_mapblock.cpp b/src/client/content_mapblock.cpp index c351c4b80..2a1352139 100644 --- a/src/client/content_mapblock.cpp +++ b/src/client/content_mapblock.cpp @@ -19,8 +19,10 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include "content_mapblock.h" +#include "util/basic_macros.h" #include "util/numeric.h" #include "util/directiontables.h" +#include "util/tracy_wrapper.h" #include "mapblock_mesh.h" #include "settings.h" #include "nodedef.h" @@ -81,7 +83,8 @@ MapblockMeshGenerator::MapblockMeshGenerator(MeshMakeData *input, MeshCollector 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 + !data->m_smooth_lighting), // Mesh cache is not supported with smooth lighting + smooth_liquids(g_settings->getBool("enable_water_reflections")) { } @@ -463,6 +466,8 @@ void MapblockMeshGenerator::drawSolidNode() if (data->m_smooth_lighting) { LightPair lights[6][4]; for (int face = 0; face < 6; ++face) { + if (mask & (1 << face)) + continue; for (int k = 0; k < 4; k++) { v3s16 corner = light_dirs[light_indices[face][k]]; lights[face][k] = LightPair(getSmoothLightSolid( @@ -713,7 +718,7 @@ void MapblockMeshGenerator::drawLiquidSides() if (data->m_smooth_lighting) cur_node.color = blendLightColor(pos); pos += cur_node.origin; - vertices[j] = video::S3DVertex(pos.X, pos.Y, pos.Z, 0, 0, 0, cur_node.color, vertex.u, v); + vertices[j] = video::S3DVertex(pos.X, pos.Y, pos.Z, face.dir.X, face.dir.Y, face.dir.Z, cur_node.color, vertex.u, v); }; collector->append(cur_liquid.tile, vertices, 4, quad_indices, 6); } @@ -736,6 +741,19 @@ void MapblockMeshGenerator::drawLiquidTop() for (int i = 0; i < 4; i++) { int u = corner_resolve[i][0]; int w = corner_resolve[i][1]; + + if (smooth_liquids) { + int x = vertices[i].Pos.X > 0; + int z = vertices[i].Pos.Z > 0; + + f32 dx = 0.5f * (cur_liquid.neighbors[z][x].level - cur_liquid.neighbors[z][x + 1].level + + cur_liquid.neighbors[z + 1][x].level - cur_liquid.neighbors[z + 1][x + 1].level); + f32 dz = 0.5f * (cur_liquid.neighbors[z][x].level - cur_liquid.neighbors[z + 1][x].level + + cur_liquid.neighbors[z][x + 1].level - cur_liquid.neighbors[z + 1][x + 1].level); + + vertices[i].Normal = v3f(dx, 1., dz).normalize(); + } + vertices[i].Pos.Y += cur_liquid.corner_levels[w][u] * BS; if (data->m_smooth_lighting) vertices[i].Color = blendLightColor(vertices[i].Pos); @@ -775,6 +793,10 @@ void MapblockMeshGenerator::drawLiquidTop() vertex.TCoords += tcoord_center; vertex.TCoords += tcoord_translate; + + if (!smooth_liquids) { + vertex.Normal = v3f(dx, 1., dz).normalize(); + } } std::swap(vertices[0].TCoords, vertices[2].TCoords); @@ -1674,7 +1696,9 @@ void MapblockMeshGenerator::drawMeshNode() int mesh_buffer_count = mesh->getMeshBufferCount(); for (int j = 0; j < mesh_buffer_count; j++) { - useTile(j); + // Only up to 6 tiles are supported + const auto tile = mesh->getTextureSlot(j); + useTile(MYMIN(tile, 5)); scene::IMeshBuffer *buf = mesh->getMeshBuffer(j); video::S3DVertex *vertices = (video::S3DVertex *)buf->getVertices(); int vertex_count = buf->getVertexCount(); @@ -1745,6 +1769,8 @@ void MapblockMeshGenerator::drawNode() void MapblockMeshGenerator::generate() { + ZoneScoped; + for (cur_node.p.Z = 0; cur_node.p.Z < data->side_length; cur_node.p.Z++) for (cur_node.p.Y = 0; cur_node.p.Y < data->side_length; cur_node.p.Y++) for (cur_node.p.X = 0; cur_node.p.X < data->side_length; cur_node.p.X++) { diff --git a/src/client/content_mapblock.h b/src/client/content_mapblock.h index 730330a03..1c3060c83 100644 --- a/src/client/content_mapblock.h +++ b/src/client/content_mapblock.h @@ -134,6 +134,7 @@ private: f32 corner_levels[2][2]; }; LiquidData cur_liquid; + bool smooth_liquids = false; void prepareLiquidNodeDrawing(); void getLiquidNeighborhood(); diff --git a/src/client/filecache.cpp b/src/client/filecache.cpp index 1f7e605d1..4dd7ec72f 100644 --- a/src/client/filecache.cpp +++ b/src/client/filecache.cpp @@ -20,7 +20,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "filecache.h" -#include "network/networkprotocol.h" #include "log.h" #include "filesys.h" #include diff --git a/src/client/fontengine.cpp b/src/client/fontengine.cpp index 0b1b0928e..e0174e011 100644 --- a/src/client/fontengine.cpp +++ b/src/client/fontengine.cpp @@ -59,7 +59,7 @@ FontEngine::FontEngine(gui::IGUIEnvironment* env) : "mono_font_path", "mono_font_path_bold", "mono_font_path_italic", "mono_font_path_bold_italic", "fallback_font_path", - "screen_dpi", "gui_scaling", + "dpi_change_notifier", "gui_scaling", }; for (auto name : settings) diff --git a/src/client/game.cpp b/src/client/game.cpp index 0de80dfbb..0761f700f 100644 --- a/src/client/game.cpp +++ b/src/client/game.cpp @@ -40,7 +40,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "content/subgames.h" #include "client/event_manager.h" #include "fontengine.h" -#include "gui/touchscreengui.h" +#include "gui/touchcontrols.h" #include "itemdef.h" #include "log.h" #include "filesys.h" @@ -79,6 +79,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "hud.h" #include "clientdynamicinfo.h" #include +#include "util/tracy_wrapper.h" #if USE_SOUND #include "client/sound/sound_openal.h" @@ -185,7 +186,7 @@ struct LocalFormspecHandler : public TextDest assert(m_client != nullptr); if (fields.find("quit") != fields.end()) - m_client->sendRespawn(); + m_client->sendRespawnLegacy(); return; } @@ -535,6 +536,10 @@ public: float camera_far = m_client->getCamera()->getCameraNode()->getFarValue(); m_camera_far_pixel.set(&camera_far, services); + v3f camera_position = m_client->getCamera()->getPosition(); + m_camera_position_pixel.set(camera_position, services); + m_camera_position_pixel.set(camera_position, services); + SamplerLayer_t tex_id; tex_id = 0; m_texture0.set(&tex_id, services); @@ -659,7 +664,8 @@ public: m_client(client) {} - void setSky(Sky *sky) { + void setSky(Sky *sky) + { m_sky = sky; for (GameGlobalShaderConstantSetter *ggscs : created_nosky) { ggscs->setSky(m_sky); @@ -894,7 +900,7 @@ private: bool disable_camera_update = false; }; - void showDeathFormspec(); + void showDeathFormspecLegacy(); void showPauseMenu(); void pauseAnimation(); @@ -904,7 +910,7 @@ private: void handleClientEvent_None(ClientEvent *event, CameraOrientation *cam); void handleClientEvent_PlayerDamage(ClientEvent *event, CameraOrientation *cam); void handleClientEvent_PlayerForceMove(ClientEvent *event, CameraOrientation *cam); - void handleClientEvent_Deathscreen(ClientEvent *event, CameraOrientation *cam); + void handleClientEvent_DeathscreenLegacy(ClientEvent *event, CameraOrientation *cam); void handleClientEvent_ShowFormSpec(ClientEvent *event, CameraOrientation *cam); void handleClientEvent_ShowLocalFormSpec(ClientEvent *event, CameraOrientation *cam); void handleClientEvent_HandleParticleEvent(ClientEvent *event, @@ -954,11 +960,11 @@ private: QuicktuneShortcutter *quicktune = nullptr; std::unique_ptr m_game_ui; - GUIChatConsole *gui_chat_console = nullptr; // Free using ->Drop() + irr_ptr gui_chat_console; MapDrawControl *draw_control = nullptr; Camera *camera = nullptr; - Clouds *clouds = nullptr; // Free using ->Drop() - Sky *sky = nullptr; // Free using ->Drop() + irr_ptr clouds; + irr_ptr sky; Hud *hud = nullptr; Minimap *mapper = nullptr; @@ -1205,6 +1211,8 @@ bool Game::startup(bool *kill, void Game::run() { + ZoneScoped; + ProfilerGraph graph; RunStats stats = {}; CameraOrientation cam_view_target = {}; @@ -1232,15 +1240,21 @@ void Game::run() const bool initial_window_maximized = !g_settings->getBool("fullscreen") && g_settings->getBool("window_maximized"); + auto framemarker = FrameMarker("Game::run()-frame").started(); + while (m_rendering_engine->run() && !(*kill || g_gamecallback->shutdown_requested || (server && server->isShutdownRequested()))) { + framemarker.end(); + // Calculate dtime = // m_rendering_engine->run() from this iteration // + Sleep time until the wanted FPS are reached draw_times.limit(device, &dtime, g_menumgr.pausesGame()); + framemarker.start(); + const auto current_dynamic_info = ClientDynamicInfo::getCurrent(); if (!current_dynamic_info.equal(client_display_info)) { client_display_info = current_dynamic_info; @@ -1297,6 +1311,8 @@ void Game::run() } } + framemarker.end(); + RenderingEngine::autosaveScreensizeAndCo(initial_screen_size, initial_window_maximized); } @@ -1310,21 +1326,18 @@ void Game::shutdown() // Clear text when exiting. m_game_ui->clearText(); - if (g_touchscreengui) - g_touchscreengui->hide(); + if (g_touchcontrols) + g_touchcontrols->hide(); // only if the shutdown progress bar isn't shown yet if (m_shutdown_progress == 0.0f) showOverlayMessage(N_("Shutting down..."), 0, 0); - if (clouds) - clouds->drop(); + clouds.reset(); - if (gui_chat_console) - gui_chat_console->drop(); + gui_chat_console.reset(); - if (sky) - sky->drop(); + sky.reset(); /* cleanup menus */ while (g_menumgr.menuCount() > 0) { @@ -1511,7 +1524,7 @@ void Game::copyServerClientCache() { // It would be possible to let the client directly read the media files // from where the server knows they are. But aside from being more complicated - // it would also *not* fill the media cache and cause slower joining of + // it would also *not* fill the media cache and cause slower joining of // remote servers. // (Imagine that you launch a game once locally and then connect to a server.) @@ -1575,20 +1588,16 @@ bool Game::createClient(const GameStartData &start_data) client->getScript()->on_camera_ready(camera); client->setCamera(camera); - if (g_touchscreengui) { - g_touchscreengui->setUseCrosshair(!isTouchCrosshairDisabled()); - } - /* Clouds */ if (m_cache_enable_clouds) - clouds = new Clouds(smgr, shader_src, -1, rand()); + clouds = make_irr(smgr, shader_src, -1, rand()); client->setClouds(clouds); /* Skybox */ - sky = new Sky(-1, m_rendering_engine, texture_src, shader_src); - scsf->setSky(sky); + sky = make_irr(-1, m_rendering_engine, texture_src, shader_src); + scsf->setSky(sky.get()); /* Pre-calculated values */ @@ -1641,11 +1650,13 @@ bool Game::initGui() chat_backend->applySettings(); // Chat backend and console - gui_chat_console = new GUIChatConsole(guienv, guienv->getRootGUIElement(), + gui_chat_console = make_irr(guienv, guienv->getRootGUIElement(), -1, chat_backend, client, &g_menumgr); - if (g_settings->getBool("enable_touch")) - g_touchscreengui = new TouchScreenGUI(device, texture_src); + if (g_settings->getBool("touch_controls")) { + g_touchcontrols = new TouchControls(device, texture_src); + g_touchcontrols->setUseCrosshair(!isTouchCrosshairDisabled()); + } return true; } @@ -1739,9 +1750,13 @@ bool Game::connectToServer(const GameStartData &start_data, fps_control.reset(); + auto framemarker = FrameMarker("Game::connectToServer()-frame").started(); + while (m_rendering_engine->run()) { + framemarker.end(); fps_control.limit(device, &dtime); + framemarker.start(); // Update client and server step(dtime); @@ -1787,6 +1802,7 @@ bool Game::connectToServer(const GameStartData &start_data, // Update status showOverlayMessage(N_("Connecting to server..."), dtime, 20); } + framemarker.end(); } catch (con::PeerNotFoundException &e) { warningstream << "This should not happen. Please report a bug." << std::endl; return false; @@ -1804,9 +1820,11 @@ bool Game::getServerContent(bool *aborted) fps_control.reset(); + auto framemarker = FrameMarker("Game::getServerContent()-frame").started(); while (m_rendering_engine->run()) { - + framemarker.end(); fps_control.limit(device, &dtime); + framemarker.start(); // Update client and server step(dtime); @@ -1872,6 +1890,7 @@ bool Game::getServerContent(bool *aborted) texture_src, dtime, progress); } } + framemarker.end(); *aborted = true; infostream << "Connect aborted [device]" << std::endl; @@ -1922,26 +1941,26 @@ inline bool Game::handleCallbacks() } if (g_gamecallback->changepassword_requested) { - (new GUIPasswordChange(guienv, guiroot, -1, - &g_menumgr, client, texture_src))->drop(); + (void)make_irr(guienv, guiroot, -1, + &g_menumgr, client, texture_src); g_gamecallback->changepassword_requested = false; } if (g_gamecallback->changevolume_requested) { - (new GUIVolumeChange(guienv, guiroot, -1, - &g_menumgr, texture_src))->drop(); + (void)make_irr(guienv, guiroot, -1, + &g_menumgr, texture_src); g_gamecallback->changevolume_requested = false; } if (g_gamecallback->keyconfig_requested) { - (new GUIKeyChangeMenu(guienv, guiroot, -1, - &g_menumgr, texture_src))->drop(); + (void)make_irr(guienv, guiroot, -1, + &g_menumgr, texture_src); g_gamecallback->keyconfig_requested = false; } if (!g_gamecallback->show_open_url_dialog.empty()) { - (new GUIOpenURLMenu(guienv, guiroot, -1, - &g_menumgr, texture_src, g_gamecallback->show_open_url_dialog))->drop(); + (void)make_irr(guienv, guiroot, -1, + &g_menumgr, texture_src, g_gamecallback->show_open_url_dialog); g_gamecallback->show_open_url_dialog.clear(); } @@ -1980,6 +1999,10 @@ void Game::updateDebugState() if (!has_debug) { draw_control->show_wireframe = false; m_flags.disable_camera_update = false; + auto formspec = m_game_ui->getFormspecGUI(); + if (formspec) { + formspec->setDebugView(false); + } } // noclip @@ -2015,6 +2038,14 @@ void Game::updateProfilers(const RunStats &stats, const FpsControl &draw_times, g_profiler->graphAdd("Sleep [us]", draw_times.sleep_time); g_profiler->graphSet("FPS", 1.0f / dtime); + + auto stats2 = driver->getFrameStats(); + g_profiler->avg("Irr: drawcalls", stats2.Drawcalls); + if (stats2.Drawcalls > 0) + g_profiler->avg("Irr: primitives per drawcall", + stats2.PrimitivesDrawn / float(stats2.Drawcalls)); + g_profiler->avg("Irr: buffers uploaded", stats2.HWBuffersUploaded); + g_profiler->avg("Irr: buffers uploaded (bytes)", stats2.HWBuffersUploadedSize); } void Game::updateStats(RunStats *stats, const FpsControl &draw_times, @@ -2075,7 +2106,7 @@ void Game::updateStats(RunStats *stats, const FpsControl &draw_times, void Game::processUserInput(f32 dtime) { // Reset input if window not active or some menu is active - if (!device->isWindowActive() || isMenuActive() || guienv->hasFocus(gui_chat_console)) { + if (!device->isWindowActive() || isMenuActive() || guienv->hasFocus(gui_chat_console.get())) { if (m_game_focused) { m_game_focused = false; infostream << "Game lost focus" << std::endl; @@ -2084,21 +2115,21 @@ void Game::processUserInput(f32 dtime) input->clear(); } - if (g_touchscreengui) - g_touchscreengui->hide(); + if (g_touchcontrols) + g_touchcontrols->hide(); } else { - if (g_touchscreengui) { - /* on touchscreengui step may generate own input events which ain't + if (g_touchcontrols) { + /* on touchcontrols step may generate own input events which ain't * what we want in case we just did clear them */ - g_touchscreengui->show(); - g_touchscreengui->step(dtime); + g_touchcontrols->show(); + g_touchcontrols->step(dtime); } m_game_focused = true; } - if (!guienv->hasFocus(gui_chat_console) && gui_chat_console->isOpen()) { + if (!guienv->hasFocus(gui_chat_console.get()) && gui_chat_console->isOpen()) { gui_chat_console->closeConsoleAtOnce(); } @@ -2250,12 +2281,14 @@ void Game::processItemSelection(u16 *new_playeritem) { LocalPlayer *player = client->getEnv().getLocalPlayer(); + *new_playeritem = player->getWieldIndex(); + u16 max_item = player->getMaxHotbarItemcount(); + if (max_item == 0) + return; + max_item -= 1; + /* Item selection using mouse wheel */ - *new_playeritem = player->getWieldIndex(); - u16 max_item = MYMIN(PLAYER_INVENTORY_SIZE - 1, - player->hud_hotbar_itemcount - 1); - s32 wheel = input->getMouseWheel(); if (!m_enable_hotbar_mouse_wheel) wheel = 0; @@ -2285,8 +2318,8 @@ void Game::processItemSelection(u16 *new_playeritem) } } - if (g_touchscreengui) { - std::optional selection = g_touchscreengui->getHotbarSelection(); + if (g_touchcontrols) { + std::optional selection = g_touchcontrols->getHotbarSelection(); if (selection) *new_playeritem = *selection; } @@ -2691,7 +2724,7 @@ void Game::updateCameraDirection(CameraOrientation *cam, float dtime) this results in duplicated input. To avoid that, we don't enable relative mouse mode if we're in touchscreen mode. */ if (cur_control) - cur_control->setRelativeMode(!g_touchscreengui && !isMenuActive()); + cur_control->setRelativeMode(!g_touchcontrols && !isMenuActive()); if ((device->isWindowActive() && device->isWindowFocused() && !isMenuActive()) || input->isRandom()) { @@ -2734,9 +2767,9 @@ f32 Game::getSensitivityScaleFactor() const void Game::updateCameraOrientation(CameraOrientation *cam, float dtime) { - if (g_touchscreengui) { - cam->camera_yaw += g_touchscreengui->getYawChange(); - cam->camera_pitch += g_touchscreengui->getPitchChange(); + if (g_touchcontrols) { + cam->camera_yaw += g_touchcontrols->getYawChange(); + cam->camera_pitch += g_touchcontrols->getPitchChange(); } else { v2s32 center(driver->getScreenSize().Width / 2, driver->getScreenSize().Height / 2); v2s32 dist = input->getMousePos() - center; @@ -2801,7 +2834,7 @@ void Game::updatePlayerControl(const CameraOrientation &cam) * touch then its meaning is inverted (i.e. holding aux1 means walk and * not fast) */ - if (g_touchscreengui && m_touch_simulate_aux1) { + if (g_touchcontrols && m_touch_simulate_aux1) { control.aux1 = control.aux1 ^ true; } @@ -2827,6 +2860,8 @@ void Game::updatePauseState() inline void Game::step(f32 dtime) { + ZoneScoped; + if (server) { float fps_max = (!device->isWindowFocused() || g_menumgr.pausesGame()) ? g_settings->getFloat("fps_max_unfocused") : @@ -2883,7 +2918,7 @@ const ClientEventHandler Game::clientEventHandler[CLIENTEVENT_MAX] = { {&Game::handleClientEvent_None}, {&Game::handleClientEvent_PlayerDamage}, {&Game::handleClientEvent_PlayerForceMove}, - {&Game::handleClientEvent_Deathscreen}, + {&Game::handleClientEvent_DeathscreenLegacy}, {&Game::handleClientEvent_ShowFormSpec}, {&Game::handleClientEvent_ShowLocalFormSpec}, {&Game::handleClientEvent_HandleParticleEvent}, @@ -2939,20 +2974,9 @@ void Game::handleClientEvent_PlayerForceMove(ClientEvent *event, CameraOrientati cam->camera_pitch = event->player_force_move.pitch; } -void Game::handleClientEvent_Deathscreen(ClientEvent *event, CameraOrientation *cam) +void Game::handleClientEvent_DeathscreenLegacy(ClientEvent *event, CameraOrientation *cam) { - // If client scripting is enabled, deathscreen is handled by CSM code in - // builtin/client/init.lua - if (client->modsLoaded()) - client->getScript()->on_death(); - else - showDeathFormspec(); - - /* Handle visualization */ - LocalPlayer *player = client->getEnv().getLocalPlayer(); - runData.damage_flash = 0; - player->hurt_tilt_timer = 0; - player->hurt_tilt_strength = 0; + showDeathFormspecLegacy(); } void Game::handleClientEvent_ShowFormSpec(ClientEvent *event, CameraOrientation *cam) @@ -3219,6 +3243,7 @@ void Game::handleClientEvent_CloudParams(ClientEvent *event, CameraOrientation * clouds->setDensity(event->cloud_params.density); clouds->setColorBright(video::SColor(event->cloud_params.color_bright)); clouds->setColorAmbient(video::SColor(event->cloud_params.color_ambient)); + clouds->setColorShadow(video::SColor(event->cloud_params.color_shadow)); clouds->setHeight(event->cloud_params.height); clouds->setThickness(event->cloud_params.thickness); clouds->setSpeed(v2f(event->cloud_params.speed_x, event->cloud_params.speed_y)); @@ -3290,8 +3315,8 @@ void Game::updateCamera(f32 dtime) camera->toggleCameraMode(); - if (g_touchscreengui) - g_touchscreengui->setUseCrosshair(!isTouchCrosshairDisabled()); + if (g_touchcontrols) + g_touchcontrols->setUseCrosshair(!isTouchCrosshairDisabled()); // Make the player visible depending on camera mode. playercao->updateMeshCulling(); @@ -3392,8 +3417,8 @@ void Game::processPlayerInteraction(f32 dtime, bool show_hud) } shootline.end = shootline.start + camera_direction * BS * d; - if (g_touchscreengui && isTouchCrosshairDisabled()) { - shootline = g_touchscreengui->getShootline(); + if (g_touchcontrols && isTouchCrosshairDisabled()) { + shootline = g_touchcontrols->getShootline(); // Scale shootline to the acual distance the player can reach shootline.end = shootline.start + shootline.getVector().normalize() * BS * d; @@ -3410,9 +3435,13 @@ void Game::processPlayerInteraction(f32 dtime, bool show_hud) if (pointed != runData.pointed_old) infostream << "Pointing at " << pointed.dump() << std::endl; - if (g_touchscreengui) { - auto mode = selected_def.touch_interaction.getMode(pointed.type); - g_touchscreengui->applyContextControls(mode); + if (g_touchcontrols) { + auto mode = selected_def.touch_interaction.getMode(selected_def, pointed.type); + g_touchcontrols->applyContextControls(mode); + // applyContextControls may change dig/place input. + // Update again so that TOSERVER_INTERACT packets have the correct controls set. + player->control.dig = isKeyDown(KeyType::DIG); + player->control.place = isKeyDown(KeyType::PLACE); } // Note that updating the selection mesh every frame is not particularly efficient, @@ -4049,8 +4078,12 @@ void Game::handleDigging(const PointedThing &pointed, const v3s16 &nodepos, runData.nodig_delay_timer = runData.dig_time_complete / (float)crack_animation_length; - // Don't add a corresponding delay to very time consuming nodes. - runData.nodig_delay_timer = std::min(runData.nodig_delay_timer, 0.3f); + // We don't want a corresponding delay to very time consuming nodes + // and nodes without digging time (e.g. torches) get a fixed delay. + if (runData.nodig_delay_timer > 0.3f) + runData.nodig_delay_timer = 0.3f; + else if (runData.dig_instantly) + runData.nodig_delay_timer = 0.15f; // Ensure that the delay between breaking nodes // (dig_time_complete + nodig_delay_timer) is at least the @@ -4098,6 +4131,7 @@ void Game::handleDigging(const PointedThing &pointed, const v3s16 &nodepos, void Game::updateFrame(ProfilerGraph *graph, RunStats *stats, f32 dtime, const CameraOrientation &cam) { + ZoneScoped; TimeTaker tt_update("Game::updateFrame()"); LocalPlayer *player = client->getEnv().getLocalPlayer(); @@ -4242,7 +4276,8 @@ void Game::updateFrame(ProfilerGraph *graph, RunStats *stats, f32 dtime, updateShadows(); } - m_game_ui->update(*stats, client, draw_control, cam, runData.pointed_old, gui_chat_console, dtime); + m_game_ui->update(*stats, client, draw_control, cam, runData.pointed_old, + gui_chat_console.get(), dtime); /* make sure menu is on top @@ -4340,7 +4375,9 @@ void Game::updateShadows() float timeoftheday = getWickedTimeOfDay(in_timeofday); bool is_day = timeoftheday > 0.25 && timeoftheday < 0.75; bool is_shadow_visible = is_day ? sky->getSunVisible() : sky->getMoonVisible(); - shadow->setShadowIntensity(is_shadow_visible ? client->getEnv().getLocalPlayer()->getLighting().shadow_intensity : 0.0f); + const auto &lighting = client->getEnv().getLocalPlayer()->getLighting(); + shadow->setShadowIntensity(is_shadow_visible ? lighting.shadow_intensity : 0.0f); + shadow->setShadowTint(lighting.shadow_tint); timeoftheday = std::fmod(timeoftheday + 0.75f, 0.5f) + 0.25f; const float offset_constant = 10000.0f; @@ -4357,6 +4394,8 @@ void Game::updateShadows() void Game::drawScene(ProfilerGraph *graph, RunStats *stats) { + ZoneScoped; + const video::SColor fog_color = this->sky->getFogColor(); const video::SColor sky_color = this->sky->getSkyColor(); @@ -4399,7 +4438,7 @@ void Game::drawScene(ProfilerGraph *graph, RunStats *stats) (player->hud_flags & HUD_FLAG_CROSSHAIR_VISIBLE) && (this->camera->getCameraMode() != CAMERA_MODE_THIRD_FRONT)); - if (g_touchscreengui && isTouchCrosshairDisabled()) + if (g_touchcontrols && isTouchCrosshairDisabled()) draw_crosshair = false; this->m_rendering_engine->draw_scene(sky_color, this->m_game_ui->m_flags.show_hud, @@ -4454,8 +4493,8 @@ void Game::readSettings() m_cache_enable_fog = g_settings->getBool("enable_fog"); m_cache_mouse_sensitivity = g_settings->getFloat("mouse_sensitivity", 0.001f, 10.0f); m_cache_joystick_frustum_sensitivity = std::max(g_settings->getFloat("joystick_frustum_sensitivity"), 0.001f); - m_repeat_place_time = g_settings->getFloat("repeat_place_time", 0.15f, 2.0f); - m_repeat_dig_time = g_settings->getFloat("repeat_dig_time", 0.15f, 2.0f); + m_repeat_place_time = g_settings->getFloat("repeat_place_time", 0.16f, 2.0f); + m_repeat_dig_time = g_settings->getFloat("repeat_dig_time", 0.0f, 2.0f); m_cache_enable_noclip = g_settings->getBool("noclip"); m_cache_enable_free_move = g_settings->getBool("free_move"); @@ -4482,7 +4521,7 @@ void Game::readSettings() ****************************************************************************/ /****************************************************************************/ -void Game::showDeathFormspec() +void Game::showDeathFormspecLegacy() { static std::string formspec_str = std::string("formspec_version[1]") + @@ -4510,7 +4549,7 @@ void Game::showPauseMenu() { std::string control_text; - if (g_touchscreengui) { + if (g_touchcontrols) { control_text = strgettext("Controls:\n" "No menu open:\n" "- slide finger: look around\n" diff --git a/src/client/gameui.cpp b/src/client/gameui.cpp index 0577943cb..41071ef66 100644 --- a/src/client/gameui.cpp +++ b/src/client/gameui.cpp @@ -23,10 +23,14 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include "gui/mainmenumanager.h" #include "gui/guiChatConsole.h" +#include "gui/guiFormSpecMenu.h" +#include "gui/touchcontrols.h" +#include "util/enriched_string.h" #include "util/pointedthing.h" #include "client.h" #include "clientmap.h" #include "fontengine.h" +#include "hud.h" // HUD_FLAG_* #include "nodedef.h" #include "profiler.h" #include "renderingengine.h" @@ -188,16 +192,27 @@ void GameUI::update(const RunStats &stats, Client *client, MapDrawControl *draw_ } } - setStaticText(m_guitext_status, m_statustext.c_str()); - m_guitext_status->setVisible(!m_statustext.empty()); + IGUIStaticText *guitext_status; + bool overriden = g_touchcontrols && g_touchcontrols->isStatusTextOverriden(); + if (overriden) { + guitext_status = g_touchcontrols->getStatusText(); + m_guitext_status->setVisible(false); + } else { + guitext_status = m_guitext_status; + if (g_touchcontrols) + g_touchcontrols->getStatusText()->setVisible(false); + } + + setStaticText(guitext_status, m_statustext.c_str()); + guitext_status->setVisible(!m_statustext.empty()); if (!m_statustext.empty()) { - s32 status_width = m_guitext_status->getTextWidth(); - s32 status_height = m_guitext_status->getTextHeight(); - s32 status_y = screensize.Y - 150; + s32 status_width = guitext_status->getTextWidth(); + s32 status_height = guitext_status->getTextHeight(); + s32 status_y = screensize.Y - (overriden ? 15 : 150); s32 status_x = (screensize.X - status_width) / 2; - m_guitext_status->setRelativePosition(core::rect(status_x , + guitext_status->setRelativePosition(core::rect(status_x , status_y - status_height, status_x + status_width, status_y)); // Fade out @@ -205,8 +220,8 @@ void GameUI::update(const RunStats &stats, Client *client, MapDrawControl *draw_ final_color.setAlpha(0); video::SColor fade_color = m_statustext_initial_color.getInterpolated_quadratic( m_statustext_initial_color, final_color, m_statustext_time / statustext_time_max); - m_guitext_status->setOverrideColor(fade_color); - m_guitext_status->enableOverrideColor(true); + guitext_status->setOverrideColor(fade_color); + guitext_status->enableOverrideColor(true); } // Hide chat when disabled by server or when console is visible diff --git a/src/client/gameui.h b/src/client/gameui.h index 5b87d43e6..59741c96c 100644 --- a/src/client/gameui.h +++ b/src/client/gameui.h @@ -22,15 +22,15 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "irrlichttypes.h" #include -#include "gui/guiFormSpecMenu.h" -#include "util/enriched_string.h" -#include "util/pointedthing.h" #include "game.h" using namespace irr; class Client; +class EnrichedString; class GUIChatConsole; +class GUIFormSpecMenu; struct MapDrawControl; +struct PointedThing; /* * This object intend to contain the core UI elements diff --git a/src/client/guiscalingfilter.cpp b/src/client/guiscalingfilter.cpp index b7b9af0ff..eebf44103 100644 --- a/src/client/guiscalingfilter.cpp +++ b/src/client/guiscalingfilter.cpp @@ -23,6 +23,9 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "util/numeric.h" #include #include "client/renderingengine.h" +#include +#include +#include /* Maintain a static cache to store the images that correspond to textures * in a format that's manipulable by code. Some platforms exhibit issues diff --git a/src/client/guiscalingfilter.h b/src/client/guiscalingfilter.h index f2d2fce10..c929bb2d3 100644 --- a/src/client/guiscalingfilter.h +++ b/src/client/guiscalingfilter.h @@ -18,7 +18,17 @@ with this program; if not, write to the Free Software Foundation, Inc., #pragma once -#include "irrlichttypes_extrabloated.h" +#include "irrlichttypes.h" +#include +#include +#include + +namespace irr::video +{ + class IImage; + class ITexture; + class IVideoDriver; +} /* Manually insert an image into the cache, useful to avoid texture-to-image * conversion whenever we can intercept it. diff --git a/src/client/hud.cpp b/src/client/hud.cpp index 637a2f500..e4c06b542 100644 --- a/src/client/hud.cpp +++ b/src/client/hud.cpp @@ -39,7 +39,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "wieldmesh.h" #include "client/renderingengine.h" #include "client/minimap.h" -#include "gui/touchscreengui.h" +#include "gui/touchcontrols.h" #include "util/enriched_string.h" #include "irrlicht_changes/CGUITTFont.h" @@ -60,6 +60,7 @@ Hud::Hud(Client *client, LocalPlayer *player, this->inventory = inventory; readScalingSetting(); + g_settings->registerChangedCallback("dpi_change_notifier", setting_changed_callback, this); g_settings->registerChangedCallback("hud_scaling", setting_changed_callback, this); for (auto &hbar_color : hbar_colors) @@ -96,7 +97,8 @@ Hud::Hud(Client *client, LocalPlayer *player, m_mode = HIGHLIGHT_BOX; } - m_selection_material.Lighting = false; + // Initialize m_selection_material + if (g_settings->getBool("enable_shaders")) { IShaderSource *shdrsrc = client->getShaderSource(); @@ -117,28 +119,42 @@ Hud::Hud(Client *client, LocalPlayer *player, m_selection_material.MaterialType = video::EMT_SOLID; } + // 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); + // Prepare mesh for compass drawing - m_rotation_mesh_buffer.Vertices.set_used(4); - m_rotation_mesh_buffer.Indices.set_used(6); + m_rotation_mesh_buffer.reset(new scene::SMeshBuffer()); + auto *b = m_rotation_mesh_buffer.get(); + auto &vertices = b->Vertices->Data; + auto &indices = b->Indices->Data; + vertices.resize(4); + indices.resize(6); video::SColor white(255, 255, 255, 255); v3f normal(0.f, 0.f, 1.f); - m_rotation_mesh_buffer.Vertices[0] = video::S3DVertex(v3f(-1.f, -1.f, 0.f), normal, white, v2f(0.f, 1.f)); - m_rotation_mesh_buffer.Vertices[1] = video::S3DVertex(v3f(-1.f, 1.f, 0.f), normal, white, v2f(0.f, 0.f)); - m_rotation_mesh_buffer.Vertices[2] = video::S3DVertex(v3f( 1.f, 1.f, 0.f), normal, white, v2f(1.f, 0.f)); - m_rotation_mesh_buffer.Vertices[3] = video::S3DVertex(v3f( 1.f, -1.f, 0.f), normal, white, v2f(1.f, 1.f)); + vertices[0] = video::S3DVertex(v3f(-1.f, -1.f, 0.f), normal, white, v2f(0.f, 1.f)); + vertices[1] = video::S3DVertex(v3f(-1.f, 1.f, 0.f), normal, white, v2f(0.f, 0.f)); + vertices[2] = video::S3DVertex(v3f( 1.f, 1.f, 0.f), normal, white, v2f(1.f, 0.f)); + vertices[3] = video::S3DVertex(v3f( 1.f, -1.f, 0.f), normal, white, v2f(1.f, 1.f)); - m_rotation_mesh_buffer.Indices[0] = 0; - m_rotation_mesh_buffer.Indices[1] = 1; - m_rotation_mesh_buffer.Indices[2] = 2; - m_rotation_mesh_buffer.Indices[3] = 2; - m_rotation_mesh_buffer.Indices[4] = 3; - m_rotation_mesh_buffer.Indices[5] = 0; + indices[0] = 0; + indices[1] = 1; + indices[2] = 2; + indices[3] = 2; + indices[4] = 3; + indices[5] = 0; - m_rotation_mesh_buffer.getMaterial().Lighting = false; - m_rotation_mesh_buffer.getMaterial().MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL; - m_rotation_mesh_buffer.setHardwareMappingHint(scene::EHM_STATIC); + b->getMaterial().MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL; + b->setHardwareMappingHint(scene::EHM_STATIC); } void Hud::readScalingSetting() @@ -153,6 +169,7 @@ void Hud::readScalingSetting() Hud::~Hud() { + g_settings->deregisterChangedCallback("dpi_change_notifier", setting_changed_callback, this); g_settings->deregisterChangedCallback("hud_scaling", setting_changed_callback, this); if (m_selection_mesh) @@ -238,7 +255,7 @@ void Hud::drawItem(const ItemStack &item, const core::rect& rect, // NOTE: selectitem = 0 -> no selected; selectitem is 1-based // mainlist can be NULL, but draw the frame anyway. -void Hud::drawItems(v2s32 upperleftpos, v2s32 screen_offset, s32 itemcount, +void Hud::drawItems(v2s32 screen_pos, v2s32 screen_offset, s32 itemcount, v2f alignment, s32 inv_offset, InventoryList *mainlist, u16 selectitem, u16 direction, bool is_hotbar) { @@ -251,9 +268,11 @@ void Hud::drawItems(v2s32 upperleftpos, v2s32 screen_offset, s32 itemcount, width = tmp; } - // Position of upper left corner of bar - v2s32 pos = screen_offset * m_scale_factor; - pos += upperleftpos; + // Position: screen_pos + screen_offset + alignment + v2s32 pos(screen_offset.X * m_scale_factor, screen_offset.Y * m_scale_factor); + pos += screen_pos; + pos.X += (alignment.X - 1.0f) * (width * 0.5f); + pos.Y += (alignment.Y - 1.0f) * (height * 0.5f); // Store hotbar_image in member variable, used by drawItem() if (hotbar_image != player->hotbar_image) { @@ -305,8 +324,8 @@ void Hud::drawItems(v2s32 upperleftpos, v2s32 screen_offset, s32 itemcount, drawItem(mainlist->getItem(i), item_rect, (i + 1) == selectitem); - if (is_hotbar && g_touchscreengui) - g_touchscreengui->registerHotbarRect(i, item_rect); + if (is_hotbar && g_touchcontrols) + g_touchcontrols->registerHotbarRect(i, item_rect); } } @@ -351,13 +370,20 @@ void Hud::drawLuaElements(const v3s16 &camera_offset) std::vector elems; elems.reserve(player->maxHudId()); - // Add builtin minimap if the server doesn't send it. + // Add builtin elements if the server doesn't send them. + // Declared here such that they have the same lifetime as the elems vector HudElement minimap; + HudElement hotbar; if (client->getProtoVersion() < 44 && (player->hud_flags & HUD_FLAG_MINIMAP_VISIBLE)) { minimap = {HUD_ELEM_MINIMAP, v2f(1, 0), "", v2f(), "", 0 , 0, 0, v2f(-1, 1), v2f(-10, 10), v3f(), v2s32(256, 256), 0, "", 0}; elems.push_back(&minimap); } + if (client->getProtoVersion() < 46 && player->hud_flags & HUD_FLAG_HOTBAR_VISIBLE) { + hotbar = {HUD_ELEM_HOTBAR, v2f(0.5, 1), "", v2f(), "", 0 , 0, 0, v2f(0, -1), + v2f(0, -4), v3f(), v2s32(), 0, "", 0}; + elems.push_back(&hotbar); + } for (size_t i = 0; i != player->maxHudId(); i++) { HudElement *e = player->getHud(i); @@ -432,7 +458,7 @@ void Hud::drawLuaElements(const v3s16 &camera_offset) InventoryList *inv = inventory->getList(e->text); if (!inv) warningstream << "HUD: Unknown inventory list. name=" << e->text << std::endl; - drawItems(pos, v2s32(e->offset.X, e->offset.Y), e->number, 0, + drawItems(pos, v2s32(e->offset.X, e->offset.Y), e->number, e->align, 0, inv, e->item, e->dir, false); break; } case HUD_ELEM_WAYPOINT: { @@ -542,14 +568,21 @@ void Hud::drawLuaElements(const v3s16 &camera_offset) } break; } case HUD_ELEM_MINIMAP: { - if (e->size.X <= 0 || e->size.Y <= 0) - break; if (!client->getMinimap()) break; // Draw a minimap of size "size" v2s32 dstsize(e->size.X * m_scale_factor, e->size.Y * m_scale_factor); - // (no percent size as minimap would likely be anamorphosed) + + // Only one percentage is supported to avoid distortion. + if (e->size.X < 0) + dstsize.X = dstsize.Y = m_screensize.X * (e->size.X * -0.01); + else if (e->size.Y < 0) + dstsize.X = dstsize.Y = m_screensize.Y * (e->size.Y * -0.01); + + if (dstsize.X <= 0 || dstsize.Y <= 0) + return; + v2s32 offset((e->align.X - 1.0) * dstsize.X / 2, (e->align.Y - 1.0) * dstsize.Y / 2); core::rect rect(0, 0, dstsize.X, dstsize.Y); @@ -557,6 +590,9 @@ void Hud::drawLuaElements(const v3s16 &camera_offset) e->offset.Y * m_scale_factor); client->getMinimap()->drawMinimap(rect); break; } + case HUD_ELEM_HOTBAR: { + drawHotbar(pos, e->offset, e->dir, e->align); + break; } default: infostream << "Hud::drawLuaElements: ignoring drawform " << e->type << " due to unrecognized type" << std::endl; @@ -620,10 +656,10 @@ void Hud::drawCompassRotate(HudElement *e, video::ITexture *texture, driver->setTransform(video::ETS_VIEW, core::matrix4()); driver->setTransform(video::ETS_WORLD, Matrix); - video::SMaterial &material = m_rotation_mesh_buffer.getMaterial(); + auto &material = m_rotation_mesh_buffer->getMaterial(); material.TextureLayers[0].Texture = texture; driver->setMaterial(material); - driver->drawMeshBuffer(&m_rotation_mesh_buffer); + driver->drawMeshBuffer(m_rotation_mesh_buffer.get()); driver->setTransform(video::ETS_WORLD, core::matrix4()); driver->setTransform(video::ETS_VIEW, oldViewMat); @@ -766,12 +802,10 @@ void Hud::drawStatbar(v2s32 pos, u16 corner, u16 drawdir, } } } - - -void Hud::drawHotbar(u16 playeritem) +void Hud::drawHotbar(const v2s32 &pos, const v2f &offset, u16 dir, const v2f &align) { - if (g_touchscreengui) - g_touchscreengui->resetHotbarRects(); + if (g_touchcontrols) + g_touchcontrols->resetHotbarRects(); InventoryList *mainlist = inventory->getList("main"); if (mainlist == NULL) { @@ -779,30 +813,30 @@ void Hud::drawHotbar(u16 playeritem) return; } + u16 playeritem = player->getWieldIndex(); + v2s32 screen_offset(offset.X, offset.Y); + v2s32 centerlowerpos(m_displaycenter.X, m_screensize.Y); - s32 hotbar_itemcount = player->hud_hotbar_itemcount; + s32 hotbar_itemcount = player->getMaxHotbarItemcount(); s32 width = hotbar_itemcount * (m_hotbar_imagesize + m_padding * 2); - v2s32 pos = centerlowerpos - v2s32(width / 2, m_hotbar_imagesize + m_padding * 3); const v2u32 &window_size = RenderingEngine::getWindowSize(); if ((float) width / (float) window_size.X <= g_settings->getFloat("hud_hotbar_max_width")) { - if (player->hud_flags & HUD_FLAG_HOTBAR_VISIBLE) { - drawItems(pos, v2s32(0, 0), hotbar_itemcount, 0, mainlist, playeritem + 1, 0, true); - } + drawItems(pos, screen_offset, hotbar_itemcount, align, 0, + mainlist, playeritem + 1, dir, true); } else { - pos.X += width/4; + v2s32 firstpos = pos; + firstpos.X += width/4; - v2s32 secondpos = pos; - pos = pos - v2s32(0, m_hotbar_imagesize + m_padding); + v2s32 secondpos = firstpos; + firstpos = firstpos - v2s32(0, m_hotbar_imagesize + m_padding); - if (player->hud_flags & HUD_FLAG_HOTBAR_VISIBLE) { - drawItems(pos, v2s32(0, 0), hotbar_itemcount / 2, 0, - mainlist, playeritem + 1, 0, true); - drawItems(secondpos, v2s32(0, 0), hotbar_itemcount, - hotbar_itemcount / 2, mainlist, playeritem + 1, 0, true); - } + drawItems(firstpos, screen_offset, hotbar_itemcount / 2, align, 0, + mainlist, playeritem + 1, dir, true); + drawItems(secondpos, screen_offset, hotbar_itemcount, align, + hotbar_itemcount / 2, mainlist, playeritem + 1, dir, true); } } @@ -931,33 +965,57 @@ void Hud::drawBlockBounds() } video::SMaterial old_material = driver->getMaterial2D(); - driver->setMaterial(m_selection_material); + driver->setMaterial(m_block_bounds_material); + + u16 mesh_chunk_size = std::max(1, g_settings->getU16("client_mesh_chunk")); v3s16 pos = player->getStandingNodePos(); - - v3s16 blockPos( + v3s16 block_pos( floorf((float) pos.X / MAP_BLOCKSIZE), floorf((float) pos.Y / MAP_BLOCKSIZE), floorf((float) pos.Z / MAP_BLOCKSIZE) ); - v3f offset = intToFloat(client->getCamera()->getOffset(), BS); + v3f cam_offset = intToFloat(client->getCamera()->getOffset(), BS); - s8 radius = m_block_bounds_mode == BLOCK_BOUNDS_NEAR ? 2 : 0; + v3f half_node = v3f(BS, BS, BS) / 2.0f; + v3f base_corner = intToFloat(block_pos * MAP_BLOCKSIZE, BS) - cam_offset - half_node; - v3f halfNode = v3f(BS, BS, BS) / 2.0f; + s16 radius = m_block_bounds_mode == BLOCK_BOUNDS_NEAR ? + rangelim(g_settings->getU16("show_block_bounds_radius_near"), 0, 1000) : 0; - for (s8 x = -radius; x <= radius; x++) - for (s8 y = -radius; y <= radius; y++) - for (s8 z = -radius; z <= radius; z++) { - v3s16 blockOffset(x, y, z); + for (s16 x = -radius; x <= radius + 1; x++) + for (s16 y = -radius; y <= radius + 1; y++) { + // Red for mesh chunk edges, yellow for other block edges. + auto choose_color = [&](s16 x_base, s16 y_base) { + // See also MeshGrid::isMeshPos(). + // If the block is mesh pos, it means it's at the (-,-,-) corner of + // the mesh. And we're drawing a (-,-) edge of this block. Hence, + // it is an edge of the mesh grid. + return (x + x_base) % mesh_chunk_size == 0 + && (y + y_base) % mesh_chunk_size == 0 ? + video::SColor(255, 255, 0, 0) : + video::SColor(255, 255, 255, 0); + }; - aabb3f box( - intToFloat((blockPos + blockOffset) * MAP_BLOCKSIZE, BS) - offset - halfNode, - intToFloat(((blockPos + blockOffset) * MAP_BLOCKSIZE) + (MAP_BLOCKSIZE - 1), BS) - offset + halfNode + v3f pmin = v3f(x, y, -radius) * MAP_BLOCKSIZE * BS; + v3f pmax = v3f(x, y, 1 + radius) * MAP_BLOCKSIZE * BS; + + driver->draw3DLine( + base_corner + v3f(pmin.X, pmin.Y, pmin.Z), + base_corner + v3f(pmax.X, pmax.Y, pmax.Z), + choose_color(block_pos.X, block_pos.Y) + ); + driver->draw3DLine( + base_corner + v3f(pmin.X, pmin.Z, pmin.Y), + base_corner + v3f(pmax.X, pmax.Z, pmax.Y), + choose_color(block_pos.X, block_pos.Z) + ); + driver->draw3DLine( + base_corner + v3f(pmin.Z, pmin.X, pmin.Y), + base_corner + v3f(pmax.Z, pmax.X, pmax.Y), + choose_color(block_pos.Y, block_pos.Z) ); - - driver->draw3DBox(box, video::SColor(255, 255, 0, 0)); } driver->setMaterial(old_material); @@ -1144,7 +1202,6 @@ void drawItemStack( video::SMaterial &material = buf->getMaterial(); material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF; - material.Lighting = false; driver->setMaterial(material); driver->drawMeshBuffer(buf); } diff --git a/src/client/hud.h b/src/client/hud.h index b2b5dd09c..120215f45 100644 --- a/src/client/hud.h +++ b/src/client/hud.h @@ -22,6 +22,9 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include +#include +#include +#include "irr_ptr.h" #include "irr_aabb3d.h" #include "../hud.h" @@ -32,6 +35,17 @@ class InventoryList; class LocalPlayer; struct ItemStack; +namespace irr::scene +{ + class IMesh; +} + +namespace irr::video +{ + class ITexture; + class IVideoDriver; +} + class Hud { public: @@ -63,7 +77,7 @@ public: void disableBlockBounds(); void drawBlockBounds(); - void drawHotbar(u16 playeritem); + void drawHotbar(const v2s32 &pos, const v2f &offset, u16 direction, const v2f &align); void resizeHotbar(); void drawCrosshair(); void drawSelectionMesh(); @@ -99,7 +113,7 @@ private: const std::string &texture, const std::string& bgtexture, s32 count, s32 maxcount, v2s32 offset, v2s32 size = v2s32()); - void drawItems(v2s32 upperleftpos, v2s32 screen_offset, s32 itemcount, + void drawItems(v2s32 screen_pos, v2s32 screen_offset, s32 itemcount, v2f alignment, s32 inv_offset, InventoryList *mainlist, u16 selectitem, u16 direction, bool is_hotbar); @@ -137,8 +151,9 @@ private: v3f m_selected_face_normal; video::SMaterial m_selection_material; + video::SMaterial m_block_bounds_material; - scene::SMeshBuffer m_rotation_mesh_buffer; + irr_ptr m_rotation_mesh_buffer; enum { diff --git a/src/client/imagefilters.cpp b/src/client/imagefilters.cpp index db6523ad3..57e444151 100644 --- a/src/client/imagefilters.cpp +++ b/src/client/imagefilters.cpp @@ -22,6 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include #include +#include // Simple 2D bitmap class with just the functionality needed here class Bitmap { diff --git a/src/client/imagefilters.h b/src/client/imagefilters.h index e6cbf2d29..f7e06ad09 100644 --- a/src/client/imagefilters.h +++ b/src/client/imagefilters.h @@ -18,7 +18,14 @@ with this program; if not, write to the Free Software Foundation, Inc., #pragma once -#include "irrlichttypes_extrabloated.h" +#include "irrlichttypes.h" +#include + +namespace irr::video +{ + class IVideoDriver; + class IImage; +} /* Fill in RGB values for transparent pixels, to correct for odd colors * appearing at borders when blending. This is because many PNG optimizers diff --git a/src/client/imagesource.cpp b/src/client/imagesource.cpp index 4bcfb9804..bb6668264 100644 --- a/src/client/imagesource.cpp +++ b/src/client/imagesource.cpp @@ -371,14 +371,12 @@ void blitBaseImage(video::IImage* &src, video::IImage* &dst) namespace { -/** Calculate the color of a single pixel drawn on top of another pixel without - * gamma correction +/** Calculate the result of the overlay texture modifier (`^`) for a single + * pixel * - * The color mixing is a little more complicated than just - * video::SColor::getInterpolated because getInterpolated does not handle alpha - * correctly. - * For example, a pixel with alpha=64 drawn atop a pixel with alpha=128 should - * yield a pixel with alpha=160, while getInterpolated would yield alpha=96. + * This is not alpha blending if both src and dst are semi-transparent. The + * reason this is that an old implementation did it wrong, and fixing it would + * break backwards compatibility (see #14847). * * \tparam overlay If enabled, only modify dst_col if it is fully opaque * \param src_col Color of the top pixel @@ -420,12 +418,11 @@ void blit_pixel(video::SColor src_col, video::SColor &dst_col) return; } // A semi-transparent pixel is on top of a - // semi-transparent pixel -> general alpha compositing - u16 a_new_255 = src_a * 255 + (255 - src_a) * dst_a; - dst.r = (dst.r * (255 - src_a) * dst_a + src.r * src_a * 255) / a_new_255; - dst.g = (dst.g * (255 - src_a) * dst_a + src.g * src_a * 255) / a_new_255; - dst.b = (dst.b * (255 - src_a) * dst_a + src.b * src_a * 255) / a_new_255; - dst_a = (a_new_255 + 127) / 255; + // semi-transparent pixel -> weird overlaying + dst.r = (dst.r * (255 - src_a) + src.r * src_a) / 255; + dst.g = (dst.g * (255 - src_a) + src.g * src_a) / 255; + dst.b = (dst.b * (255 - src_a) + src.b * src_a) / 255; + dst_a = dst_a + (255 - dst_a) * src_a * src_a / (255 * 255); dst_col.set(dst_a, dst.r, dst.g, dst.b); } @@ -1911,7 +1908,8 @@ video::IImage* ImageSource::generateImage(std::string_view name, video::IImage *tmp = generateImage(name2, source_image_names); if (!tmp) { errorstream << "generateImage(): " - "Failed to generate \"" << name2 << "\"" + "Failed to generate \"" << name2 << "\"\n" + "part of texture \"" << name << "\"" << std::endl; return NULL; } @@ -1926,7 +1924,8 @@ video::IImage* ImageSource::generateImage(std::string_view name, } else if (!generateImagePart(last_part_of_name, baseimg, source_image_names)) { // Generate image according to part of name errorstream << "generateImage(): " - "Failed to generate \"" << last_part_of_name << "\"" + "Failed to generate \"" << last_part_of_name << "\"\n" + "part of texture \"" << name << "\"" << std::endl; } diff --git a/src/client/inputhandler.cpp b/src/client/inputhandler.cpp index 665d77dc5..39c212d2f 100644 --- a/src/client/inputhandler.cpp +++ b/src/client/inputhandler.cpp @@ -22,7 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "util/numeric.h" #include "inputhandler.h" #include "gui/mainmenumanager.h" -#include "gui/touchscreengui.h" +#include "gui/touchcontrols.h" #include "hud.h" void KeyCache::populate_nonchanging() @@ -94,7 +94,6 @@ void KeyCache::populate() handler->listenForKey(k); } handler->listenForKey(EscapeKey); - handler->listenForKey(CancelKey); } } @@ -114,13 +113,28 @@ bool MyEventReceiver::OnEvent(const SEvent &event) return true; } + if (event.EventType == EET_APPLICATION_EVENT && + event.ApplicationEvent.EventType == EAET_DPI_CHANGED) { + // This is a fake setting so that we can use (de)registerChangedCallback + // not only to listen for gui/hud_scaling changes, but also for DPI changes. + g_settings->setU16("dpi_change_notifier", + g_settings->getU16("dpi_change_notifier") + 1); + return true; + } + // This is separate from other keyboard handling so that it also works in menus. if (event.EventType == EET_KEY_INPUT_EVENT) { const KeyPress keyCode(event.KeyInput); if (keyCode == getKeySetting("keymap_fullscreen")) { if (event.KeyInput.PressedDown && !fullscreen_is_down) { - bool fullscreen = RenderingEngine::get_raw_device()->isFullscreen(); - g_settings->setBool("fullscreen", !fullscreen); + IrrlichtDevice *device = RenderingEngine::get_raw_device(); + + bool new_fullscreen = !device->isFullscreen(); + // Only update the setting if toggling succeeds - it always fails + // if Minetest was built without SDL. + if (device->setFullscreen(new_fullscreen)) { + g_settings->setBool("fullscreen", new_fullscreen); + } } fullscreen_is_down = event.KeyInput.PressedDown; return true; @@ -129,8 +143,8 @@ bool MyEventReceiver::OnEvent(const SEvent &event) // Let the menu handle events, if one is active. if (isMenuActive()) { - if (g_touchscreengui) - g_touchscreengui->setVisible(false); + if (g_touchcontrols) + g_touchcontrols->setVisible(false); return g_menumgr.preprocessEvent(event); } @@ -154,9 +168,9 @@ bool MyEventReceiver::OnEvent(const SEvent &event) return true; } - } else if (g_touchscreengui && event.EventType == irr::EET_TOUCH_INPUT_EVENT) { - // In case of touchscreengui, we have to handle different events - g_touchscreengui->translateEvent(event); + } else if (g_touchcontrols && event.EventType == irr::EET_TOUCH_INPUT_EVENT) { + // In case of touchcontrols, we have to handle different events + g_touchcontrols->translateEvent(event); return true; } else if (event.EventType == irr::EET_JOYSTICK_INPUT_EVENT) { // joystick may be nullptr if game is launched with '--random-input' parameter @@ -223,8 +237,8 @@ float RealInputHandler::getMovementSpeed() return 0.0f; return 1.0f; // If there is a keyboard event, assume maximum speed } - if (g_touchscreengui && g_touchscreengui->getMovementSpeed()) - return g_touchscreengui->getMovementSpeed(); + if (g_touchcontrols && g_touchcontrols->getMovementSpeed()) + return g_touchcontrols->getMovementSpeed(); return joystick.getMovementSpeed(); } @@ -246,8 +260,8 @@ float RealInputHandler::getMovementDirection() return std::atan2(x, z); // `getMovementDirection() == 0` means forward, so we cannot use // `getMovementDirection()` as a condition. - else if (g_touchscreengui && g_touchscreengui->getMovementSpeed()) - return g_touchscreengui->getMovementDirection(); + else if (g_touchcontrols && g_touchcontrols->getMovementSpeed()) + return g_touchcontrols->getMovementDirection(); return joystick.getMovementDirection(); } diff --git a/src/client/inputhandler.h b/src/client/inputhandler.h index 4c6db3618..daf01c488 100644 --- a/src/client/inputhandler.h +++ b/src/client/inputhandler.h @@ -19,7 +19,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #pragma once -#include "irrlichttypes_extrabloated.h" +#include "irrlichttypes.h" #include "joystick_controller.h" #include #include "keycode.h" @@ -269,11 +269,12 @@ public: JoystickController joystick; KeyCache keycache; }; + /* - Separated input handler + Separated input handler implementations */ -class RealInputHandler : public InputHandler +class RealInputHandler final : public InputHandler { public: RealInputHandler(MyEventReceiver *receiver) : m_receiver(receiver) @@ -309,7 +310,7 @@ public: virtual bool cancelPressed() { - return wasKeyDown(KeyType::ESC) || m_receiver->WasKeyDown(CancelKey); + return wasKeyDown(KeyType::ESC); } virtual void clearWasKeyPressed() @@ -372,7 +373,7 @@ private: v2s32 m_mousepos; }; -class RandomInputHandler : public InputHandler +class RandomInputHandler final : public InputHandler { public: RandomInputHandler() = default; diff --git a/src/client/joystick_controller.h b/src/client/joystick_controller.h index 98486df43..d74cc3db6 100644 --- a/src/client/joystick_controller.h +++ b/src/client/joystick_controller.h @@ -155,6 +155,11 @@ public: float getMovementDirection(); float getMovementSpeed(); + u8 getJoystickId() const + { + return m_joystick_id; + } + f32 doubling_dtime; private: diff --git a/src/client/keycode.cpp b/src/client/keycode.cpp index ad7aaf776..19613229a 100644 --- a/src/client/keycode.cpp +++ b/src/client/keycode.cpp @@ -348,7 +348,6 @@ const char *KeyPress::name() const } const KeyPress EscapeKey("KEY_ESCAPE"); -const KeyPress CancelKey("KEY_CANCEL"); const KeyPress LMBKey("KEY_LBUTTON"); const KeyPress MMBKey("KEY_MBUTTON"); diff --git a/src/client/keycode.h b/src/client/keycode.h index 1adc98563..bb679391d 100644 --- a/src/client/keycode.h +++ b/src/client/keycode.h @@ -66,7 +66,6 @@ protected: // Global defines for convenience extern const KeyPress EscapeKey; -extern const KeyPress CancelKey; extern const KeyPress LMBKey; extern const KeyPress MMBKey; // Middle Mouse Button diff --git a/src/client/localplayer.cpp b/src/client/localplayer.cpp index da87e9b17..75f755578 100644 --- a/src/client/localplayer.cpp +++ b/src/client/localplayer.cpp @@ -75,7 +75,7 @@ void PlayerSettings::settingsChangedCallback(const std::string &name, void *data LocalPlayer */ -LocalPlayer::LocalPlayer(Client *client, const char *name): +LocalPlayer::LocalPlayer(Client *client, const std::string &name): Player(name, client->idef()), m_client(client) { @@ -360,7 +360,7 @@ void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d, collisionMoveResult result = collisionMoveSimple(env, m_client, pos_max_d, m_collisionbox, player_stepheight, dtime, - &position, &m_speed, accel_f); + &position, &m_speed, accel_f, m_cao); bool could_sneak = control.sneak && !free_move && !in_liquid && !is_climbing && physics_override.sneak; @@ -444,7 +444,7 @@ void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d, v3f check_pos = position; check_pos.Y += y_diff * dtime * 22.0f + BS * 0.01f; if (y_diff < BS * 0.6f || (physics_override.sneak_glitch - && !collision_check_intersection(env, m_client, m_collisionbox, check_pos))) { + && !collision_check_intersection(env, m_client, m_collisionbox, check_pos, m_cao))) { // Smoothen the movement (based on 'position.Y = bmax.Y') position.Y = std::min(check_pos.Y, bmax.Y); m_speed.Y = 0.0f; @@ -990,7 +990,7 @@ void LocalPlayer::old_move(f32 dtime, Environment *env, f32 pos_max_d, collisionMoveResult result = collisionMoveSimple(env, m_client, pos_max_d, m_collisionbox, player_stepheight, dtime, - &position, &m_speed, accel_f); + &position, &m_speed, accel_f, m_cao); // Position was slightly changed; update standing node pos if (touching_ground) @@ -1254,7 +1254,7 @@ void LocalPlayer::handleAutojump(f32 dtime, Environment *env, // try at peak of jump, zero step height collisionMoveResult jump_result = collisionMoveSimple(env, m_client, pos_max_d, - m_collisionbox, 0.0f, dtime, &jump_pos, &jump_speed, v3f(0.0f)); + 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 // jumped diff --git a/src/client/localplayer.h b/src/client/localplayer.h index fbccb1591..815fafa8b 100644 --- a/src/client/localplayer.h +++ b/src/client/localplayer.h @@ -24,6 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "constants.h" #include "settings.h" #include "lighting.h" +#include class Client; class Environment; @@ -63,7 +64,8 @@ private: class LocalPlayer : public Player { public: - LocalPlayer(Client *client, const char *name); + + LocalPlayer(Client *client, const std::string &name); virtual ~LocalPlayer(); // Initialize hp to 0, so that no hearts will be shown if server diff --git a/src/client/mapblock_mesh.cpp b/src/client/mapblock_mesh.cpp index 429464e04..071b03132 100644 --- a/src/client/mapblock_mesh.cpp +++ b/src/client/mapblock_mesh.cpp @@ -28,6 +28,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "minimap.h" #include "content_mapblock.h" #include "util/directiontables.h" +#include "util/tracy_wrapper.h" #include "client/meshgen/collector.h" #include "client/renderingengine.h" #include @@ -592,17 +593,11 @@ void MapBlockBspTree::traverse(s32 node, v3f viewpoint, std::vector &output PartialMeshBuffer */ -void PartialMeshBuffer::beforeDraw() const +void PartialMeshBuffer::draw(video::IVideoDriver *driver) const { - // Patch the indexes in the mesh buffer before draw - m_buffer->Indices = std::move(m_vertex_indexes); - m_buffer->setDirty(scene::EBT_INDEX); -} - -void PartialMeshBuffer::afterDraw() const -{ - // Take the data back - m_vertex_indexes = m_buffer->Indices.steal(); + const auto pType = m_buffer->getPrimitiveType(); + driver->drawBuffers(m_buffer->getVertexBuffer(), m_indices.get(), + m_indices->getPrimitiveCount(pType), pType); } /* @@ -617,8 +612,10 @@ MapBlockMesh::MapBlockMesh(Client *client, MeshMakeData *data, v3s16 camera_offs m_last_crack(-1), m_last_daynight_ratio((u32) -1) { + ZoneScoped; + for (auto &m : m_mesh) - m = new scene::SMesh(); + m = make_irr(); m_enable_shaders = data->m_use_shaders; auto mesh_grid = client->getMeshGrid(); @@ -666,7 +663,7 @@ MapBlockMesh::MapBlockMesh(Client *client, MeshMakeData *data, v3s16 camera_offs m_bounding_radius = std::sqrt(collector.m_bounding_radius_sq); for (int layer = 0; layer < MAX_TILE_LAYERS; layer++) { - scene::SMesh *mesh = (scene::SMesh *)m_mesh[layer]; + scene::SMesh *mesh = static_cast(m_mesh[layer].get()); for(u32 i = 0; i < collector.prebuffers[layer].size(); i++) { @@ -739,7 +736,6 @@ MapBlockMesh::MapBlockMesh(Client *client, MeshMakeData *data, v3s16 camera_offs // Create material video::SMaterial material; - material.Lighting = false; material.BackfaceCulling = true; material.FogEnable = true; material.setTexture(0, p.layer.texture); @@ -752,9 +748,6 @@ MapBlockMesh::MapBlockMesh(Client *client, MeshMakeData *data, v3s16 camera_offs material.MaterialType = m_shdrsrc->getShaderInfo( p.layer.shader_id).material; p.layer.applyMaterialOptionsWithShaders(material); - if (p.layer.normal_texture) - material.setTexture(1, p.layer.normal_texture); - material.setTexture(2, p.layer.flags_texture); } else { p.layer.applyMaterialOptions(material); } @@ -783,12 +776,11 @@ MapBlockMesh::MapBlockMesh(Client *client, MeshMakeData *data, v3s16 camera_offs } if (mesh) { - // Use VBO for mesh (this just would set this for ever buffer) + // Use VBO for mesh (this just would set this for every buffer) mesh->setHardwareMappingHint(scene::EHM_STATIC); } } - //std::cout<<"added "<side_length); // Check if animation is required for this mesh @@ -801,10 +793,10 @@ MapBlockMesh::MapBlockMesh(Client *client, MeshMakeData *data, v3s16 camera_offs MapBlockMesh::~MapBlockMesh() { size_t sz = 0; - for (scene::IMesh *m : m_mesh) { + for (auto &&m : m_mesh) { for (u32 i = 0; i < m->getMeshBufferCount(); i++) sz += m->getMeshBuffer(i)->getSize(); - m->drop(); + m.reset(); } for (MinimapMapblock *block : m_minimap_mapblocks) delete block; @@ -865,11 +857,6 @@ bool MapBlockMesh::animate(bool faraway, float time, int crack, const FrameSpec &frame = (*tile.frames)[frameno]; buf->getMaterial().setTexture(0, frame.texture); - if (m_enable_shaders) { - if (frame.normal_texture) - buf->getMaterial().setTexture(1, frame.normal_texture); - buf->getMaterial().setTexture(2, frame.flags_texture); - } } // Day-night transition @@ -878,7 +865,7 @@ bool MapBlockMesh::animate(bool faraway, float time, int crack, get_sunlight_color(&day_color, daynight_ratio); for (auto &daynight_diff : m_daynight_diffs) { - auto *mesh = m_mesh[daynight_diff.first.first]; + 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); @@ -906,6 +893,7 @@ void MapBlockMesh::updateTransparentBuffers(v3f camera_pos, v3s16 block_pos) m_bsp_tree.traverse(rel_camera_pos, triangle_refs); // arrange index sequences into partial buffers + m_transparent_buffers_consolidated = false; m_transparent_buffers.clear(); scene::SMeshBuffer *current_buffer = nullptr; @@ -930,6 +918,8 @@ void MapBlockMesh::updateTransparentBuffers(v3f camera_pos, v3s16 block_pos) void MapBlockMesh::consolidateTransparentBuffers() { + if (m_transparent_buffers_consolidated) + return; m_transparent_buffers.clear(); scene::SMeshBuffer *current_buffer = nullptr; @@ -952,6 +942,8 @@ void MapBlockMesh::consolidateTransparentBuffers() if (!current_strain.empty()) { this->m_transparent_buffers.emplace_back(current_buffer, std::move(current_strain)); } + + m_transparent_buffers_consolidated = true; } video::SColor encode_light(u16 light, u8 emissive_light) diff --git a/src/client/mapblock_mesh.h b/src/client/mapblock_mesh.h index 7cd368762..c52df5ed3 100644 --- a/src/client/mapblock_mesh.h +++ b/src/client/mapblock_mesh.h @@ -20,6 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #pragma once #include "irrlichttypes_extrabloated.h" +#include "irr_ptr.h" #include "util/numeric.h" #include "client/tile.h" #include "voxel.h" @@ -144,26 +145,24 @@ private: * * Attach alternate `Indices` to an existing mesh buffer, to make it possible to use different * indices with the same vertex buffer. - * - * Irrlicht does not currently support this: `CMeshBuffer` ties together a single vertex buffer - * and a single index buffer. There's no way to share these between mesh buffers. - * */ class PartialMeshBuffer { public: - PartialMeshBuffer(scene::SMeshBuffer *buffer, std::vector &&vertex_indexes) : - m_buffer(buffer), m_vertex_indexes(std::move(vertex_indexes)) - {} + PartialMeshBuffer(scene::SMeshBuffer *buffer, std::vector &&vertex_indices) : + m_buffer(buffer), m_indices(make_irr()) + { + m_indices->Data = std::move(vertex_indices); + m_indices->setHardwareMappingHint(scene::EHM_STATIC); + } - scene::IMeshBuffer *getBuffer() const { return m_buffer; } - const std::vector &getVertexIndexes() const { return m_vertex_indexes; } + auto *getBuffer() const { return m_buffer; } + + void draw(video::IVideoDriver *driver) const; - void beforeDraw() const; - void afterDraw() const; private: scene::SMeshBuffer *m_buffer; - mutable std::vector m_vertex_indexes; + irr_ptr m_indices; }; /* @@ -194,12 +193,12 @@ public: scene::IMesh *getMesh() { - return m_mesh[0]; + return m_mesh[0].get(); } scene::IMesh *getMesh(u8 layer) { - return m_mesh[layer]; + return m_mesh[layer].get(); } std::vector moveMinimapMapblocks() @@ -243,7 +242,7 @@ private: TileLayer tile; }; - scene::IMesh *m_mesh[MAX_TILE_LAYERS]; + irr_ptr m_mesh[MAX_TILE_LAYERS]; std::vector m_minimap_mapblocks; ITextureSource *m_tsrc; IShaderSource *m_shdrsrc; @@ -282,6 +281,8 @@ private: MapBlockBspTree m_bsp_tree; // Ordered list of references to parts of transparent buffers to draw std::vector m_transparent_buffers; + // Is m_transparent_buffers currently in consolidated form? + bool m_transparent_buffers_consolidated = false; }; /*! diff --git a/src/client/mesh.cpp b/src/client/mesh.cpp index 711f7e1c6..9e66404e3 100644 --- a/src/client/mesh.cpp +++ b/src/client/mesh.cpp @@ -18,6 +18,7 @@ with this program; if not, write to the Free Software Foundation, Inc., */ #include "mesh.h" +#include "S3DVertex.h" #include "debug.h" #include "log.h" #include @@ -33,7 +34,7 @@ inline static void applyShadeFactor(video::SColor& color, float factor) color.setBlue(core::clamp(core::round32(color.getBlue()*factor), 0, 255)); } -void applyFacesShading(video::SColor &color, const v3f &normal) +void applyFacesShading(video::SColor &color, const v3f normal) { /* Some drawtypes have normals set to (0, 0, 0), this must result in @@ -98,7 +99,6 @@ scene::IAnimatedMesh* createCubeMesh(v3f scale) scene::IMeshBuffer *buf = new scene::SMeshBuffer(); buf->append(vertices + 4 * i, 4, indices, 6); // Set default material - buf->getMaterial().Lighting = false; buf->getMaterial().MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF; buf->getMaterial().forEachTexture([] (auto &tex) { tex.MinFilter = video::ETMINF_NEAREST_MIPMAP_NEAREST; @@ -132,6 +132,7 @@ void scaleMesh(scene::IMesh *mesh, v3f scale) for (u32 i = 0; i < vertex_count; i++) ((video::S3DVertex *)(vertices + i * stride))->Pos *= scale; + buf->setDirty(scene::EBT_VERTEX); buf->recalculateBoundingBox(); // calculate total bounding box @@ -160,6 +161,7 @@ void translateMesh(scene::IMesh *mesh, v3f vec) for (u32 i = 0; i < vertex_count; i++) ((video::S3DVertex *)(vertices + i * stride))->Pos += vec; + buf->setDirty(scene::EBT_VERTEX); buf->recalculateBoundingBox(); // calculate total bounding box @@ -171,23 +173,17 @@ void translateMesh(scene::IMesh *mesh, v3f vec) mesh->setBoundingBox(bbox); } -void setMeshBufferColor(scene::IMeshBuffer *buf, const video::SColor &color) +void setMeshBufferColor(scene::IMeshBuffer *buf, const video::SColor color) { const u32 stride = getVertexPitchFromType(buf->getVertexType()); u32 vertex_count = buf->getVertexCount(); u8 *vertices = (u8 *) buf->getVertices(); for (u32 i = 0; i < vertex_count; i++) ((video::S3DVertex *) (vertices + i * stride))->Color = color; + buf->setDirty(scene::EBT_VERTEX); } -void setAnimatedMeshColor(scene::IAnimatedMeshSceneNode *node, const video::SColor &color) -{ - for (u32 i = 0; i < node->getMaterialCount(); ++i) { - node->getMaterial(i).EmissiveColor = color; - } -} - -void setMeshColor(scene::IMesh *mesh, const video::SColor &color) +void setMeshColor(scene::IMesh *mesh, const video::SColor color) { if (mesh == NULL) return; @@ -197,15 +193,6 @@ void setMeshColor(scene::IMesh *mesh, const video::SColor &color) setMeshBufferColor(mesh->getMeshBuffer(j), color); } -void setMeshBufferTextureCoords(scene::IMeshBuffer *buf, const v2f *uv, u32 count) -{ - const u32 stride = getVertexPitchFromType(buf->getVertexType()); - assert(buf->getVertexCount() >= count); - u8 *vertices = (u8 *) buf->getVertices(); - for (u32 i = 0; i < count; i++) - ((video::S3DVertex*) (vertices + i * stride))->TCoords = uv[i]; -} - template static void applyToMesh(scene::IMesh *mesh, const F &fn) { @@ -217,6 +204,7 @@ static void applyToMesh(scene::IMesh *mesh, const F &fn) char *vertices = reinterpret_cast(buf->getVertices()); for (u32 i = 0; i < vertex_count; i++) fn(reinterpret_cast(vertices + i * stride)); + buf->setDirty(scene::EBT_VERTEX); } } @@ -233,6 +221,7 @@ void colorizeMeshBuffer(scene::IMeshBuffer *buf, const video::SColor *buffercolo // Apply shading applyFacesShading(*vc, vertex->Normal); } + buf->setDirty(scene::EBT_VERTEX); } void setMeshColorByNormalXYZ(scene::IMesh *mesh, @@ -397,8 +386,8 @@ scene::SMesh* cloneMesh(scene::IMesh *src_mesh) scene::IMeshBuffer *temp_buf = cloneMeshBuffer( src_mesh->getMeshBuffer(j)); dst_mesh->addMeshBuffer(temp_buf); + dst_mesh->setTextureSlot(j, src_mesh->getTextureSlot(j)); temp_buf->drop(); - } return dst_mesh; } @@ -411,7 +400,6 @@ scene::IMesh* convertNodeboxesToMesh(const std::vector &boxes, for (u16 j = 0; j < 6; j++) { scene::IMeshBuffer *buf = new scene::SMeshBuffer(); - buf->getMaterial().Lighting = false; buf->getMaterial().forEachTexture([] (auto &tex) { tex.MinFilter = video::ETMINF_NEAREST_MIPMAP_NEAREST; tex.MagFilter = video::ETMAGF_NEAREST; diff --git a/src/client/mesh.h b/src/client/mesh.h index 0c3e8942e..c04cfb0af 100644 --- a/src/client/mesh.h +++ b/src/client/mesh.h @@ -27,7 +27,7 @@ with this program; if not, write to the Free Software Foundation, Inc., * Applies shading to a color based on the surface's * normal vector. */ -void applyFacesShading(video::SColor &color, const v3f &normal); +void applyFacesShading(video::SColor &color, const v3f normal); /* Create a new cube mesh. @@ -52,24 +52,12 @@ void translateMesh(scene::IMesh *mesh, v3f vec); /*! * Sets a constant color for all vertices in the mesh buffer. */ -void setMeshBufferColor(scene::IMeshBuffer *buf, const video::SColor &color); +void setMeshBufferColor(scene::IMeshBuffer *buf, const video::SColor color); /* Set a constant color for all vertices in the mesh */ -void setMeshColor(scene::IMesh *mesh, const video::SColor &color); - - -/* - Sets texture coords for vertices in the mesh buffer. - `uv[]` must have `count` elements -*/ -void setMeshBufferTextureCoords(scene::IMeshBuffer *buf, const v2f *uv, u32 count); - -/* - Set a constant color for an animated mesh -*/ -void setAnimatedMeshColor(scene::IAnimatedMeshSceneNode *node, const video::SColor &color); +void setMeshColor(scene::IMesh *mesh, const video::SColor color); /*! * Overwrites the color of a mesh buffer. @@ -139,5 +127,5 @@ bool checkMeshNormals(scene::IMesh *mesh); Set the MinFilter, MagFilter and AnisotropicFilter properties of a texture layer according to the three relevant boolean values found in the Minetest settings. -*/ +*/ void setMaterialFilters(video::SMaterialLayer &tex, bool bilinear, bool trilinear, bool anisotropic); diff --git a/src/client/mesh_generator_thread.cpp b/src/client/mesh_generator_thread.cpp index 32a01205d..21656aa6e 100644 --- a/src/client/mesh_generator_thread.cpp +++ b/src/client/mesh_generator_thread.cpp @@ -24,18 +24,20 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "mapblock.h" #include "map.h" #include "util/directiontables.h" +#include "porting.h" -static class BlockPlaceholder { -public: - MapNode data[MAP_BLOCKSIZE * MAP_BLOCKSIZE * MAP_BLOCKSIZE]; +// Data placeholder used for copying from non-existent blocks +static struct BlockPlaceholder { + MapNode data[MapBlock::nodecount]; BlockPlaceholder() { - for (std::size_t i = 0; i < MAP_BLOCKSIZE * MAP_BLOCKSIZE * MAP_BLOCKSIZE; i++) + for (std::size_t i = 0; i < MapBlock::nodecount; i++) data[i] = MapNode(CONTENT_IGNORE); } } block_placeholder; + /* QueuedMeshUpdate */ @@ -225,12 +227,13 @@ void MeshUpdateWorkerThread::doUpdate() while ((q = m_queue_in->pop())) { if (m_generation_interval) sleep_ms(m_generation_interval); + + porting::TriggerMemoryTrim(); + ScopeProfiler sp(g_profiler, "Client: Mesh making (sum)"); MapBlockMesh *mesh_new = new MapBlockMesh(m_client, q->data, *m_camera_offset); - - MeshUpdateResult r; r.p = q->p; r.mesh = mesh_new; diff --git a/src/client/minimap.cpp b/src/client/minimap.cpp index bc43b7221..ccfb99f05 100644 --- a/src/client/minimap.cpp +++ b/src/client/minimap.cpp @@ -201,7 +201,7 @@ Minimap::Minimap(Client *client) addMode(MINIMAP_TYPE_RADAR, 128); // Initialize minimap data - data = new MinimapData; + data = std::make_unique(); data->map_invalidated = true; data->minimap_shape_round = g_settings->getBool("minimap_shape_round"); @@ -209,11 +209,11 @@ Minimap::Minimap(Client *client) setModeIndex(0); // Create mesh buffer for minimap - m_meshbuffer = getMinimapMeshBuffer(); + m_meshbuffer = createMinimapMeshBuffer(); // Initialize and start thread - m_minimap_update_thread = new MinimapUpdateThread(); - m_minimap_update_thread->data = data; + m_minimap_update_thread = std::make_unique(); + m_minimap_update_thread->data = data.get(); m_minimap_update_thread->start(); } @@ -222,7 +222,7 @@ Minimap::~Minimap() m_minimap_update_thread->stop(); m_minimap_update_thread->wait(); - m_meshbuffer->drop(); + m_meshbuffer.reset(); if (data->minimap_mask_round) data->minimap_mask_round->drop(); @@ -232,12 +232,10 @@ Minimap::~Minimap() driver->removeTexture(data->texture); driver->removeTexture(data->heightmap_texture); - for (MinimapMarker *m : m_markers) - delete m; m_markers.clear(); - delete data; - delete m_minimap_update_thread; + data.reset(); + m_minimap_update_thread.reset(); } void Minimap::addBlock(v3s16 pos, MinimapMapblock *data) @@ -552,24 +550,26 @@ v3f Minimap::getYawVec() return v3f(1.0, 0.0, 1.0); } -scene::SMeshBuffer *Minimap::getMinimapMeshBuffer() +irr_ptr Minimap::createMinimapMeshBuffer() { - scene::SMeshBuffer *buf = new scene::SMeshBuffer(); - buf->Vertices.set_used(4); - buf->Indices.set_used(6); + auto buf = make_irr(); + auto &vertices = buf->Vertices->Data; + auto &indices = buf->Indices->Data; + vertices.resize(4); + indices.resize(6); static const video::SColor c(255, 255, 255, 255); - buf->Vertices[0] = video::S3DVertex(-1, -1, 0, 0, 0, 1, c, 0, 1); - buf->Vertices[1] = video::S3DVertex(-1, 1, 0, 0, 0, 1, c, 0, 0); - buf->Vertices[2] = video::S3DVertex( 1, 1, 0, 0, 0, 1, c, 1, 0); - buf->Vertices[3] = video::S3DVertex( 1, -1, 0, 0, 0, 1, c, 1, 1); + vertices[0] = video::S3DVertex(-1, -1, 0, 0, 0, 1, c, 0, 1); + vertices[1] = video::S3DVertex(-1, 1, 0, 0, 0, 1, c, 0, 0); + vertices[2] = video::S3DVertex( 1, 1, 0, 0, 0, 1, c, 1, 0); + vertices[3] = video::S3DVertex( 1, -1, 0, 0, 0, 1, c, 1, 1); - buf->Indices[0] = 0; - buf->Indices[1] = 1; - buf->Indices[2] = 2; - buf->Indices[3] = 2; - buf->Indices[4] = 3; - buf->Indices[5] = 0; + indices[0] = 0; + indices[1] = 1; + indices[2] = 2; + indices[3] = 2; + indices[4] = 3; + indices[5] = 0; buf->setHardwareMappingHint(scene::EHM_STATIC); return buf; @@ -610,7 +610,6 @@ void Minimap::drawMinimap(core::rect rect) tex.MinFilter = video::ETMINF_NEAREST_MIPMAP_NEAREST; tex.MagFilter = video::ETMAGF_NEAREST; }); - material.Lighting = false; material.TextureLayers[0].Texture = minimap_texture; material.TextureLayers[1].Texture = data->heightmap_texture; @@ -627,7 +626,7 @@ void Minimap::drawMinimap(core::rect rect) // Draw minimap driver->setTransform(video::ETS_WORLD, matrix); driver->setMaterial(material); - driver->drawMeshBuffer(m_meshbuffer); + driver->drawMeshBuffer(m_meshbuffer.get()); // Draw overlay video::ITexture *minimap_overlay = data->minimap_shape_round ? @@ -635,7 +634,7 @@ void Minimap::drawMinimap(core::rect rect) material.TextureLayers[0].Texture = minimap_overlay; material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL; driver->setMaterial(material); - driver->drawMeshBuffer(m_meshbuffer); + driver->drawMeshBuffer(m_meshbuffer.get()); // Draw player marker on minimap if (data->minimap_shape_round) { @@ -647,8 +646,7 @@ void Minimap::drawMinimap(core::rect rect) material.TextureLayers[0].Texture = data->player_marker; driver->setTransform(video::ETS_WORLD, matrix); driver->setMaterial(material); - driver->drawMeshBuffer(m_meshbuffer); - driver->drawMeshBuffer(m_meshbuffer); + driver->drawMeshBuffer(m_meshbuffer.get()); // Reset transformations driver->setTransform(video::ETS_VIEW, oldViewMat); @@ -686,17 +684,17 @@ void Minimap::drawMinimap(core::rect rect) } } -MinimapMarker* Minimap::addMarker(scene::ISceneNode *parent_node) +MinimapMarker *Minimap::addMarker(scene::ISceneNode *parent_node) { - MinimapMarker *m = new MinimapMarker(parent_node); - m_markers.push_back(m); - return m; + auto m = std::make_unique(parent_node); + auto ret = m.get(); + m_markers.push_back(std::move(m)); + return ret; } void Minimap::removeMarker(MinimapMarker **m) { - m_markers.remove(*m); - delete *m; + m_markers.remove_if([ptr = *m](const auto &up) { return up.get() == ptr; }); *m = nullptr; } @@ -710,7 +708,7 @@ void Minimap::updateActiveMarkers() data->mode.scan_height / 2, data->mode.map_size / 2); - for (MinimapMarker *marker : m_markers) { + for (auto &&marker : m_markers) { v3s16 pos = floatToInt(marker->parent_node->getAbsolutePosition() + cam_offset, BS) - pos_offset; if (pos.X < 0 || pos.X > data->mode.map_size || diff --git a/src/client/minimap.h b/src/client/minimap.h index f819deaf4..0c419fa63 100644 --- a/src/client/minimap.h +++ b/src/client/minimap.h @@ -21,6 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "../hud.h" #include "irrlichttypes_extrabloated.h" +#include "irr_ptr.h" #include "util/thread.h" #include "voxel.h" #include @@ -148,7 +149,7 @@ public: void blitMinimapPixelsToImageSurface(video::IImage *map_image, video::IImage *heightmap_image); - scene::SMeshBuffer *getMinimapMeshBuffer(); + irr_ptr createMinimapMeshBuffer(); MinimapMarker* addMarker(scene::ISceneNode *parent_node); void removeMarker(MinimapMarker **marker); @@ -158,20 +159,20 @@ public: video::IVideoDriver *driver; Client* client; - MinimapData *data; + std::unique_ptr data; private: ITextureSource *m_tsrc; IShaderSource *m_shdrsrc; const NodeDefManager *m_ndef; - MinimapUpdateThread *m_minimap_update_thread = nullptr; - scene::SMeshBuffer *m_meshbuffer; + 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; f32 m_angle; std::mutex m_mutex; - std::list m_markers; + std::list> m_markers; std::list m_active_markers; }; diff --git a/src/client/particles.cpp b/src/client/particles.cpp index c19282424..1eab93579 100644 --- a/src/client/particles.cpp +++ b/src/client/particles.cpp @@ -989,7 +989,6 @@ video::SMaterial ParticleManager::getMaterialForParticle(const ClientParticleTex video::SMaterial material; // Texture - material.Lighting = false; material.BackfaceCulling = false; material.FogEnable = true; material.forEachTexture([] (auto &tex) { diff --git a/src/client/render/anaglyph.cpp b/src/client/render/anaglyph.cpp index 4cb42db50..b1117998f 100644 --- a/src/client/render/anaglyph.cpp +++ b/src/client/render/anaglyph.cpp @@ -20,6 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "anaglyph.h" #include "client/camera.h" +#include /// SetColorMaskStep step diff --git a/src/client/render/core.h b/src/client/render/core.h index c5617bcb2..fb60b274e 100644 --- a/src/client/render/core.h +++ b/src/client/render/core.h @@ -21,6 +21,11 @@ with this program; if not, write to the Free Software Foundation, Inc., #pragma once #include "irrlichttypes_extrabloated.h" +namespace irr +{ + class IrrlichtDevice; +} + class ShadowRenderer; class Camera; class Client; diff --git a/src/client/render/pipeline.h b/src/client/render/pipeline.h index 836b6c9b9..31ceabe20 100644 --- a/src/client/render/pipeline.h +++ b/src/client/render/pipeline.h @@ -19,6 +19,8 @@ with this program; if not, write to the Free Software Foundation, Inc., #pragma once #include "irrlichttypes_extrabloated.h" +#include // used in all render/*.cpp +#include // used in all render/*.cpp #include #include @@ -31,6 +33,11 @@ class Client; class Hud; class ShadowRenderer; +namespace irr::video +{ + class IRenderTarget; +} + struct PipelineContext { PipelineContext(IrrlichtDevice *_device, Client *_client, Hud *_hud, ShadowRenderer *_shadow_renderer, video::SColor _color, v2u32 _target_size) diff --git a/src/client/render/plain.cpp b/src/client/render/plain.cpp index 60a732415..0ca2476ee 100644 --- a/src/client/render/plain.cpp +++ b/src/client/render/plain.cpp @@ -61,7 +61,6 @@ void DrawHUD::run(PipelineContext &context) if (context.draw_crosshair) context.hud->drawCrosshair(); - context.hud->drawHotbar(context.client->getEnv().getLocalPlayer()->getWieldIndex()); context.hud->drawLuaElements(context.client->getCamera()->getOffset()); context.client->getCamera()->drawNametags(); } diff --git a/src/client/renderingengine.cpp b/src/client/renderingengine.cpp index b0033c0e2..c4933e062 100644 --- a/src/client/renderingengine.cpp +++ b/src/client/renderingengine.cpp @@ -36,7 +36,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "inputhandler.h" #include "gettext.h" #include "filesys.h" -#include "../gui/guiSkin.h" #include "irrlicht_changes/static_text.h" #include "irr_ptr.h" @@ -126,27 +125,6 @@ IShaderConstantSetter *FogShaderConstantSetterFactory::create() /* Other helpers */ -static gui::GUISkin *createSkin(gui::IGUIEnvironment *environment, - gui::EGUI_SKIN_TYPE type, video::IVideoDriver *driver) -{ - gui::GUISkin *skin = new gui::GUISkin(type, driver); - - gui::IGUIFont *builtinfont = environment->getBuiltInFont(); - gui::IGUIFontBitmap *bitfont = nullptr; - if (builtinfont && builtinfont->getType() == gui::EGFT_BITMAP) - bitfont = (gui::IGUIFontBitmap*)builtinfont; - - gui::IGUISpriteBank *bank = 0; - skin->setFont(builtinfont); - - if (bitfont) - bank = bitfont->getSpriteBank(); - - skin->setSpriteBank(bank); - - return skin; -} - static std::optional chooseVideoDriver() { auto &&configured_name = g_settings->get("video_driver"); @@ -250,11 +228,6 @@ RenderingEngine::RenderingEngine(IEventReceiver *receiver) s_singleton = this; - auto skin = createSkin(m_device->getGUIEnvironment(), - gui::EGST_WINDOWS_METALLIC, driver); - m_device->getGUIEnvironment()->setSkin(skin); - skin->drop(); - g_settings->registerChangedCallback("fullscreen", settingChangedCallback, this); g_settings->registerChangedCallback("window_maximized", settingChangedCallback, this); } @@ -418,7 +391,6 @@ std::vector RenderingEngine::getSupportedVideoDrivers() video::EDT_OPENGL, video::EDT_OPENGL3, video::EDT_OGLES2, - video::EDT_OGLES1, video::EDT_NULL, }; std::vector drivers; @@ -454,7 +426,6 @@ const VideoDriverInfo &RenderingEngine::getVideoDriverInfo(irr::video::E_DRIVER_ {(int)video::EDT_NULL, {"null", "NULL Driver"}}, {(int)video::EDT_OPENGL, {"opengl", "OpenGL"}}, {(int)video::EDT_OPENGL3, {"opengl3", "OpenGL 3+"}}, - {(int)video::EDT_OGLES1, {"ogles1", "OpenGL ES1"}}, {(int)video::EDT_OGLES2, {"ogles2", "OpenGL ES2"}}, }; return driver_info_map.at((int)type); @@ -462,18 +433,14 @@ const VideoDriverInfo &RenderingEngine::getVideoDriverInfo(irr::video::E_DRIVER_ float RenderingEngine::getDisplayDensity() { + float user_factor = g_settings->getFloat("display_density_factor", 0.5f, 5.0f); #ifndef __ANDROID__ - static float cached_display_density = [&] { - float dpi = get_raw_device()->getDisplayDensity(); - // fall back to manually specified dpi - if (dpi == 0.0f) - dpi = g_settings->getFloat("screen_dpi"); - return dpi / 96.0f; - }(); - return std::max(cached_display_density * g_settings->getFloat("display_density_factor"), 0.5f); - + float dpi = get_raw_device()->getDisplayDensity(); + if (dpi == 0.0f) + dpi = 96.0f; + return std::max(dpi / 96.0f * user_factor, 0.5f); #else // __ANDROID__ - return porting::getDisplayDensity(); + return porting::getDisplayDensity() * user_factor; #endif // __ANDROID__ } @@ -489,11 +456,14 @@ void RenderingEngine::autosaveScreensizeAndCo( // we do not want to save the thing. This allows users to also manually change // the settings. + // Don't save the fullscreen size, we want the windowed size. + bool fullscreen = RenderingEngine::get_raw_device()->isFullscreen(); // Screen size const irr::core::dimension2d current_screen_size = RenderingEngine::get_video_driver()->getScreenSize(); // Don't replace good value with (0, 0) - if (current_screen_size != irr::core::dimension2d(0, 0) && + if (!fullscreen && + current_screen_size != irr::core::dimension2d(0, 0) && current_screen_size != initial_screen_size) { g_settings->setU16("screen_w", current_screen_size.Width); g_settings->setU16("screen_h", current_screen_size.Height); diff --git a/src/client/renderingengine.h b/src/client/renderingengine.h index 1a2a63513..7f7518f61 100644 --- a/src/client/renderingengine.h +++ b/src/client/renderingengine.h @@ -29,6 +29,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "client/render/core.h" // include the shadow mapper classes too #include "client/shadows/dynamicshadowsrender.h" +#include #ifdef SERVER #error Do not include in server builds diff --git a/src/client/shader.cpp b/src/client/shader.cpp index 2493001e5..39730463f 100644 --- a/src/client/shader.cpp +++ b/src/client/shader.cpp @@ -218,15 +218,15 @@ class MainShaderConstantSetter : public IShaderConstantSetter CachedVertexShaderSetting m_texture{"mTexture"}; // commonly used way to pass material color to shader - video::SColor m_emissive_color; - CachedPixelShaderSetting m_emissive_color_setting{"emissiveColor"}; + video::SColor m_material_color; + CachedPixelShaderSetting m_material_color_setting{"materialColor"}; public: ~MainShaderConstantSetter() = default; virtual void onSetMaterial(const video::SMaterial& material) override { - m_emissive_color = material.EmissiveColor; + m_material_color = material.ColorParam; } virtual void onSetConstants(video::IMaterialRendererServices *services) override @@ -249,13 +249,13 @@ public: m_world_view_proj.set(worldViewProj, services); if (driver->getDriverType() == video::EDT_OGLES2 || driver->getDriverType() == video::EDT_OPENGL3) { - core::matrix4 texture = driver->getTransform(video::ETS_TEXTURE_0); + auto &texture = driver->getTransform(video::ETS_TEXTURE_0); m_world_view.set(worldView, services); m_texture.set(texture, services); } - video::SColorf emissive_color(m_emissive_color); - m_emissive_color_setting.set(emissive_color, services); + video::SColorf colorf(m_material_color); + m_material_color_setting.set(colorf, services); } }; @@ -573,6 +573,7 @@ ShaderInfo ShaderSource::generateShader(const std::string &name, } else { shaders_header << "#version 100\n"; } + // cf. EVertexAttributes.h for the predefined ones vertex_header = R"( precision mediump float; @@ -582,7 +583,7 @@ ShaderInfo ShaderSource::generateShader(const std::string &name, attribute highp vec4 inVertexPosition; attribute lowp vec4 inVertexColor; - attribute mediump vec4 inTexCoord0; + attribute mediump vec2 inTexCoord0; attribute mediump vec3 inVertexNormal; attribute mediump vec4 inVertexTangent; attribute mediump vec4 inVertexBinormal; @@ -691,6 +692,15 @@ ShaderInfo ShaderSource::generateShader(const std::string &name, if (g_settings->getBool("enable_bumpmaps")) shaders_header << "#define ENABLE_BUMPMAPS 1\n"; + if (g_settings->getBool("enable_water_reflections")) + shaders_header << "#define ENABLE_WATER_REFLECTIONS 1\n"; + + if (g_settings->getBool("enable_translucent_foliage")) + shaders_header << "#define ENABLE_TRANSLUCENT_FOLIAGE 1\n"; + + if (g_settings->getBool("enable_node_specular")) + shaders_header << "#define ENABLE_NODE_SPECULAR 1\n"; + s32 shadow_filter = g_settings->getS32("shadow_filters"); shaders_header << "#define SHADOW_FILTER " << shadow_filter << "\n"; diff --git a/src/client/shadows/dynamicshadows.cpp b/src/client/shadows/dynamicshadows.cpp index 11db9bea7..ffe7d4de5 100644 --- a/src/client/shadows/dynamicshadows.cpp +++ b/src/client/shadows/dynamicshadows.cpp @@ -24,6 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "client/clientenvironment.h" #include "client/clientmap.h" #include "client/camera.h" +#include using m4f = core::matrix4; diff --git a/src/client/shadows/dynamicshadowsrender.cpp b/src/client/shadows/dynamicshadowsrender.cpp index 1f49eed09..cfa54dfb7 100644 --- a/src/client/shadows/dynamicshadowsrender.cpp +++ b/src/client/shadows/dynamicshadowsrender.cpp @@ -32,6 +32,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "EShaderTypes.h" #include "IGPUProgrammingServices.h" #include "IMaterialRenderer.h" +#include ShadowRenderer::ShadowRenderer(IrrlichtDevice *device, Client *client) : m_smgr(device->getSceneManager()), m_driver(device->getVideoDriver()), @@ -140,7 +141,7 @@ void ShadowRenderer::initialize() } createShaders(); - + m_texture_format = m_shadow_map_texture_32bit ? video::ECOLOR_FORMAT::ECF_R32F diff --git a/src/client/shadows/dynamicshadowsrender.h b/src/client/shadows/dynamicshadowsrender.h index fc139e28b..d4437be68 100644 --- a/src/client/shadows/dynamicshadowsrender.h +++ b/src/client/shadows/dynamicshadowsrender.h @@ -21,6 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include +#include #include "irrlichttypes_extrabloated.h" #include "client/shadows/dynamicshadows.h" @@ -93,9 +94,11 @@ public: bool is_active() const { return m_shadows_enabled && shadowMapTextureFinal != nullptr; } void setTimeOfDay(float isDay) { m_time_day = isDay; }; void setShadowIntensity(float shadow_intensity); + void setShadowTint(video::SColor shadow_tint) { m_shadow_tint = shadow_tint; } s32 getShadowSamples() const { return m_shadow_samples; } float getShadowStrength() const { return m_shadows_enabled ? m_shadow_strength : 0.0f; } + video::SColor getShadowTint() const { return m_shadow_tint; } float getTimeOfDay() const { return m_time_day; } f32 getPerspectiveBiasXY() { return m_perspective_bias_xy; } @@ -130,6 +133,7 @@ private: std::vector m_shadow_node_array; float m_shadow_strength; + video::SColor m_shadow_tint{ 255, 0, 0, 0 }; float m_shadow_strength_gamma; float m_shadow_map_max_distance; float m_shadow_map_texture_size; diff --git a/src/client/shadows/shadowsScreenQuad.cpp b/src/client/shadows/shadowsScreenQuad.cpp index 5f6d38157..d1713578d 100644 --- a/src/client/shadows/shadowsScreenQuad.cpp +++ b/src/client/shadows/shadowsScreenQuad.cpp @@ -18,11 +18,11 @@ with this program; if not, write to the Free Software Foundation, Inc., */ #include "shadowsScreenQuad.h" +#include shadowScreenQuad::shadowScreenQuad() { Material.Wireframe = false; - Material.Lighting = false; video::SColor color(0x0); Vertices[0] = video::S3DVertex( diff --git a/src/client/shadows/shadowsshadercallbacks.cpp b/src/client/shadows/shadowsshadercallbacks.cpp index 32d3e36be..fc4f73186 100644 --- a/src/client/shadows/shadowsshadercallbacks.cpp +++ b/src/client/shadows/shadowsshadercallbacks.cpp @@ -40,6 +40,9 @@ void ShadowConstantSetter::onSetConstants(video::IMaterialRendererServices *serv f32 ShadowStrength = shadow->getShadowStrength(); m_shadow_strength.set(&ShadowStrength, services); + video::SColor ShadowTint = shadow->getShadowTint(); + m_shadow_tint.set(ShadowTint, services); + f32 timeOfDay = shadow->getTimeOfDay(); m_time_of_day.set(&timeOfDay, services); diff --git a/src/client/shadows/shadowsshadercallbacks.h b/src/client/shadows/shadowsshadercallbacks.h index af83f021e..beac25d72 100644 --- a/src/client/shadows/shadowsshadercallbacks.h +++ b/src/client/shadows/shadowsshadercallbacks.h @@ -31,6 +31,7 @@ class ShadowConstantSetter : public IShaderConstantSetter CachedPixelShaderSetting m_light_direction{"v_LightDirection"}; CachedPixelShaderSetting m_texture_res{"f_textureresolution"}; CachedPixelShaderSetting m_shadow_strength{"f_shadow_strength"}; + CachedPixelShaderSetting m_shadow_tint{ "shadow_tint" }; CachedPixelShaderSetting m_time_of_day{"f_timeofday"}; CachedPixelShaderSetting m_shadowfar{"f_shadowfar"}; CachedPixelShaderSetting m_camera_pos{"CameraPos"}; diff --git a/src/client/sky.cpp b/src/client/sky.cpp index 92e5df218..65577418e 100644 --- a/src/client/sky.cpp +++ b/src/client/sky.cpp @@ -25,6 +25,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include #include +#include "client/mesh.h" #include "client/tile.h" #include "noise.h" // easeCurve #include "profiler.h" @@ -38,7 +39,6 @@ using namespace irr::core; static video::SMaterial baseMaterial() { video::SMaterial mat; - mat.Lighting = false; mat.ZBuffer = video::ECFN_DISABLED; mat.ZWriteEnable = video::EZW_OFF; mat.AntiAliasing = 0; @@ -77,10 +77,9 @@ Sky::Sky(s32 id, RenderingEngine *rendering_engine, ITextureSource *tsrc, IShade // Create materials m_materials[0] = baseMaterial(); - // FIXME: shouldn't this check m_enable_shaders? - m_materials[0].MaterialType = ssrc->getShaderInfo(ssrc->getShader("stars_shader", TILE_MATERIAL_ALPHA)).material; - m_materials[0].Lighting = true; - m_materials[0].ColorMaterial = video::ECM_NONE; + m_materials[0].MaterialType = m_enable_shaders ? + ssrc->getShaderInfo(ssrc->getShader("stars_shader", TILE_MATERIAL_ALPHA)).material : + video::EMT_TRANSPARENT_ALPHA_CHANNEL; m_materials[1] = baseMaterial(); m_materials[1].MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL; @@ -95,7 +94,6 @@ Sky::Sky(s32 id, RenderingEngine *rendering_engine, ITextureSource *tsrc, IShade for (int i = 5; i < 11; i++) { m_materials[i] = baseMaterial(); - m_materials[i].Lighting = true; m_materials[i].MaterialType = video::EMT_SOLID; } @@ -169,7 +167,8 @@ void Sky::render() video::SColor texel_color (255, texel->getRed(), texel->getGreen(), texel->getBlue()); m_sun_tonemap->unlock(); - m_materials[3].EmissiveColor = texel_color; + // Only accessed by our code later, not used by a shader + m_materials[3].ColorParam = texel_color; } if (m_moon_tonemap) { @@ -178,7 +177,8 @@ void Sky::render() video::SColor texel_color (255, texel->getRed(), texel->getGreen(), texel->getBlue()); m_moon_tonemap->unlock(); - m_materials[4].EmissiveColor = texel_color; + // Only accessed by our code later, not used by a shader + m_materials[4].ColorParam = texel_color; } const f32 t = 1.0f; @@ -465,11 +465,11 @@ void Sky::update(float time_of_day, float time_brightness, // which keeps previous behavior. if (m_sun_tonemap && m_default_tint) { pointcolor_sun_f.r = pointcolor_light * - (float)m_materials[3].EmissiveColor.getRed() / 255; + (float)m_materials[3].ColorParam.getRed() / 255; pointcolor_sun_f.b = pointcolor_light * - (float)m_materials[3].EmissiveColor.getBlue() / 255; + (float)m_materials[3].ColorParam.getBlue() / 255; pointcolor_sun_f.g = pointcolor_light * - (float)m_materials[3].EmissiveColor.getGreen() / 255; + (float)m_materials[3].ColorParam.getGreen() / 255; } else if (!m_default_tint) { pointcolor_sun_f = m_sky_params.fog_sun_tint; } else { @@ -498,11 +498,11 @@ void Sky::update(float time_of_day, float time_brightness, } if (m_moon_tonemap && m_default_tint) { pointcolor_moon_f.r = pointcolor_light * - (float)m_materials[4].EmissiveColor.getRed() / 255; + (float)m_materials[4].ColorParam.getRed() / 255; pointcolor_moon_f.b = pointcolor_light * - (float)m_materials[4].EmissiveColor.getBlue() / 255; + (float)m_materials[4].ColorParam.getBlue() / 255; pointcolor_moon_f.g = pointcolor_light * - (float)m_materials[4].EmissiveColor.getGreen() / 255; + (float)m_materials[4].ColorParam.getGreen() / 255; } video::SColor pointcolor_sun = pointcolor_sun_f.toSColor(); @@ -603,11 +603,8 @@ void Sky::draw_sun(video::IVideoDriver *driver, const video::SColor &suncolor, // Another magic number that contributes to the ratio 1.57 sun/moon size // difference. float d = (sunsize * 1.7) * m_sun_params.scale; - video::SColor c; - if (m_sun_tonemap) - c = video::SColor(0, 0, 0, 0); - else - c = video::SColor(255, 255, 255, 255); + video::SColor c = m_sun_tonemap ? m_materials[3].ColorParam : + video::SColor(255, 255, 255, 255); draw_sky_body(vertices, -d, d, c); place_sky_body(vertices, 90, wicked_time_of_day * 360 - 90); driver->drawIndexedTriangleList(&vertices[0], 4, indices, 2); @@ -660,11 +657,8 @@ void Sky::draw_moon(video::IVideoDriver *driver, const video::SColor &mooncolor, // Another magic number that contributes to the ratio 1.57 sun/moon size // difference. float d = (moonsize * 1.9) * m_moon_params.scale; - video::SColor c; - if (m_moon_tonemap) - c = video::SColor(0, 0, 0, 0); - else - c = video::SColor(255, 255, 255, 255); + video::SColor c = m_sun_tonemap ? m_materials[4].ColorParam : + video::SColor(255, 255, 255, 255); draw_sky_body(vertices, -d, d, c); place_sky_body(vertices, -90, wicked_time_of_day * 360 - 90); driver->drawIndexedTriangleList(&vertices[0], 4, indices, 2); @@ -688,7 +682,10 @@ 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; - m_materials[0].EmissiveColor = color.toSColor(); + if (m_enable_shaders) + m_materials[0].ColorParam = color.toSColor(); + else + setMeshBufferColor(m_stars.get(), 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); @@ -742,7 +739,6 @@ void Sky::setSunTexture(const std::string &sun_texture, m_sun_params.tonemap = sun_tonemap; m_sun_tonemap = tsrc->isKnownSourceImage(sun_tonemap) ? tsrc->getTexture(sun_tonemap) : nullptr; - m_materials[3].Lighting = !!m_sun_tonemap; if (m_sun_params.texture == sun_texture && !m_first_update) return; @@ -762,7 +758,6 @@ void Sky::setSunTexture(const std::string &sun_texture, m_materials[3].setTexture(0, m_sun_texture); m_materials[3].MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL; disableTextureFiltering(m_materials[3]); - m_materials[3].Lighting = !!m_sun_tonemap; } } @@ -786,7 +781,6 @@ void Sky::setMoonTexture(const std::string &moon_texture, m_moon_params.tonemap = moon_tonemap; m_moon_tonemap = tsrc->isKnownSourceImage(moon_tonemap) ? tsrc->getTexture(moon_tonemap) : nullptr; - m_materials[4].Lighting = !!m_moon_tonemap; if (m_moon_params.texture == moon_texture && !m_first_update) return; @@ -806,7 +800,6 @@ void Sky::setMoonTexture(const std::string &moon_texture, m_materials[4].setTexture(0, m_moon_texture); m_materials[4].MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL; disableTextureFiltering(m_materials[4]); - m_materials[4].Lighting = !!m_moon_tonemap; } } @@ -830,10 +823,11 @@ void Sky::updateStars() warningstream << "Requested " << m_star_params.count << " stars but " << 0x4000 << " is the max\n"; m_star_params.count = 0x4000; } - m_stars->Vertices.reallocate(4 * m_star_params.count); - m_stars->Indices.reallocate(6 * m_star_params.count); + auto &vertices = m_stars->Vertices->Data; + auto &indices = m_stars->Indices->Data; + vertices.reserve(4 * m_star_params.count); + indices.reserve(6 * m_star_params.count); - video::SColor fallback_color = m_star_params.starcolor; // used on GLES 2 “without shaders” PcgRandom rgen(m_seed); float d = (0.006 / 2) * m_star_params.scale; for (u16 i = 0; i < m_star_params.count; i++) { @@ -852,20 +846,21 @@ void Sky::updateStars() a.rotateVect(p1); a.rotateVect(p2); a.rotateVect(p3); - m_stars->Vertices.push_back(video::S3DVertex(p, {}, fallback_color, {})); - m_stars->Vertices.push_back(video::S3DVertex(p1, {}, fallback_color, {})); - m_stars->Vertices.push_back(video::S3DVertex(p2, {}, fallback_color, {})); - m_stars->Vertices.push_back(video::S3DVertex(p3, {}, fallback_color, {})); + vertices.push_back(video::S3DVertex(p, {}, {}, {})); + vertices.push_back(video::S3DVertex(p1, {}, {}, {})); + vertices.push_back(video::S3DVertex(p2, {}, {}, {})); + vertices.push_back(video::S3DVertex(p3, {}, {}, {})); } for (u16 i = 0; i < m_star_params.count; i++) { - m_stars->Indices.push_back(i * 4 + 0); - m_stars->Indices.push_back(i * 4 + 1); - m_stars->Indices.push_back(i * 4 + 2); - m_stars->Indices.push_back(i * 4 + 2); - m_stars->Indices.push_back(i * 4 + 3); - m_stars->Indices.push_back(i * 4 + 0); + indices.push_back(i * 4 + 0); + indices.push_back(i * 4 + 1); + indices.push_back(i * 4 + 2); + indices.push_back(i * 4 + 2); + indices.push_back(i * 4 + 3); + indices.push_back(i * 4 + 0); } - m_stars->setHardwareMappingHint(scene::EHM_STATIC); + if (m_enable_shaders) + 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 2eadea561..eba301e18 100644 --- a/src/client/sky.h +++ b/src/client/sky.h @@ -19,16 +19,22 @@ with this program; if not, write to the Free Software Foundation, Inc., #pragma once -#include "irrlichttypes_extrabloated.h" +#include "irrlichttypes_bloated.h" #include +#include #include -#include "camera.h" +#include "camera.h" // CameraMode #include "irr_ptr.h" -#include "shader.h" #include "skyparams.h" #define SKY_MATERIAL_COUNT 12 +namespace irr::video +{ + class IVideoDriver; +} + +class IShaderSource; class ITextureSource; // Skybox, rendered with zbuffer turned off, before all other nodes. diff --git a/src/client/sound/sound_manager.cpp b/src/client/sound/sound_manager.cpp index 679d3a155..fc171d565 100644 --- a/src/client/sound/sound_manager.cpp +++ b/src/client/sound/sound_manager.cpp @@ -26,9 +26,12 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "sound_singleton.h" #include "util/numeric.h" // myrand() +#include "util/tracy_wrapper.h" #include "filesys.h" #include "porting.h" +#include + namespace sound { void OpenALSoundManager::stepStreams(f32 dtime) @@ -347,6 +350,13 @@ void OpenALSoundManager::updateListener(const v3f &pos_, const v3f &vel_, void OpenALSoundManager::setListenerGain(f32 gain) { +#if defined(__APPLE__) + /* macOS OpenAL implementation ignore setting AL_GAIN to zero + * so we use smallest possible value + */ + if (gain == 0.0f) + gain = std::numeric_limits::min(); +#endif alListenerf(AL_GAIN, gain); } @@ -492,6 +502,8 @@ void *OpenALSoundManager::run() u64 t_step_start = porting::getTimeMs(); while (true) { + auto framemarker = FrameMarker("OpenALSoundManager::run()-frame").started(); + auto get_time_since_last_step = [&] { return (f32)(porting::getTimeMs() - t_step_start); }; diff --git a/src/client/texturesource.cpp b/src/client/texturesource.cpp index 12a21771a..f18fa6cbf 100644 --- a/src/client/texturesource.cpp +++ b/src/client/texturesource.cpp @@ -39,7 +39,7 @@ struct TextureInfo }; // TextureSource -class TextureSource : public IWritableTextureSource +class TextureSource final : public IWritableTextureSource { public: TextureSource(); @@ -137,7 +137,6 @@ public: video::ITexture* getNormalTexture(const std::string &name); video::SColor getTextureAverageColor(const std::string &name); - video::ITexture *getShaderFlagsTexture(bool normamap_present); private: @@ -541,25 +540,3 @@ video::SColor TextureSource::getTextureAverageColor(const std::string &name) return c; } - - -video::ITexture *TextureSource::getShaderFlagsTexture(bool normalmap_present) -{ - std::string tname = "__shaderFlagsTexture"; - tname += normalmap_present ? "1" : "0"; - - if (isKnownSourceImage(tname)) { - return getTexture(tname); - } - - video::IVideoDriver *driver = RenderingEngine::get_video_driver(); - video::IImage *flags_image = driver->createImage( - video::ECF_A8R8G8B8, core::dimension2d(1, 1)); - sanity_check(flags_image); - video::SColor c(255, normalmap_present ? 255 : 0, 0, 0); - flags_image->setPixel(0, 0, c); - insertSourceImage(tname, flags_image); - flags_image->drop(); - return getTexture(tname); - -} diff --git a/src/client/texturesource.h b/src/client/texturesource.h index 5fef20821..324c58e4f 100644 --- a/src/client/texturesource.h +++ b/src/client/texturesource.h @@ -20,10 +20,16 @@ with this program; if not, write to the Free Software Foundation, Inc., #pragma once #include "irrlichttypes.h" -#include +#include #include #include +namespace irr::video +{ + class IImage; + class ITexture; +} + typedef std::vector Palette; /* @@ -65,7 +71,6 @@ public: virtual bool isKnownSourceImage(const std::string &name)=0; virtual video::ITexture* getNormalTexture(const std::string &name)=0; virtual video::SColor getTextureAverageColor(const std::string &name)=0; - virtual video::ITexture *getShaderFlagsTexture(bool normalmap_present)=0; }; class IWritableTextureSource : public ITextureSource @@ -87,7 +92,6 @@ public: virtual void rebuildImagesAndTextures()=0; virtual video::ITexture* getNormalTexture(const std::string &name)=0; virtual video::SColor getTextureAverageColor(const std::string &name)=0; - virtual video::ITexture *getShaderFlagsTexture(bool normalmap_present)=0; }; IWritableTextureSource *createTextureSource(); diff --git a/src/client/tile.h b/src/client/tile.h index d761eefdd..f41b127bf 100644 --- a/src/client/tile.h +++ b/src/client/tile.h @@ -62,8 +62,6 @@ struct FrameSpec u32 texture_id = 0; video::ITexture *texture = nullptr; - video::ITexture *normal_texture = nullptr; - video::ITexture *flags_texture = nullptr; }; #define MAX_TILE_LAYERS 2 @@ -114,8 +112,6 @@ struct TileLayer // Ordered for size, please do not reorder video::ITexture *texture = nullptr; - video::ITexture *normal_texture = nullptr; - video::ITexture *flags_texture = nullptr; u32 shader_id = 0; diff --git a/src/client/wieldmesh.cpp b/src/client/wieldmesh.cpp index 66f89efb1..e66214ae6 100644 --- a/src/client/wieldmesh.cpp +++ b/src/client/wieldmesh.cpp @@ -194,10 +194,9 @@ private: static ExtrusionMeshCache *g_extrusion_mesh_cache = nullptr; -WieldMeshSceneNode::WieldMeshSceneNode(scene::ISceneManager *mgr, s32 id, bool lighting): +WieldMeshSceneNode::WieldMeshSceneNode(scene::ISceneManager *mgr, s32 id): scene::ISceneNode(mgr->getRootSceneNode(), mgr, id), - m_material_type(video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF), - m_lighting(lighting) + 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"); @@ -306,9 +305,6 @@ void WieldMeshSceneNode::setExtruded(const std::string &imagename, }); // mipmaps cause "thin black line" artifacts material.UseMipMaps = false; - if (m_enable_shaders) { - material.setTexture(2, tsrc->getShaderFlagsTexture(false)); - } } } @@ -343,7 +339,6 @@ static scene::SMesh *createSpecialNodeMesh(Client *client, MapNode n, if (p.layer.material_flags & MATERIAL_FLAG_ANIMATION) { const FrameSpec &frame = (*p.layer.frames)[0]; p.layer.texture = frame.texture; - p.layer.normal_texture = frame.normal_texture; } for (video::S3DVertex &v : p.vertices) { v.Color.setAlpha(255); @@ -394,8 +389,7 @@ void WieldMeshSceneNode::setItem(const ItemStack &item, Client *client, bool che // overlay is white, if present m_colors.emplace_back(true, video::SColor(0xFFFFFFFF)); // initialize the color - if (!m_lighting) - setColor(video::SColor(0xFFFFFFFF)); + setColor(video::SColor(0xFFFFFFFF)); return; } @@ -472,8 +466,7 @@ void WieldMeshSceneNode::setItem(const ItemStack &item, Client *client, bool che } // initialize the color - if (!m_lighting) - setColor(video::SColor(0xFFFFFFFF)); + setColor(video::SColor(0xFFFFFFFF)); return; } else { const std::string inventory_image = item.getInventoryImage(idef); @@ -489,8 +482,7 @@ void WieldMeshSceneNode::setItem(const ItemStack &item, Client *client, bool che m_colors.emplace_back(true, video::SColor(0xFFFFFFFF)); // initialize the color - if (!m_lighting) - setColor(video::SColor(0xFFFFFFFF)); + setColor(video::SColor(0xFFFFFFFF)); return; } @@ -500,7 +492,6 @@ void WieldMeshSceneNode::setItem(const ItemStack &item, Client *client, bool che void WieldMeshSceneNode::setColor(video::SColor c) { - assert(!m_lighting); scene::IMesh *mesh = m_meshnode->getMesh(); if (!mesh) return; @@ -539,7 +530,7 @@ void WieldMeshSceneNode::setNodeLightColor(video::SColor color) if (m_enable_shaders) { for (u32 i = 0; i < m_meshnode->getMaterialCount(); ++i) { video::SMaterial &material = m_meshnode->getMaterial(i); - material.EmissiveColor = color; + material.ColorParam = color; } } else { setColor(color); @@ -569,11 +560,6 @@ void WieldMeshSceneNode::changeToMesh(scene::IMesh *mesh) mesh->setHardwareMappingHint(scene::EHM_DYNAMIC); } - m_meshnode->forEachMaterial([this] (auto &mat) { - mat.Lighting = m_lighting; - // need to normalize normals when lighting is enabled (because of setScale()) - mat.NormalizeNormals = m_lighting; - }); m_meshnode->setVisible(true); } @@ -671,7 +657,6 @@ void getItemMesh(Client *client, const ItemStack &item, ItemMesh *result) tex.MagFilter = video::ETMAGF_NEAREST; }); material.BackfaceCulling = cull_backface; - material.Lighting = false; } rotateMeshXZby(mesh, -45); @@ -724,7 +709,6 @@ scene::SMesh *getExtrudedMesh(ITextureSource *tsrc, tex.MagFilter = video::ETMAGF_NEAREST; }); material.BackfaceCulling = true; - material.Lighting = false; material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL; material.MaterialTypeParam = 0.5f; } @@ -772,16 +756,6 @@ void postProcessNodeMesh(scene::SMesh *mesh, const ContentFeatures &f, } else { material.setTexture(0, layer->texture); } - if (use_shaders) { - if (layer->normal_texture) { - if (layer->animation_frame_count > 1) { - const FrameSpec &animation_frame = (*layer->frames)[0]; - material.setTexture(1, animation_frame.normal_texture); - } else - material.setTexture(1, layer->normal_texture); - } - material.setTexture(2, layer->flags_texture); - } if (apply_scale && tile->world_aligned) { u32 n = buf->getVertexCount(); diff --git a/src/client/wieldmesh.h b/src/client/wieldmesh.h index 6358a6665..08240c8ef 100644 --- a/src/client/wieldmesh.h +++ b/src/client/wieldmesh.h @@ -21,7 +21,20 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include -#include "irrlichttypes_extrabloated.h" +#include "irr_aabb3d.h" +#include "irr_v3d.h" +#include +#include +#include + +namespace irr::scene +{ + class ISceneManager; + class IMesh; + struct SMesh; +} + +using namespace irr; struct ItemStack; class Client; @@ -91,7 +104,7 @@ struct ItemMesh class WieldMeshSceneNode : public scene::ISceneNode { public: - WieldMeshSceneNode(scene::ISceneManager *mgr, s32 id = -1, bool lighting = false); + WieldMeshSceneNode(scene::ISceneManager *mgr, s32 id = -1); virtual ~WieldMeshSceneNode(); void setCube(const ContentFeatures &f, v3f wield_scale); @@ -119,9 +132,6 @@ private: scene::IMeshSceneNode *m_meshnode = nullptr; video::E_MATERIAL_TYPE m_material_type; - // True if SMaterial::Lighting should be enabled. - bool m_lighting; - bool m_enable_shaders; bool m_anisotropic_filter; bool m_bilinear_filter; diff --git a/src/clientdynamicinfo.cpp b/src/clientdynamicinfo.cpp index a9b2a6ef3..12bc23abd 100644 --- a/src/clientdynamicinfo.cpp +++ b/src/clientdynamicinfo.cpp @@ -23,7 +23,8 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "settings.h" #include "client/renderingengine.h" -#include "gui/touchscreengui.h" +#include "gui/guiFormSpecMenu.h" +#include "gui/touchcontrols.h" ClientDynamicInfo ClientDynamicInfo::getCurrent() { @@ -33,23 +34,26 @@ ClientDynamicInfo ClientDynamicInfo::getCurrent() f32 hud_scaling = g_settings->getFloat("hud_scaling", 0.5f, 20.0f); f32 real_gui_scaling = gui_scaling * density; f32 real_hud_scaling = hud_scaling * density; - bool touch_controls = g_touchscreengui; + bool touch_controls = g_touchcontrols; return { screen_size, real_gui_scaling, real_hud_scaling, - ClientDynamicInfo::calculateMaxFSSize(screen_size, gui_scaling), + ClientDynamicInfo::calculateMaxFSSize(screen_size, density, gui_scaling), touch_controls }; } -v2f32 ClientDynamicInfo::calculateMaxFSSize(v2u32 render_target_size, f32 gui_scaling) +v2f32 ClientDynamicInfo::calculateMaxFSSize(v2u32 render_target_size, f32 density, f32 gui_scaling) { - f32 factor = (g_settings->getBool("enable_touch") ? 10 : 15) / gui_scaling; - f32 ratio = (f32)render_target_size.X / (f32)render_target_size.Y; - if (ratio < 1) - return { factor, factor / ratio }; - else - return { factor * ratio, factor }; + // must stay in sync with GUIFormSpecMenu::calculateImgsize + + const double screen_dpi = density * 96; + + // assume padding[0,0] since max_formspec_size is used for fullscreen formspecs + double prefer_imgsize = GUIFormSpecMenu::getImgsize(render_target_size, + screen_dpi, gui_scaling); + return v2f32(render_target_size.X / prefer_imgsize, + render_target_size.Y / prefer_imgsize); } #endif diff --git a/src/clientdynamicinfo.h b/src/clientdynamicinfo.h index 39faeeecc..c43fcb8d8 100644 --- a/src/clientdynamicinfo.h +++ b/src/clientdynamicinfo.h @@ -42,6 +42,6 @@ public: static ClientDynamicInfo getCurrent(); private: - static v2f32 calculateMaxFSSize(v2u32 render_target_size, f32 gui_scaling); + static v2f32 calculateMaxFSSize(v2u32 render_target_size, f32 density, f32 gui_scaling); #endif }; diff --git a/src/cmake_config.h.in b/src/cmake_config.h.in index 2185600af..5dc6e4b74 100644 --- a/src/cmake_config.h.in +++ b/src/cmake_config.h.in @@ -40,3 +40,5 @@ #cmakedefine01 CURSES_HAVE_NCURSESW_CURSES_H #cmakedefine01 BUILD_UNITTESTS #cmakedefine01 BUILD_BENCHMARKS +#cmakedefine01 USE_SDL2 +#cmakedefine01 BUILD_WITH_TRACY diff --git a/src/collision.cpp b/src/collision.cpp index d804f7f0d..f554dac80 100644 --- a/src/collision.cpp +++ b/src/collision.cpp @@ -273,7 +273,7 @@ static void add_object_boxes(Environment *env, const v3f pos_f, const v3f speed_f, ActiveObject *self, std::vector &cinfo) { - auto process_object = [&] (ActiveObject *object) { + auto process_object = [&cinfo] (ActiveObject *object) { if (object && object->collideWithObjects()) { aabb3f box; if (object->getCollisionBox(&box)) @@ -292,7 +292,7 @@ static void add_object_boxes(Environment *env, c_env->getActiveObjects(pos_f, distance, clientobjects); for (auto &clientobject : clientobjects) { - // Do collide with everything but itself and the parent CAO + // Do collide with everything but itself and children if (!self || (self != clientobject.obj && self != clientobject.obj->getParent())) { process_object(clientobject.obj); @@ -301,12 +301,12 @@ static void add_object_boxes(Environment *env, // add collision with local player LocalPlayer *lplayer = c_env->getLocalPlayer(); - if (lplayer->getParent() == nullptr) { + auto *obj = (ClientActiveObject*) lplayer->getCAO(); + if (!self || (self != obj && self != obj->getParent())) { aabb3f lplayer_collisionbox = lplayer->getCollisionbox(); v3f lplayer_pos = lplayer->getPosition(); lplayer_collisionbox.MinEdge += lplayer_pos; lplayer_collisionbox.MaxEdge += lplayer_pos; - auto *obj = (ActiveObject*) lplayer->getCAO(); cinfo.emplace_back(obj, 0, lplayer_collisionbox); } } @@ -315,7 +315,7 @@ static void add_object_boxes(Environment *env, { ServerEnvironment *s_env = dynamic_cast(env); if (s_env) { - // search for objects which are not us, or we are not its parent. + // search for objects which are not us and not our children. // we directly process the object in this callback to avoid useless // looping afterwards. auto include_obj_cb = [self, &process_object] (ServerActiveObject *obj) { @@ -623,8 +623,10 @@ bool collision_check_intersection(Environment *env, IGameDef *gamedef, Collision detection */ aabb3f checkbox = box_0; - checkbox.MinEdge += pos_f; - checkbox.MaxEdge += pos_f; + // aabbox3d::intersectsWithBox(box) returns true when the faces are touching perfectly. + // However, we do not want want a true-ish return value in that case. Add some tolerance. + checkbox.MinEdge += pos_f + (0.1f * BS); + checkbox.MaxEdge += pos_f - (0.1f * BS); /* Go through every node and object box diff --git a/src/collision.h b/src/collision.h index b29a222c3..a698e6328 100644 --- a/src/collision.h +++ b/src/collision.h @@ -65,7 +65,8 @@ struct collisionMoveResult std::vector collisions; }; -// Moves using a single iteration; speed should not exceed pos_max_d/dtime +/// @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, f32 stepheight, f32 dtime, @@ -73,7 +74,11 @@ collisionMoveResult collisionMoveSimple(Environment *env,IGameDef *gamedef, v3f accel_f, ActiveObject *self=NULL, bool collide_with_objects=true); -// check if box is in collision on actual position +/// @brief A simpler version of "collisionMoveSimple" that only checks whether +/// a collision occurs at the given position. +/// @param self (optional) ActiveObject to ignore in the collision detection. +/// @returns `true` when `box_0` truly intersects with a node or object. +/// Touching faces are not counted as intersection. bool collision_check_intersection(Environment *env, IGameDef *gamedef, const aabb3f &box_0, const v3f &pos_f, ActiveObject *self = nullptr, bool collide_with_objects = true); diff --git a/src/database/database-files.cpp b/src/database/database-files.cpp index 27f42fc97..612fed6c6 100644 --- a/src/database/database-files.cpp +++ b/src/database/database-files.cpp @@ -48,8 +48,7 @@ void PlayerDatabaseFiles::deSerialize(RemotePlayer *p, std::istream &is, p->m_dirty = true; //args.getS32("version"); // Version field value not used - const std::string &name = args.get("name"); - strlcpy(p->m_name, name.c_str(), PLAYERNAME_SIZE); + p->m_name = args.get("name"); if (sao) { try { @@ -96,7 +95,7 @@ void PlayerDatabaseFiles::deSerialize(RemotePlayer *p, std::istream &is, p->inventory.deSerialize(is); } catch (SerializationError &e) { errorstream << "Failed to deserialize player inventory. player_name=" - << name << " " << e.what() << std::endl; + << p->getName() << " " << e.what() << std::endl; } if (!p->inventory.getList("craftpreview") && p->inventory.getList("craftresult")) { @@ -119,7 +118,7 @@ void PlayerDatabaseFiles::serialize(RemotePlayer *p, std::ostream &os) // Utilize a Settings object for storing values Settings args("PlayerArgsEnd"); args.setS32("version", 1); - args.set("name", p->m_name); + args.set("name", p->getName()); PlayerSAO *sao = p->getPlayerSAO(); // This should not happen @@ -171,7 +170,7 @@ void PlayerDatabaseFiles::savePlayer(RemotePlayer *player) deSerialize(&testplayer, is, path, NULL); is.close(); - if (strcmp(testplayer.getName(), player->getName()) == 0) { + if (testplayer.getName() == player->getName()) { path_found = true; continue; } diff --git a/src/database/database-postgresql.cpp b/src/database/database-postgresql.cpp index 667d7afbb..7c464c81a 100644 --- a/src/database/database-postgresql.cpp +++ b/src/database/database-postgresql.cpp @@ -468,7 +468,7 @@ void PlayerDatabasePostgreSQL::savePlayer(RemotePlayer *player) std::string hp = itos(sao->getHP()); std::string breath = itos(sao->getBreath()); const char *values[] = { - player->getName(), + player->getName().c_str(), pitch.c_str(), yaw.c_str(), posx.c_str(), posy.c_str(), posz.c_str(), @@ -476,7 +476,7 @@ void PlayerDatabasePostgreSQL::savePlayer(RemotePlayer *player) breath.c_str() }; - const char* rmvalues[] = { player->getName() }; + const char* rmvalues[] = { player->getName().c_str() }; beginSave(); if (getPGVersion() < 90500) { @@ -501,7 +501,7 @@ void PlayerDatabasePostgreSQL::savePlayer(RemotePlayer *player) inv_id = itos(i), lsize = itos(list->getSize()); const char* inv_values[] = { - player->getName(), + player->getName().c_str(), inv_id.c_str(), width.c_str(), name.c_str(), @@ -516,7 +516,7 @@ void PlayerDatabasePostgreSQL::savePlayer(RemotePlayer *player) std::string itemStr = oss.str(), slotId = itos(j); const char* invitem_values[] = { - player->getName(), + player->getName().c_str(), inv_id.c_str(), slotId.c_str(), itemStr.c_str() @@ -529,7 +529,7 @@ void PlayerDatabasePostgreSQL::savePlayer(RemotePlayer *player) const StringMap &attrs = sao->getMeta().getStrings(); for (const auto &attr : attrs) { const char *meta_values[] = { - player->getName(), + player->getName().c_str(), attr.first.c_str(), attr.second.c_str() }; @@ -545,7 +545,7 @@ bool PlayerDatabasePostgreSQL::loadPlayer(RemotePlayer *player, PlayerSAO *sao) sanity_check(sao); verifyDatabase(); - const char *values[] = { player->getName() }; + const char *values[] = { player->getName().c_str() }; PGresult *results = execPrepared("load_player", 1, values, false, false); // Player not found, return not found @@ -580,7 +580,7 @@ bool PlayerDatabasePostgreSQL::loadPlayer(RemotePlayer *player, PlayerSAO *sao) std::string invIdStr = itos(invId); const char* values2[] = { - player->getName(), + player->getName().c_str(), invIdStr.c_str() }; PGresult *results2 = execPrepared("load_player_inventory_items", 2, diff --git a/src/database/database-redis.cpp b/src/database/database-redis.cpp index a9a4a37f1..a93f7711e 100644 --- a/src/database/database-redis.cpp +++ b/src/database/database-redis.cpp @@ -32,9 +32,13 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include -#if VERSION_MAJOR > 5 || VERSION_MINOR > 9 -#define DEPRECATION_PERIOD_OVER -#endif +/* + * Redis is not a good fit for Minetest and only still supported for legacy as + * well as advanced use case reasons, see: + * + * + * Do NOT extend this backend with any new functionality. + */ Database_Redis::Database_Redis(Settings &conf) { @@ -70,13 +74,8 @@ Database_Redis::Database_Redis(Settings &conf) freeReplyObject(reply); } - warningstream << "/!\\ You are using the deprecated redis backend. " -#ifdef DEPRECATION_PERIOD_OVER - << "This backend is only still supported for migrations. /!\\\n" -#else - << "This backend will become read-only in the next release. /!\\\n" -#endif - << "Please migrate to SQLite3 or PostgreSQL instead." << std::endl; + dstream << "Note: When storing data in Redis you need to ensure that eviction" + " is disabled, or you risk DATA LOSS." << std::endl; } Database_Redis::~Database_Redis() @@ -86,16 +85,12 @@ Database_Redis::~Database_Redis() void Database_Redis::beginSave() { -#ifdef DEPRECATION_PERIOD_OVER - throw DatabaseException("Redis backend is read-only, see deprecation notice."); -#else redisReply *reply = static_cast(redisCommand(ctx, "MULTI")); if (!reply) { throw DatabaseException(std::string( "Redis command 'MULTI' failed: ") + ctx->errstr); } freeReplyObject(reply); -#endif } void Database_Redis::endSave() diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index baf1b1417..5ac62534e 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -76,13 +76,6 @@ static bool detect_touch() return false; } - return false; -#elif defined(_WIN32) - // 0x01 The device has an integrated touch digitizer - // 0x80 The device is ready to receive digitizer input. - if ((GetSystemMetrics(SM_DIGITIZER) & 0x81) == 0x81) - return true; - return false; #else // we don't know, return default @@ -104,7 +97,8 @@ void set_default_settings() // Client settings->setDefault("address", ""); settings->setDefault("enable_sound", "true"); - settings->setDefault("enable_touch", bool_to_cstr(has_touch)); + settings->setDefault("touch_controls", bool_to_cstr(has_touch)); + settings->setDefault("touch_gui", bool_to_cstr(has_touch)); settings->setDefault("sound_volume", "0.8"); settings->setDefault("sound_volume_unfocused", "0.3"); settings->setDefault("mute_sound", "false"); @@ -281,6 +275,7 @@ void set_default_settings() settings->setDefault("view_bobbing_amount", "1.0"); settings->setDefault("fall_bobbing_amount", "0.03"); settings->setDefault("enable_3d_clouds", "true"); + settings->setDefault("soft_clouds", "false"); settings->setDefault("cloud_radius", "12"); settings->setDefault("menu_clouds", "true"); settings->setDefault("translucent_liquids", "true"); @@ -299,6 +294,7 @@ void set_default_settings() settings->setDefault("gui_scaling", "1.0"); settings->setDefault("gui_scaling_filter", "false"); settings->setDefault("gui_scaling_filter_txr2img", "true"); + settings->setDefault("smooth_scrolling", "true"); settings->setDefault("desynchronize_mapblock_texture_animation", "false"); settings->setDefault("hud_hotbar_max_width", "1.0"); settings->setDefault("enable_local_map_saving", "false"); @@ -308,6 +304,7 @@ void set_default_settings() settings->setDefault("enable_particles", "true"); settings->setDefault("arm_inertia", "true"); settings->setDefault("show_nametag_backgrounds", "true"); + settings->setDefault("show_block_bounds_radius_near", "4"); settings->setDefault("transparency_sorting_distance", "16"); settings->setDefault("enable_minimap", "true"); @@ -344,6 +341,9 @@ void set_default_settings() settings->setDefault("enable_volumetric_lighting", "false"); settings->setDefault("enable_volumetric_clouds", "false"); settings->setDefault("enable_bumpmaps", "false"); + settings->setDefault("enable_water_reflections", "false"); + settings->setDefault("enable_translucent_foliage", "false"); + settings->setDefault("enable_node_specular", "false"); // Effects Shadows settings->setDefault("enable_dynamic_shadows", "false"); @@ -364,7 +364,7 @@ void set_default_settings() settings->setDefault("invert_hotbar_mouse_wheel", "false"); settings->setDefault("mouse_sensitivity", "0.2"); settings->setDefault("repeat_place_time", "0.25"); - settings->setDefault("repeat_dig_time", "0.15"); + settings->setDefault("repeat_dig_time", "0.0"); settings->setDefault("safe_dig_and_place", "false"); settings->setDefault("random_input", "false"); settings->setDefault("aux1_descends", "false"); @@ -407,6 +407,7 @@ void set_default_settings() // ContentDB settings->setDefault("contentdb_url", "https://content.minetest.net"); + settings->setDefault("contentdb_enable_updates_indicator", "true"); settings->setDefault("contentdb_max_concurrent_downloads", "3"); #ifdef __ANDROID__ @@ -539,13 +540,14 @@ void set_default_settings() settings->setDefault("server_address", ""); settings->setDefault("server_name", ""); settings->setDefault("server_description", ""); + settings->setDefault("server_announce_send_players", "true"); settings->setDefault("enable_console", "false"); - settings->setDefault("screen_dpi", "72"); settings->setDefault("display_density_factor", "1"); + settings->setDefault("dpi_change_notifier", "0"); - // Altered settings for macOS -#if defined(__MACH__) && defined(__APPLE__) + // Altered settings for CIrrDeviceOSX +#if !USE_SDL2 && defined(__MACH__) && defined(__APPLE__) settings->setDefault("keymap_sneak", "KEY_SHIFT"); #endif diff --git a/src/emerge.cpp b/src/emerge.cpp index d6d6e630a..425e294b8 100644 --- a/src/emerge.cpp +++ b/src/emerge.cpp @@ -662,6 +662,8 @@ void *EmergeThread::run() EmergeAction action; MapBlock *block = nullptr; + porting::TriggerMemoryTrim(); + if (!popBlockEmerge(&pos, &bedata)) { m_queue_event.wait(); continue; @@ -690,7 +692,7 @@ void *EmergeThread::run() "EmergeThread: Lua on_generated", SPT_AVG); try { - m_script->on_generated(&bmdata); + m_script->on_generated(&bmdata, m_mapgen->blockseed); } catch (const LuaError &e) { m_server->setAsyncFatalError(e); error = true; diff --git a/src/emerge.h b/src/emerge.h index 4718637ad..d7f018feb 100644 --- a/src/emerge.h +++ b/src/emerge.h @@ -50,6 +50,7 @@ class ModApiMapgen; // Structure containing inputs/outputs for chunk generation struct BlockMakeData { MMVManip *vmanip = nullptr; + // Global map seed u64 seed = 0; v3s16 blockpos_min; v3s16 blockpos_max; diff --git a/src/filesys.cpp b/src/filesys.cpp index 26cdaba07..4287c8b05 100644 --- a/src/filesys.cpp +++ b/src/filesys.cpp @@ -697,32 +697,43 @@ bool MoveDir(const std::string &source, const std::string &target) bool PathStartsWith(const std::string &path, const std::string &prefix) { + if (prefix.empty()) + return path.empty(); size_t pathsize = path.size(); size_t pathpos = 0; size_t prefixsize = prefix.size(); size_t prefixpos = 0; for(;;){ + // Test if current characters at path and prefix are delimiter OR EOS bool delim1 = pathpos == pathsize || IsDirDelimiter(path[pathpos]); bool delim2 = prefixpos == prefixsize || IsDirDelimiter(prefix[prefixpos]); + // Return false if it's delimiter/EOS in one path but not in the other if(delim1 != delim2) return false; if(delim1){ + // Skip consequent delimiters in path, in prefix while(pathpos < pathsize && IsDirDelimiter(path[pathpos])) ++pathpos; while(prefixpos < prefixsize && IsDirDelimiter(prefix[prefixpos])) ++prefixpos; + // Return true if prefix has ended (at delimiter/EOS) if(prefixpos == prefixsize) return true; + // Return false if path has ended (at delimiter/EOS) + // while prefix did not. if(pathpos == pathsize) return false; } else{ + // Skip pairwise-equal characters in path and prefix until + // delimiter/EOS in path or prefix. + // Return false if differing characters are met. size_t len = 0; do{ char pathchar = path[pathpos+len]; @@ -954,13 +965,22 @@ bool extractZipFile(io::IFileSystem *fs, const char *filename, const std::string const io::IFileList* files_in_zip = opened_zip->getFileList(); for (u32 i = 0; i < files_in_zip->getFileCount(); i++) { - std::string fullpath = destination + DIR_DELIM; - fullpath += files_in_zip->getFullFileName(i).c_str(); - std::string fullpath_dir = fs::RemoveLastPathComponent(fullpath); - if (files_in_zip->isDirectory(i)) continue; // ignore, we create dirs as necessary + const auto &filename = files_in_zip->getFullFileName(i); + std::string fullpath = destination + DIR_DELIM; + fullpath += filename.c_str(); + + fullpath = fs::RemoveRelativePathComponents(fullpath); + if (!fs::PathStartsWith(fullpath, destination)) { + warningstream << "fs::extractZipFile(): refusing to extract file \"" + << filename.c_str() << "\"" << std::endl; + continue; + } + + std::string fullpath_dir = fs::RemoveLastPathComponent(fullpath); + if (!fs::PathExists(fullpath_dir) && !fs::CreateAllDirs(fullpath_dir)) return false; diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 66d6a9ee8..04a03609d 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -19,12 +19,11 @@ set(gui_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/guiScene.cpp ${CMAKE_CURRENT_SOURCE_DIR}/guiScrollBar.cpp ${CMAKE_CURRENT_SOURCE_DIR}/guiScrollContainer.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/guiSkin.cpp ${CMAKE_CURRENT_SOURCE_DIR}/guiTable.cpp ${CMAKE_CURRENT_SOURCE_DIR}/guiHyperText.cpp ${CMAKE_CURRENT_SOURCE_DIR}/guiVolumeChange.cpp ${CMAKE_CURRENT_SOURCE_DIR}/modalMenu.cpp ${CMAKE_CURRENT_SOURCE_DIR}/profilergraph.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/touchscreengui.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/touchcontrols.cpp PARENT_SCOPE ) diff --git a/src/gui/StyleSpec.h b/src/gui/StyleSpec.h index ef7416bca..373590a50 100644 --- a/src/gui/StyleSpec.h +++ b/src/gui/StyleSpec.h @@ -17,16 +17,17 @@ with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ +#pragma once + #include "client/texturesource.h" #include "client/fontengine.h" #include "debug.h" -#include "irrlichttypes_extrabloated.h" +#include "irrlichttypes_bloated.h" #include "util/string.h" #include #include #include -#pragma once class StyleSpec { diff --git a/src/gui/guiAnimatedImage.cpp b/src/gui/guiAnimatedImage.cpp index 5e14d2ef2..1c13531dc 100644 --- a/src/gui/guiAnimatedImage.cpp +++ b/src/gui/guiAnimatedImage.cpp @@ -6,6 +6,7 @@ #include "util/string.h" #include #include +#include GUIAnimatedImage::GUIAnimatedImage(gui::IGUIEnvironment *env, gui::IGUIElement *parent, s32 id, const core::rect &rectangle) : diff --git a/src/gui/guiBackgroundImage.cpp b/src/gui/guiBackgroundImage.cpp index 96197ca2c..f3b71bb8c 100644 --- a/src/gui/guiBackgroundImage.cpp +++ b/src/gui/guiBackgroundImage.cpp @@ -19,6 +19,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include "client/guiscalingfilter.h" #include "log.h" #include "client/texturesource.h" +#include GUIBackgroundImage::GUIBackgroundImage(gui::IGUIEnvironment *env, gui::IGUIElement *parent, s32 id, const core::rect &rectangle, diff --git a/src/gui/guiBox.cpp b/src/gui/guiBox.cpp index 443f1064f..972eb4538 100644 --- a/src/gui/guiBox.cpp +++ b/src/gui/guiBox.cpp @@ -18,6 +18,7 @@ with this program; if not, write to the Free Software Foundation, Inc., */ #include "guiBox.h" +#include GUIBox::GUIBox(gui::IGUIEnvironment *env, gui::IGUIElement *parent, s32 id, const core::rect &rectangle, diff --git a/src/gui/guiButton.cpp b/src/gui/guiButton.cpp index 4e47e7425..9592ba922 100644 --- a/src/gui/guiButton.cpp +++ b/src/gui/guiButton.cpp @@ -89,12 +89,11 @@ void GUIButton::setSpriteBank(IGUISpriteBank* sprites) SpriteBank = sprites; } -void GUIButton::setSprite(EGUI_BUTTON_STATE state, s32 index, video::SColor color, bool loop, bool scale) +void GUIButton::setSprite(EGUI_BUTTON_STATE state, s32 index, video::SColor color, bool loop) { ButtonSprites[(u32)state].Index = index; ButtonSprites[(u32)state].Color = color; ButtonSprites[(u32)state].Loop = loop; - ButtonSprites[(u32)state].Scale = scale; } //! Get the sprite-index for the given state or -1 when no sprite is set @@ -115,12 +114,6 @@ bool GUIButton::getSpriteLoop(EGUI_BUTTON_STATE state) const return ButtonSprites[(u32)state].Loop; } -//! Returns if the sprite in the given state is scaled -bool GUIButton::getSpriteScale(EGUI_BUTTON_STATE state) const -{ - return ButtonSprites[(u32)state].Scale; -} - //! called if an event happened. bool GUIButton::OnEvent(const SEvent& event) { @@ -260,8 +253,8 @@ void GUIButton::draw() setFromState(); } - GUISkin* skin = dynamic_cast(Environment->getSkin()); video::IVideoDriver* driver = Environment->getVideoDriver(); + IGUISkin *skin = Environment->getSkin(); // END PATCH if (DrawBorder) @@ -354,23 +347,26 @@ void GUIButton::draw() void GUIButton::drawSprite(EGUI_BUTTON_STATE state, u32 startTime, const core::position2di& center) { u32 stateIdx = (u32)state; + s32 spriteIdx = ButtonSprites[stateIdx].Index; + if (spriteIdx == -1) + return; - if (ButtonSprites[stateIdx].Index != -1) - { - if ( ButtonSprites[stateIdx].Scale ) - { - const video::SColor colors[] = {ButtonSprites[stateIdx].Color,ButtonSprites[stateIdx].Color,ButtonSprites[stateIdx].Color,ButtonSprites[stateIdx].Color}; - SpriteBank->draw2DSprite(ButtonSprites[stateIdx].Index, AbsoluteRect.UpperLeftCorner, - &AbsoluteClippingRect, colors[0], // FIXME: remove [0] - porting::getTimeMs()-startTime, ButtonSprites[stateIdx].Loop); - } - else - { - SpriteBank->draw2DSprite(ButtonSprites[stateIdx].Index, center, - &AbsoluteClippingRect, ButtonSprites[stateIdx].Color, startTime, porting::getTimeMs(), - ButtonSprites[stateIdx].Loop, true); - } - } + u32 rectIdx = SpriteBank->getSprites()[spriteIdx].Frames[0].rectNumber; + core::rect srcRect = SpriteBank->getPositions()[rectIdx]; + + IGUISkin *skin = Environment->getSkin(); + s32 scale = std::max(std::floor(skin->getScale()), 1.0f); + core::rect rect(center, srcRect.getSize() * scale); + rect -= rect.getSize() / 2; + + const video::SColor colors[] = { + ButtonSprites[stateIdx].Color, + ButtonSprites[stateIdx].Color, + ButtonSprites[stateIdx].Color, + ButtonSprites[stateIdx].Color, + }; + SpriteBank->draw2DSprite(spriteIdx, rect, &AbsoluteClippingRect, colors, + porting::getTimeMs() - startTime, ButtonSprites[stateIdx].Loop); } EGUI_BUTTON_IMAGE_STATE GUIButton::getImageState(bool pressed) const @@ -741,7 +737,7 @@ void GUIButton::setFromStyle(const StyleSpec& style) Padding.UpperLeftCorner + BgMiddle.UpperLeftCorner, Padding.LowerRightCorner + BgMiddle.LowerRightCorner); - GUISkin* skin = dynamic_cast(Environment->getSkin()); + IGUISkin *skin = Environment->getSkin(); core::vector2d defaultPressOffset( skin->getSize(irr::gui::EGDS_BUTTON_PRESSED_IMAGE_OFFSET_X), skin->getSize(irr::gui::EGDS_BUTTON_PRESSED_IMAGE_OFFSET_Y)); diff --git a/src/gui/guiButton.h b/src/gui/guiButton.h index c96f1ca4e..dd71788ba 100644 --- a/src/gui/guiButton.h +++ b/src/gui/guiButton.h @@ -10,7 +10,6 @@ #include "IGUISpriteBank.h" #include "ITexture.h" #include "SColor.h" -#include "guiSkin.h" #include "StyleSpec.h" using namespace irr; @@ -92,7 +91,7 @@ public: */ virtual void setSprite(gui::EGUI_BUTTON_STATE state, s32 index, video::SColor color=video::SColor(255,255,255,255), - bool loop=false, bool scale=false) override; + bool loop=false) override; //! Get the sprite-index for the given state or -1 when no sprite is set virtual s32 getSpriteIndex(gui::EGUI_BUTTON_STATE state) const override; @@ -103,9 +102,6 @@ public: //! Returns if the sprite in the given state does loop virtual bool getSpriteLoop(gui::EGUI_BUTTON_STATE state) const override; - //! Returns if the sprite in the given state is scaled - virtual bool getSpriteScale(gui::EGUI_BUTTON_STATE state) const override; - //! Sets if the button should behave like a push button. Which means it //! can be in two states: Normal or Pressed. With a click on the button, //! the user can change the state of the button. @@ -230,13 +226,12 @@ private: { bool operator==(const ButtonSprite &other) const { - return Index == other.Index && Color == other.Color && Loop == other.Loop && Scale == other.Scale; + return Index == other.Index && Color == other.Color && Loop == other.Loop; } s32 Index = -1; video::SColor Color; bool Loop = false; - bool Scale = false; }; ButtonSprite ButtonSprites[gui::EGBS_COUNT]; diff --git a/src/gui/guiEngine.cpp b/src/gui/guiEngine.cpp index fdc13fa14..4a3d53f51 100644 --- a/src/gui/guiEngine.cpp +++ b/src/gui/guiEngine.cpp @@ -40,6 +40,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include #include "client/imagefilters.h" +#include "util/tracy_wrapper.h" #if USE_SOUND #include "client/sound/sound_openal.h" @@ -141,10 +142,6 @@ GUIEngine::GUIEngine(JoystickController *joystick, // create texture source m_texture_source = std::make_unique(rendering_engine->get_video_driver()); - // create shader source - // (currently only used by clouds) - m_shader_source.reset(createShaderSource()); - // create soundmanager #if USE_SOUND if (g_settings->getBool("enable_sound") && g_sound_manager_singleton.get()) { @@ -295,10 +292,6 @@ void GUIEngine::run() IrrlichtDevice *device = m_rendering_engine->get_raw_device(); video::IVideoDriver *driver = device->getVideoDriver(); - // Always create clouds because they may or may not be - // needed based on the game selected - cloudInit(); - unsigned int text_height = g_fontengine->getTextHeight(); // Reset fog color @@ -329,9 +322,12 @@ void GUIEngine::run() fps_control.reset(); - while (m_rendering_engine->run() && !m_startgame && !m_kill) { + auto framemarker = FrameMarker("GUIEngine::run()-frame").started(); + while (m_rendering_engine->run() && !m_startgame && !m_kill) { + framemarker.end(); fps_control.limit(device, &dtime); + framemarker.start(); if (device->isWindowVisible()) { // check if we need to update the "upper left corner"-text @@ -371,6 +367,7 @@ void GUIEngine::run() m_menu->getAndroidUIInput(); #endif } + framemarker.end(); m_script->beforeClose(); @@ -390,8 +387,6 @@ GUIEngine::~GUIEngine() m_irr_toplefttext->remove(); - m_cloud.clouds.reset(); - // delete textures for (image_definition &texture : m_textures) { if (texture.texture) @@ -399,26 +394,11 @@ GUIEngine::~GUIEngine() } } -/******************************************************************************/ -void GUIEngine::cloudInit() -{ - m_shader_source->addShaderConstantSetterFactory( - new FogShaderConstantSetterFactory()); - - m_cloud.clouds = make_irr(m_smgr, m_shader_source.get(), -1, rand()); - m_cloud.clouds->setHeight(100.0f); - m_cloud.clouds->update(v3f(0, 0, 0), video::SColor(255,240,240,255)); - - m_cloud.camera = m_smgr->addCameraSceneNode(0, - v3f(0,0,0), v3f(0, 60, 100)); - m_cloud.camera->setFarValue(10000); -} - /******************************************************************************/ void GUIEngine::drawClouds(float dtime) { - m_cloud.clouds->step(dtime*3); - m_smgr->drawAll(); + g_menuclouds->step(dtime * 3); + g_menucloudsmgr->drawAll(); } /******************************************************************************/ diff --git a/src/gui/guiEngine.h b/src/gui/guiEngine.h index fa4e1ebd3..2df0a0b60 100644 --- a/src/gui/guiEngine.h +++ b/src/gui/guiEngine.h @@ -203,8 +203,6 @@ private: MainMenuData *m_data = nullptr; /** texture source */ std::unique_ptr m_texture_source; - /** shader source */ - std::unique_ptr m_shader_source; /** sound manager */ std::unique_ptr m_sound_manager; @@ -279,23 +277,11 @@ private: /** and text that is in it */ EnrichedString m_toplefttext; - /** initialize cloud subsystem */ - void cloudInit(); /** do preprocessing for cloud subsystem */ void drawClouds(float dtime); - /** internam data required for drawing clouds */ - struct clouddata { - /** pointer to cloud class */ - irr_ptr clouds; - /** camera required for drawing clouds */ - scene::ICameraSceneNode *camera = nullptr; - }; - /** is drawing of clouds enabled atm */ - bool m_clouds_enabled = true; - /** data used to draw clouds */ - clouddata m_cloud; + bool m_clouds_enabled = true; static void fullscreenChangedCallback(const std::string &name, void *data); }; diff --git a/src/gui/guiFormSpecMenu.cpp b/src/gui/guiFormSpecMenu.cpp index 2e54b32dc..40a445a0c 100644 --- a/src/gui/guiFormSpecMenu.cpp +++ b/src/gui/guiFormSpecMenu.cpp @@ -38,6 +38,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include #include "client/renderingengine.h" +#include "client/joystick_controller.h" #include "log.h" #include "client/hud.h" // drawItemStack #include "filesys.h" @@ -315,7 +316,7 @@ void GUIFormSpecMenu::parseSize(parserData* data, const std::string &element) data->invsize.Y = MYMAX(0, stof(parts[1])); lockSize(false); - if (!g_settings->getBool("enable_touch") && parts.size() == 3) { + if (!g_settings->getBool("touch_gui") && parts.size() == 3) { if (parts[2] == "true") { lockSize(true,v2u32(800,600)); } @@ -342,7 +343,7 @@ void GUIFormSpecMenu::parseContainer(parserData* data, const std::string &elemen errorstream<< "Invalid container start element (" << parts.size() << "): '" << element << "'" << std::endl; } -void GUIFormSpecMenu::parseContainerEnd(parserData* data) +void GUIFormSpecMenu::parseContainerEnd(parserData* data, const std::string &) { if (container_stack.empty()) { errorstream<< "Invalid container end element, no matching container start element" << std::endl; @@ -419,7 +420,7 @@ void GUIFormSpecMenu::parseScrollContainer(parserData *data, const std::string & pos_offset.Y = 0.0f; } -void GUIFormSpecMenu::parseScrollContainerEnd(parserData *data) +void GUIFormSpecMenu::parseScrollContainerEnd(parserData *data, const std::string &) { if (data->current_parent == this || data->current_parent->getParent() == this || container_stack.empty()) { @@ -641,6 +642,11 @@ void GUIFormSpecMenu::parseCheckbox(parserData* data, const std::string &element m_fields.push_back(spec); } +void GUIFormSpecMenu::parseRealCoordinates(parserData* data, const std::string &element) +{ + data->real_coordinates = is_yes(element); +} + void GUIFormSpecMenu::parseScrollBar(parserData* data, const std::string &element) { std::vector parts; @@ -973,10 +979,9 @@ void GUIFormSpecMenu::parseItemImage(parserData* data, const std::string &elemen m_fields.push_back(spec); } -void GUIFormSpecMenu::parseButton(parserData* data, const std::string &element, - const std::string &type) +void GUIFormSpecMenu::parseButton(parserData* data, const std::string &element) { - int expected_parts = (type == "button_url" || type == "button_url_exit") ? 5 : 4; + int expected_parts = (data->type == "button_url" || data->type == "button_url_exit") ? 5 : 4; std::vector parts; if (!precheckElement("button", element, expected_parts, expected_parts, parts)) return; @@ -986,7 +991,7 @@ void GUIFormSpecMenu::parseButton(parserData* data, const std::string &element, std::string name = parts[2]; std::string label = parts[3]; std::string url; - if (type == "button_url" || type == "button_url_exit") + if (data->type == "button_url" || data->type == "button_url_exit") url = parts[4]; MY_CHECKPOS("button",0); @@ -1022,15 +1027,15 @@ void GUIFormSpecMenu::parseButton(parserData* data, const std::string &element, 258 + m_fields.size() ); spec.ftype = f_Button; - if (type == "button_exit" || type == "button_url_exit") + if (data->type == "button_exit" || data->type == "button_url_exit") spec.is_exit = true; - if (type == "button_url" || type == "button_url_exit") + if (data->type == "button_url" || data->type == "button_url_exit") spec.url = url; GUIButton *e = GUIButton::addButton(Environment, rect, m_tsrc, data->current_parent, spec.fid, spec.flabel.c_str()); - auto style = getStyleForElement(type, name, (type != "button") ? "button" : ""); + auto style = getStyleForElement(data->type, name, (data->type != "button") ? "button" : ""); spec.sound = style[StyleSpec::STATE_DEFAULT].get(StyleSpec::Property::SOUND, ""); @@ -1188,7 +1193,9 @@ void GUIFormSpecMenu::parseTable(parserData* data, const std::string &element) std::vector v_pos = split(parts[0],','); std::vector v_geom = split(parts[1],','); std::string name = parts[2]; - std::vector items = split(parts[3],','); + std::vector items; + if (!parts[3].empty()) + items = split(parts[3],','); std::string str_initial_selection; if (parts.size() >= 5) @@ -1258,7 +1265,9 @@ void GUIFormSpecMenu::parseTextList(parserData* data, const std::string &element std::vector v_pos = split(parts[0],','); std::vector v_geom = split(parts[1],','); std::string name = parts[2]; - std::vector items = split(parts[3],','); + std::vector items; + if (!parts[3].empty()) + items = split(parts[3],','); std::string str_initial_selection; std::string str_transparent = "false"; @@ -1686,11 +1695,10 @@ void GUIFormSpecMenu::parseTextArea(parserData* data, std::vector& m_fields.push_back(spec); } -void GUIFormSpecMenu::parseField(parserData* data, const std::string &element, - const std::string &type) +void GUIFormSpecMenu::parseField(parserData* data, const std::string &element) { std::vector parts; - if (!precheckElement(type, element, 3, 5, parts)) + if (!precheckElement(data->type, element, 3, 5, parts)) return; if (parts.size() == 3 || parts.size() == 4) { @@ -1699,7 +1707,7 @@ void GUIFormSpecMenu::parseField(parserData* data, const std::string &element, } // Else: >= 5 arguments in "parts" - parseTextArea(data, parts, type); + parseTextArea(data, parts, data->type); } void GUIFormSpecMenu::parseHyperText(parserData *data, const std::string &element) @@ -1922,8 +1930,7 @@ void GUIFormSpecMenu::parseVertLabel(parserData* data, const std::string &elemen m_clickthrough_elements.push_back(e); } -void GUIFormSpecMenu::parseImageButton(parserData* data, const std::string &element, - const std::string &type) +void GUIFormSpecMenu::parseImageButton(parserData* data, const std::string &element) { std::vector parts; if (!precheckElement("image_button", element, 5, 8, parts)) @@ -1980,7 +1987,8 @@ void GUIFormSpecMenu::parseImageButton(parserData* data, const std::string &elem 258 + m_fields.size() ); spec.ftype = f_Button; - if (type == "image_button_exit") + + if (data->type == "image_button_exit") spec.is_exit = true; GUIButtonImage *e = GUIButtonImage::addButton(Environment, rect, m_tsrc, @@ -2580,14 +2588,21 @@ void GUIFormSpecMenu::parsePadding(parserData *data, const std::string &element) << "'" << std::endl; } -bool GUIFormSpecMenu::parseStyle(parserData *data, const std::string &element, bool style_type) +void GUIFormSpecMenu::parseStyle(parserData *data, const std::string &element) { + if (data->type != "style" && data->type != "style_type") { + errorstream << "Invalid style element type: '" << data->type << "'" << std::endl; + return; + } + + bool style_type = (data->type == "style_type"); + std::vector parts = split(element, ';'); if (parts.size() < 2) { errorstream << "Invalid style element (" << parts.size() << "): '" << element << "'" << std::endl; - return false; + return; } StyleSpec spec; @@ -2598,7 +2613,7 @@ bool GUIFormSpecMenu::parseStyle(parserData *data, const std::string &element, b if (equal_pos == std::string::npos) { errorstream << "Invalid style element (Property missing value): '" << element << "'" << std::endl; - return false; + return; } std::string propname = trim(parts[i].substr(0, equal_pos)); @@ -2713,10 +2728,10 @@ bool GUIFormSpecMenu::parseStyle(parserData *data, const std::string &element, b } } - return true; + return; } -void GUIFormSpecMenu::parseSetFocus(const std::string &element) +void GUIFormSpecMenu::parseSetFocus(parserData*, const std::string &element) { std::vector parts; if (!precheckElement("set_focus", element, 1, 2, parts)) @@ -2793,8 +2808,13 @@ void GUIFormSpecMenu::parseModel(parserData *data, const std::string &element) auto meshnode = e->setMesh(mesh); - for (u32 i = 0; i < textures.size() && i < meshnode->getMaterialCount(); ++i) - e->setTexture(i, m_tsrc->getTexture(unescape_string(textures[i]))); + for (u32 i = 0; i < meshnode->getMaterialCount(); ++i) { + const auto texture_idx = mesh->getTextureSlot(i); + if (texture_idx >= textures.size()) + warningstream << "Invalid model element: Not enough textures" << std::endl; + else + e->setTexture(i, m_tsrc->getTexture(unescape_string(textures[texture_idx]))); + } if (vec_rot.size() >= 2) e->setRotation(v2f(stof(vec_rot[0]), stof(vec_rot[1]))); @@ -2842,6 +2862,55 @@ void GUIFormSpecMenu::removeAll() scroll_container_it.second->drop(); } +const std::unordered_map> GUIFormSpecMenu::element_parsers = { + {"container", &GUIFormSpecMenu::parseContainer}, + {"container_end", &GUIFormSpecMenu::parseContainerEnd}, + {"list", &GUIFormSpecMenu::parseList}, + {"listring", &GUIFormSpecMenu::parseListRing}, + {"checkbox", &GUIFormSpecMenu::parseCheckbox}, + {"image", &GUIFormSpecMenu::parseImage}, + {"animated_image", &GUIFormSpecMenu::parseAnimatedImage}, + {"item_image", &GUIFormSpecMenu::parseItemImage}, + {"button", &GUIFormSpecMenu::parseButton}, + {"button_exit", &GUIFormSpecMenu::parseButton}, + {"button_url", &GUIFormSpecMenu::parseButton}, + {"button_url_exit", &GUIFormSpecMenu::parseButton}, + {"background", &GUIFormSpecMenu::parseBackground}, + {"background9", &GUIFormSpecMenu::parseBackground}, + {"tableoptions", &GUIFormSpecMenu::parseTableOptions}, + {"tablecolumns", &GUIFormSpecMenu::parseTableColumns}, + {"table", &GUIFormSpecMenu::parseTable}, + {"textlist", &GUIFormSpecMenu::parseTextList}, + {"dropdown", &GUIFormSpecMenu::parseDropDown}, + {"field_enter_after_edit", &GUIFormSpecMenu::parseFieldEnterAfterEdit}, + {"field_close_on_enter", &GUIFormSpecMenu::parseFieldCloseOnEnter}, + {"pwdfield", &GUIFormSpecMenu::parsePwdField}, + {"field", &GUIFormSpecMenu::parseField}, + {"textarea", &GUIFormSpecMenu::parseField}, + {"hypertext", &GUIFormSpecMenu::parseHyperText}, + {"label", &GUIFormSpecMenu::parseLabel}, + {"vertlabel", &GUIFormSpecMenu::parseVertLabel}, + {"item_image_button", &GUIFormSpecMenu::parseItemImageButton}, + {"image_button", &GUIFormSpecMenu::parseImageButton}, + {"image_button_exit", &GUIFormSpecMenu::parseImageButton}, + {"tabheader", &GUIFormSpecMenu::parseTabHeader}, + {"box", &GUIFormSpecMenu::parseBox}, + {"bgcolor", &GUIFormSpecMenu::parseBackgroundColor}, + {"listcolors", &GUIFormSpecMenu::parseListColors}, + {"tooltip", &GUIFormSpecMenu::parseTooltip}, + {"scrollbar", &GUIFormSpecMenu::parseScrollBar}, + {"real_coordinates", &GUIFormSpecMenu::parseRealCoordinates}, + {"style", &GUIFormSpecMenu::parseStyle}, + {"style_type", &GUIFormSpecMenu::parseStyle}, + {"scrollbaroptions", &GUIFormSpecMenu::parseScrollBarOptions}, + {"scroll_container", &GUIFormSpecMenu::parseScrollContainer}, + {"scroll_container_end", &GUIFormSpecMenu::parseScrollContainerEnd}, + {"set_focus", &GUIFormSpecMenu::parseSetFocus}, + {"model", &GUIFormSpecMenu::parseModel}, +}; + + void GUIFormSpecMenu::parseElement(parserData* data, const std::string &element) { //some prechecks @@ -2858,195 +2927,15 @@ void GUIFormSpecMenu::parseElement(parserData* data, const std::string &element) std::string type = trim(element.substr(0, pos)); std::string description = element.substr(pos+1); - if (type == "container") { - parseContainer(data, description); + // They remain here due to bool flags, for now + data->type = type; + + auto it = element_parsers.find(type); + if (it != element_parsers.end()) { + it->second(this, data, description); return; } - if (type == "container_end") { - parseContainerEnd(data); - return; - } - - if (type == "list") { - parseList(data, description); - return; - } - - if (type == "listring") { - parseListRing(data, description); - return; - } - - if (type == "checkbox") { - parseCheckbox(data, description); - return; - } - - if (type == "image") { - parseImage(data, description); - return; - } - - if (type == "animated_image") { - parseAnimatedImage(data, description); - return; - } - - if (type == "item_image") { - parseItemImage(data, description); - return; - } - - if (type == "button" || type == "button_exit" || type == "button_url" || type == "button_url_exit") { - parseButton(data, description, type); - return; - } - - if (type == "background" || type == "background9") { - parseBackground(data, description); - return; - } - - if (type == "tableoptions"){ - parseTableOptions(data,description); - return; - } - - if (type == "tablecolumns"){ - parseTableColumns(data,description); - return; - } - - if (type == "table"){ - parseTable(data,description); - return; - } - - if (type == "textlist"){ - parseTextList(data,description); - return; - } - - if (type == "dropdown"){ - parseDropDown(data,description); - return; - } - - if (type == "field_enter_after_edit") { - parseFieldEnterAfterEdit(data, description); - return; - } - - if (type == "field_close_on_enter") { - parseFieldCloseOnEnter(data, description); - return; - } - - if (type == "pwdfield") { - parsePwdField(data,description); - return; - } - - if ((type == "field") || (type == "textarea")){ - parseField(data,description,type); - return; - } - - if (type == "hypertext") { - parseHyperText(data,description); - return; - } - - if (type == "label") { - parseLabel(data,description); - return; - } - - if (type == "vertlabel") { - parseVertLabel(data,description); - return; - } - - if (type == "item_image_button") { - parseItemImageButton(data,description); - return; - } - - if ((type == "image_button") || (type == "image_button_exit")) { - parseImageButton(data,description,type); - return; - } - - if (type == "tabheader") { - parseTabHeader(data,description); - return; - } - - if (type == "box") { - parseBox(data,description); - return; - } - - if (type == "bgcolor") { - parseBackgroundColor(data,description); - return; - } - - if (type == "listcolors") { - parseListColors(data,description); - return; - } - - if (type == "tooltip") { - parseTooltip(data,description); - return; - } - - if (type == "scrollbar") { - parseScrollBar(data, description); - return; - } - - if (type == "real_coordinates") { - data->real_coordinates = is_yes(description); - return; - } - - if (type == "style") { - parseStyle(data, description, false); - return; - } - - if (type == "style_type") { - parseStyle(data, description, true); - return; - } - - if (type == "scrollbaroptions") { - parseScrollBarOptions(data, description); - return; - } - - if (type == "scroll_container") { - parseScrollContainer(data, description); - return; - } - - if (type == "scroll_container_end") { - parseScrollContainerEnd(data); - return; - } - - if (type == "set_focus") { - parseSetFocus(description); - return; - } - - if (type == "model") { - parseModel(data, description); - return; - } // Ignore others infostream << "Unknown DrawSpec: type=" << type << ", data=\"" << description << "\"" @@ -3244,58 +3133,7 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize) offset = v2s32(0,0); } - const double gui_scaling = g_settings->getFloat("gui_scaling", 0.5f, 42.0f); - const double screen_dpi = RenderingEngine::getDisplayDensity() * 96; - - double use_imgsize; - if (m_lock) { - // In fixed-size mode, inventory image size - // is 0.53 inch multiplied by the gui_scaling - // config parameter. This magic size is chosen - // to make the main menu (15.5 inventory images - // wide, including border) just fit into the - // default window (800 pixels wide) at 96 DPI - // and default scaling (1.00). - use_imgsize = 0.5555 * screen_dpi * gui_scaling; - } else { - // Variables for the maximum imgsize that can fit in the screen. - double fitx_imgsize; - double fity_imgsize; - - v2f padded_screensize( - mydata.screensize.X * (1.0f - mydata.padding.X * 2.0f), - mydata.screensize.Y * (1.0f - mydata.padding.Y * 2.0f) - ); - - if (mydata.real_coordinates) { - fitx_imgsize = padded_screensize.X / mydata.invsize.X; - fity_imgsize = padded_screensize.Y / mydata.invsize.Y; - } else { - // The maximum imgsize in the old coordinate system also needs to - // factor in padding and spacing along with 0.1 inventory slot spare - // and help text space, hence the magic numbers. - fitx_imgsize = padded_screensize.X / - ((5.0 / 4.0) * (0.5 + mydata.invsize.X)); - fity_imgsize = padded_screensize.Y / - ((15.0 / 13.0) * (0.85 + mydata.invsize.Y)); - } - - s32 min_screen_dim = std::min(padded_screensize.X, padded_screensize.Y); - - double prefer_imgsize; - if (g_settings->getBool("enable_touch")) { - // The preferred imgsize should be larger to accommodate the - // smaller screensize. - prefer_imgsize = min_screen_dim / 10 * gui_scaling; - } else { - // Desktop computers have more space, so try to fit 15 coordinates. - prefer_imgsize = min_screen_dim / 15 * gui_scaling; - } - // Try to use the preferred imgsize, but if that's bigger than the maximum - // size, use the maximum size. - use_imgsize = std::min(prefer_imgsize, - std::min(fitx_imgsize, fity_imgsize)); - } + double use_imgsize = calculateImgsize(mydata); // Everything else is scaled in proportion to the // inventory image size. The inventory slot spacing @@ -4098,6 +3936,8 @@ bool GUIFormSpecMenu::preprocessEvent(const SEvent& event) skin->setFont(m_font); bool retval = hovered->OnEvent(event); skin->setFont(old_font); + // This is expected to be set to BET_OTHER with mouse UP event + m_held_mouse_button = BET_OTHER; return retval; } } @@ -4105,7 +3945,7 @@ bool GUIFormSpecMenu::preprocessEvent(const SEvent& event) // Fix Esc/Return key being eaten by checkboxen and tables if (event.EventType == EET_KEY_INPUT_EVENT) { KeyPress kp(event.KeyInput); - if (kp == EscapeKey || kp == CancelKey + if (kp == EscapeKey || kp == getKeySetting("keymap_inventory") || event.KeyInput.Key==KEY_RETURN) { gui::IGUIElement *focused = Environment->getFocus(); @@ -4136,10 +3976,9 @@ bool GUIFormSpecMenu::preprocessEvent(const SEvent& event) } if (event.EventType == irr::EET_JOYSTICK_INPUT_EVENT) { - /* TODO add a check like: - if (event.JoystickEvent != joystick_we_listen_for) + if (event.JoystickEvent.Joystick != m_joystick->getJoystickId()) return false; - */ + bool handled = m_joystick->handleEvent(event.JoystickEvent); if (handled) { if (m_joystick->wasKeyDown(KeyType::ESC)) { @@ -4173,7 +4012,7 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) if (event.EventType==EET_KEY_INPUT_EVENT) { KeyPress kp(event.KeyInput); if (event.KeyInput.PressedDown && ( - (kp == EscapeKey) || (kp == CancelKey) || + (kp == EscapeKey) || ((m_client != NULL) && (kp == getKeySetting("keymap_inventory"))))) { tryClose(); return true; @@ -4184,8 +4023,10 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) m_client->makeScreenshot(); } - if (event.KeyInput.PressedDown && kp == getKeySetting("keymap_toggle_debug")) - m_show_debug = !m_show_debug; + if (event.KeyInput.PressedDown && kp == getKeySetting("keymap_toggle_debug")) { + if (!m_client || m_client->checkPrivilege("debug")) + m_show_debug = !m_show_debug; + } if (event.KeyInput.PressedDown && (event.KeyInput.Key==KEY_RETURN || @@ -5179,3 +5020,68 @@ std::array GUIFormSpecMenu::getStyleForElement return ret; } + +double GUIFormSpecMenu::getFixedImgsize(double screen_dpi, double gui_scaling) +{ + // In fixed-size mode, inventory image size + // is 0.53 inch multiplied by the gui_scaling + // config parameter. This magic size is chosen + // to make the main menu (15.5 inventory images + // wide, including border) just fit into the + // default window (800 pixels wide) at 96 DPI + // and default scaling (1.00). + return 0.5555 * screen_dpi * gui_scaling; +} + +double GUIFormSpecMenu::getImgsize(v2u32 avail_screensize, double screen_dpi, double gui_scaling) +{ + double fixed_imgsize = getFixedImgsize(screen_dpi, gui_scaling); + + s32 min_screen_dim = std::min(avail_screensize.X, avail_screensize.Y); + double prefer_imgsize = min_screen_dim / 15 * gui_scaling; + // Use the available space more effectively on small windows/screens. + // This is especially important for mobile platforms. + prefer_imgsize = std::max(prefer_imgsize, fixed_imgsize); + return prefer_imgsize; +} + +double GUIFormSpecMenu::calculateImgsize(const parserData &data) +{ + // must stay in sync with ClientDynamicInfo::calculateMaxFSSize + + const double screen_dpi = RenderingEngine::getDisplayDensity() * 96; + const double gui_scaling = g_settings->getFloat("gui_scaling", 0.5f, 42.0f); + + // Fixed-size mode + if (m_lock) + return getFixedImgsize(screen_dpi, gui_scaling); + + // Variables for the maximum imgsize that can fit in the screen. + double fitx_imgsize; + double fity_imgsize; + + v2f padded_screensize( + data.screensize.X * (1.0f - data.padding.X * 2.0f), + data.screensize.Y * (1.0f - data.padding.Y * 2.0f) + ); + + if (data.real_coordinates) { + fitx_imgsize = padded_screensize.X / data.invsize.X; + fity_imgsize = padded_screensize.Y / data.invsize.Y; + } else { + // The maximum imgsize in the old coordinate system also needs to + // factor in padding and spacing along with 0.1 inventory slot spare + // and help text space, hence the magic numbers. + fitx_imgsize = padded_screensize.X / + ((5.0 / 4.0) * (0.5 + data.invsize.X)); + fity_imgsize = padded_screensize.Y / + ((15.0 / 13.0) * (0.85 + data.invsize.Y)); + } + + double prefer_imgsize = getImgsize(v2u32(padded_screensize.X, padded_screensize.Y), + screen_dpi, gui_scaling); + + // Try to use the preferred imgsize, but if that's bigger than the maximum + // size, use the maximum size. + return std::min(prefer_imgsize, std::min(fitx_imgsize, fity_imgsize)); +} diff --git a/src/gui/guiFormSpecMenu.h b/src/gui/guiFormSpecMenu.h index 616971bc6..7c4be4301 100644 --- a/src/gui/guiFormSpecMenu.h +++ b/src/gui/guiFormSpecMenu.h @@ -24,7 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include -#include "irrlichttypes_extrabloated.h" +#include "irrlichttypes_bloated.h" #include "irr_ptr.h" #include "inventory.h" #include "inventorymanager.h" @@ -32,11 +32,10 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "guiInventoryList.h" #include "guiScrollBar.h" #include "guiTable.h" -#include "network/networkprotocol.h" -#include "client/joystick_controller.h" #include "util/string.h" #include "util/enriched_string.h" #include "StyleSpec.h" +#include // gui::ECURSOR_ICON #include class InventoryManager; @@ -44,6 +43,7 @@ class ISimpleTextureSource; class Client; class GUIScrollContainer; class ISoundManager; +class JoystickController; enum FormspecFieldType { f_Button, @@ -223,6 +223,11 @@ public: m_allowclose = value; } + void setDebugView(bool value) + { + m_show_debug = value; + } + void lockSize(bool lock,v2u32 basescreensize=v2u32(0,0)) { m_lock = lock; @@ -291,6 +296,11 @@ public: void getAndroidUIInput(); #endif + // Returns the fixed formspec coordinate size for the given parameters. + static double getFixedImgsize(double screen_dpi, double gui_scaling); + // Returns the preferred non-fixed formspec coordinate size for the given parameters. + static double getImgsize(v2u32 avail_screensize, double screen_dpi, double gui_scaling); + protected: v2s32 getBasePos() const { @@ -418,8 +428,11 @@ private: // used to restore table selection/scroll/treeview state std::unordered_map table_dyndata; + std::string type; }; + static const std::unordered_map> element_parsers; + struct fs_key_pending { bool key_up; bool key_down; @@ -437,17 +450,16 @@ private: void parseSize(parserData* data, const std::string &element); void parseContainer(parserData* data, const std::string &element); - void parseContainerEnd(parserData* data); + void parseContainerEnd(parserData* data, const std::string &element); void parseScrollContainer(parserData *data, const std::string &element); - void parseScrollContainerEnd(parserData *data); + void parseScrollContainerEnd(parserData *data, const std::string &element); void parseList(parserData* data, const std::string &element); void parseListRing(parserData* data, const std::string &element); void parseCheckbox(parserData* data, const std::string &element); void parseImage(parserData* data, const std::string &element); void parseAnimatedImage(parserData *data, const std::string &element); void parseItemImage(parserData* data, const std::string &element); - void parseButton(parserData* data, const std::string &element, - const std::string &typ); + void parseButton(parserData* data, const std::string &element); void parseBackground(parserData* data, const std::string &element); void parseTableOptions(parserData* data, const std::string &element); void parseTableColumns(parserData* data, const std::string &element); @@ -457,7 +469,7 @@ private: void parseFieldEnterAfterEdit(parserData *data, const std::string &element); void parseFieldCloseOnEnter(parserData *data, const std::string &element); void parsePwdField(parserData* data, const std::string &element); - void parseField(parserData* data, const std::string &element, const std::string &type); + void parseField(parserData* data, const std::string &element); void createTextField(parserData *data, FieldSpec &spec, core::rect &rect, bool is_multiline); void parseSimpleField(parserData* data,std::vector &parts); @@ -466,8 +478,7 @@ private: void parseHyperText(parserData *data, const std::string &element); void parseLabel(parserData* data, const std::string &element); void parseVertLabel(parserData* data, const std::string &element); - void parseImageButton(parserData* data, const std::string &element, - const std::string &type); + void parseImageButton(parserData* data, const std::string &element); void parseItemImageButton(parserData* data, const std::string &element); void parseTabHeader(parserData* data, const std::string &element); void parseBox(parserData* data, const std::string &element); @@ -476,6 +487,7 @@ private: void parseTooltip(parserData* data, const std::string &element); bool parseVersionDirect(const std::string &data); bool parseSizeDirect(parserData* data, const std::string &element); + void parseRealCoordinates(parserData* data, const std::string &element); void parseScrollBar(parserData* data, const std::string &element); void parseScrollBarOptions(parserData *data, const std::string &element); bool parsePositionDirect(parserData *data, const std::string &element); @@ -484,8 +496,8 @@ private: void parseAnchor(parserData *data, const std::string &element); bool parsePaddingDirect(parserData *data, const std::string &element); void parsePadding(parserData *data, const std::string &element); - bool parseStyle(parserData *data, const std::string &element, bool style_type); - void parseSetFocus(const std::string &element); + void parseStyle(parserData *data, const std::string &element); + void parseSetFocus(parserData *, const std::string &element); void parseModel(parserData *data, const std::string &element); bool parseMiddleRect(const std::string &value, core::rect *parsed_rect); @@ -507,6 +519,9 @@ private: // used by getAbsoluteRect s32 m_tabheader_upper_edge = 0; + + // Determines the size (in pixels) of formspec coordinate units. + double calculateImgsize(const parserData &data); }; class FormspecFormSource: public IFormSource diff --git a/src/gui/guiHyperText.cpp b/src/gui/guiHyperText.cpp index 45e5d6e98..6f30ac8ce 100644 --- a/src/gui/guiHyperText.cpp +++ b/src/gui/guiHyperText.cpp @@ -20,6 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "guiHyperText.h" #include "guiScrollBar.h" #include "client/fontengine.h" +#include "client/hud.h" // drawItemStack #include "IVideoDriver.h" #include "client/client.h" #include "client/renderingengine.h" diff --git a/src/gui/guiInventoryList.cpp b/src/gui/guiInventoryList.cpp index 02505d436..e5ed6e6ef 100644 --- a/src/gui/guiInventoryList.cpp +++ b/src/gui/guiInventoryList.cpp @@ -21,6 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "guiFormSpecMenu.h" #include "client/hud.h" #include "client/client.h" +#include GUIInventoryList::GUIInventoryList(gui::IGUIEnvironment *env, gui::IGUIElement *parent, diff --git a/src/gui/guiItemImage.cpp b/src/gui/guiItemImage.cpp index a02285fcb..0c543e391 100644 --- a/src/gui/guiItemImage.cpp +++ b/src/gui/guiItemImage.cpp @@ -19,7 +19,9 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "guiItemImage.h" #include "client/client.h" +#include "client/hud.h" // drawItemStack #include "inventory.h" +#include GUIItemImage::GUIItemImage(gui::IGUIEnvironment *env, gui::IGUIElement *parent, s32 id, const core::rect &rectangle, const std::string &item_name, diff --git a/src/gui/guiKeyChangeMenu.cpp b/src/gui/guiKeyChangeMenu.cpp index b8c1143f2..08ae5987e 100644 --- a/src/gui/guiKeyChangeMenu.cpp +++ b/src/gui/guiKeyChangeMenu.cpp @@ -29,6 +29,7 @@ #include #include #include +#include #include "settings.h" #include @@ -377,6 +378,7 @@ void GUIKeyChangeMenu::add_key(int id, std::wstring button_name, const std::stri key_settings.push_back(k); } +// compare with button_titles in touchcontrols.cpp void GUIKeyChangeMenu::init_keys() { this->add_key(GUI_ID_KEY_FORWARD_BUTTON, wstrgettext("Forward"), "keymap_forward"); diff --git a/src/gui/guiOpenURL.cpp b/src/gui/guiOpenURL.cpp index f20d8ba7b..7ce79b0e5 100644 --- a/src/gui/guiOpenURL.cpp +++ b/src/gui/guiOpenURL.cpp @@ -20,6 +20,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include "guiEditBoxWithScrollbar.h" #include #include +#include #include "client/renderingengine.h" #include "porting.h" #include "gettext.h" @@ -160,9 +161,7 @@ void GUIOpenURLMenu::drawMenu() bool GUIOpenURLMenu::OnEvent(const SEvent &event) { if (event.EventType == EET_KEY_INPUT_EVENT) { - if ((event.KeyInput.Key == KEY_ESCAPE || - event.KeyInput.Key == KEY_CANCEL) && - event.KeyInput.PressedDown) { + if (event.KeyInput.Key == KEY_ESCAPE && event.KeyInput.PressedDown) { quitMenu(); return true; } diff --git a/src/gui/guiPasswordChange.cpp b/src/gui/guiPasswordChange.cpp index d3c1867a8..a9b73dfe8 100644 --- a/src/gui/guiPasswordChange.cpp +++ b/src/gui/guiPasswordChange.cpp @@ -24,6 +24,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include #include #include +#include #include "porting.h" #include "gettext.h" @@ -187,9 +188,7 @@ bool GUIPasswordChange::processInput() bool GUIPasswordChange::OnEvent(const SEvent &event) { if (event.EventType == EET_KEY_INPUT_EVENT) { - if ((event.KeyInput.Key == KEY_ESCAPE || - event.KeyInput.Key == KEY_CANCEL) && - event.KeyInput.PressedDown) { + if (event.KeyInput.Key == KEY_ESCAPE && event.KeyInput.PressedDown) { quitMenu(); return true; } diff --git a/src/gui/guiPathSelectMenu.cpp b/src/gui/guiPathSelectMenu.cpp index 9c63e06b5..b4c3d36c3 100644 --- a/src/gui/guiPathSelectMenu.cpp +++ b/src/gui/guiPathSelectMenu.cpp @@ -18,6 +18,7 @@ */ #include "guiPathSelectMenu.h" +#include "guiFormSpecMenu.h" //required because of TextDest only !!! GUIFileSelectMenu::GUIFileSelectMenu(gui::IGUIEnvironment* env, gui::IGUIElement* parent, s32 id, IMenuManager *menumgr, diff --git a/src/gui/guiPathSelectMenu.h b/src/gui/guiPathSelectMenu.h index 11307d682..7757b2d7b 100644 --- a/src/gui/guiPathSelectMenu.h +++ b/src/gui/guiPathSelectMenu.h @@ -23,7 +23,8 @@ #include "modalMenu.h" #include "IGUIFileOpenDialog.h" -#include "guiFormSpecMenu.h" //required because of TextDest only !!! + +struct TextDest; class GUIFileSelectMenu : public GUIModalMenu { diff --git a/src/gui/guiScene.cpp b/src/gui/guiScene.cpp index 239fbe015..9293ebe22 100644 --- a/src/gui/guiScene.cpp +++ b/src/gui/guiScene.cpp @@ -21,6 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include +#include #include "porting.h" GUIScene::GUIScene(gui::IGUIEnvironment *env, scene::ISceneManager *smgr, @@ -66,7 +67,6 @@ void GUIScene::setTexture(u32 idx, video::ITexture *texture) material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL; material.MaterialTypeParam = 0.5f; material.TextureLayers[0].Texture = texture; - material.Lighting = false; material.FogEnable = true; material.TextureLayers[0].MinFilter = video::ETMINF_NEAREST_MIPMAP_NEAREST; material.TextureLayers[0].MagFilter = video::ETMAGF_NEAREST; diff --git a/src/gui/guiScrollBar.cpp b/src/gui/guiScrollBar.cpp index 8e8935b2d..01a7af8c9 100644 --- a/src/gui/guiScrollBar.cpp +++ b/src/gui/guiScrollBar.cpp @@ -13,6 +13,7 @@ the arrow buttons where there is insufficient space. #include "guiScrollBar.h" #include "guiButton.h" #include "porting.h" +#include "settings.h" #include GUIScrollBar::GUIScrollBar(IGUIEnvironment *environment, IGUIElement *parent, s32 id, @@ -101,19 +102,9 @@ bool GUIScrollBar::OnEvent(const SEvent &event) tray_clicked = !dragged_by_slider; if (tray_clicked) { const s32 new_pos = getPosFromMousePos(p); - const s32 old_pos = scroll_pos; - setPos(new_pos); + setPosAndSend(new_pos); // drag in the middle drag_offset = thumb_size / 2; - // report the scroll event - if (scroll_pos != old_pos && Parent) { - SEvent e; - e.EventType = EET_GUI_EVENT; - e.GUIEvent.Caller = this; - e.GUIEvent.Element = nullptr; - e.GUIEvent.EventType = EGET_SCROLL_BAR_CHANGED; - Parent->OnEvent(e); - } } Environment->setFocus(this); return true; @@ -147,18 +138,8 @@ bool GUIScrollBar::OnEvent(const SEvent &event) } const s32 new_pos = getPosFromMousePos(p); - const s32 old_pos = scroll_pos; + setPosAndSend(new_pos); - setPos(new_pos); - - if (scroll_pos != old_pos && Parent) { - SEvent e; - e.EventType = EET_GUI_EVENT; - e.GUIEvent.Caller = this; - e.GUIEvent.Element = nullptr; - e.GUIEvent.EventType = EGET_SCROLL_BAR_CHANGED; - Parent->OnEvent(e); - } return is_inside; } default: @@ -300,8 +281,27 @@ void GUIScrollBar::setPos(const s32 &pos) target_pos = std::nullopt; } +void GUIScrollBar::setPosAndSend(const s32 &pos) +{ + const s32 old_pos = scroll_pos; + setPos(pos); + if (scroll_pos != old_pos && Parent) { + SEvent e; + e.EventType = EET_GUI_EVENT; + e.GUIEvent.Caller = this; + e.GUIEvent.Element = nullptr; + e.GUIEvent.EventType = EGET_SCROLL_BAR_CHANGED; + Parent->OnEvent(e); + } +} + void GUIScrollBar::setPosInterpolated(const s32 &pos) { + if (!g_settings->getBool("smooth_scrolling")) { + setPosAndSend(pos); + return; + } + s32 clamped = core::s32_clamp(pos, min_pos, max_pos); if (scroll_pos != clamped) { target_pos = clamped; diff --git a/src/gui/guiScrollBar.h b/src/gui/guiScrollBar.h index a976d1a59..05e195aed 100644 --- a/src/gui/guiScrollBar.h +++ b/src/gui/guiScrollBar.h @@ -53,6 +53,8 @@ public: //! Sets a position immediately, aborting any ongoing interpolation. // setPos does not send EGET_SCROLL_BAR_CHANGED events for you. void setPos(const s32 &pos); + //! The same as setPos, but it takes care of sending EGET_SCROLL_BAR_CHANGED events. + void setPosAndSend(const s32 &pos); //! Sets a target position for interpolation. // If you want to do an interpolated addition, use // setPosInterpolated(getTargetPos() + x). diff --git a/src/gui/guiSkin.cpp b/src/gui/guiSkin.cpp deleted file mode 100644 index 0ecc80f02..000000000 --- a/src/gui/guiSkin.cpp +++ /dev/null @@ -1,1037 +0,0 @@ -// Copyright (C) 2002-2012 Nikolaus Gebhardt -// Copyright (C) 2019 Irrlick -// -// This file is part of the "Irrlicht Engine". -// For conditions of distribution and use, see copyright notice in irrlicht.h - -#include "guiSkin.h" - -#include "IGUIFont.h" -#include "IGUISpriteBank.h" -#include "IGUIElement.h" -#include "IVideoDriver.h" -#include "IAttributes.h" - -namespace irr -{ -namespace gui -{ - -GUISkin::GUISkin(EGUI_SKIN_TYPE type, video::IVideoDriver* driver) -: SpriteBank(0), Driver(driver), Type(type) -{ - #ifdef _DEBUG - setDebugName("GUISkin"); - #endif - - if ((Type == EGST_WINDOWS_CLASSIC) || (Type == EGST_WINDOWS_METALLIC)) - { - Colors[EGDC_3D_DARK_SHADOW] = video::SColor(101,50,50,50); - Colors[EGDC_3D_SHADOW] = video::SColor(101,130,130,130); - Colors[EGDC_3D_FACE] = video::SColor(220,100,100,100); - Colors[EGDC_3D_HIGH_LIGHT] = video::SColor(101,255,255,255); - Colors[EGDC_3D_LIGHT] = video::SColor(101,210,210,210); - Colors[EGDC_ACTIVE_BORDER] = video::SColor(101,16,14,115); - Colors[EGDC_ACTIVE_CAPTION] = video::SColor(255,255,255,255); - Colors[EGDC_APP_WORKSPACE] = video::SColor(101,100,100,100); - Colors[EGDC_BUTTON_TEXT] = video::SColor(240,10,10,10); - Colors[EGDC_GRAY_TEXT] = video::SColor(240,130,130,130); - Colors[EGDC_HIGH_LIGHT] = video::SColor(101,8,36,107); - Colors[EGDC_HIGH_LIGHT_TEXT] = video::SColor(240,255,255,255); - Colors[EGDC_INACTIVE_BORDER] = video::SColor(101,165,165,165); - Colors[EGDC_INACTIVE_CAPTION] = video::SColor(255,30,30,30); - Colors[EGDC_TOOLTIP] = video::SColor(200,0,0,0); - Colors[EGDC_TOOLTIP_BACKGROUND] = video::SColor(200,255,255,225); - Colors[EGDC_SCROLLBAR] = video::SColor(101,230,230,230); - Colors[EGDC_WINDOW] = video::SColor(101,255,255,255); - Colors[EGDC_WINDOW_SYMBOL] = video::SColor(200,10,10,10); - Colors[EGDC_ICON] = video::SColor(200,255,255,255); - Colors[EGDC_ICON_HIGH_LIGHT] = video::SColor(200,8,36,107); - Colors[EGDC_GRAY_WINDOW_SYMBOL] = video::SColor(240,100,100,100); - Colors[EGDC_EDITABLE] = video::SColor(255,255,255,255); - Colors[EGDC_GRAY_EDITABLE] = video::SColor(255,120,120,120); - Colors[EGDC_FOCUSED_EDITABLE] = video::SColor(255,240,240,255); - - - Sizes[EGDS_SCROLLBAR_SIZE] = 14; - Sizes[EGDS_MENU_HEIGHT] = 30; - Sizes[EGDS_WINDOW_BUTTON_WIDTH] = 15; - Sizes[EGDS_CHECK_BOX_WIDTH] = 18; - Sizes[EGDS_MESSAGE_BOX_WIDTH] = 500; - Sizes[EGDS_MESSAGE_BOX_HEIGHT] = 200; - Sizes[EGDS_BUTTON_WIDTH] = 80; - Sizes[EGDS_BUTTON_HEIGHT] = 30; - - Sizes[EGDS_TEXT_DISTANCE_X] = 2; - Sizes[EGDS_TEXT_DISTANCE_Y] = 0; - - Sizes[EGDS_TITLEBARTEXT_DISTANCE_X] = 2; - Sizes[EGDS_TITLEBARTEXT_DISTANCE_Y] = 0; - } - else - { - //0x80a6a8af - Colors[EGDC_3D_DARK_SHADOW] = 0x60767982; - //Colors[EGDC_3D_FACE] = 0xc0c9ccd4; // tab background - Colors[EGDC_3D_FACE] = 0xc0cbd2d9; // tab background - Colors[EGDC_3D_SHADOW] = 0x50e4e8f1; // tab background, and left-top highlight - Colors[EGDC_3D_HIGH_LIGHT] = 0x40c7ccdc; - Colors[EGDC_3D_LIGHT] = 0x802e313a; - Colors[EGDC_ACTIVE_BORDER] = 0x80404040; // window title - Colors[EGDC_ACTIVE_CAPTION] = 0xffd0d0d0; - Colors[EGDC_APP_WORKSPACE] = 0xc0646464; // unused - Colors[EGDC_BUTTON_TEXT] = 0xd0161616; - Colors[EGDC_GRAY_TEXT] = 0x3c141414; - Colors[EGDC_HIGH_LIGHT] = 0x6c606060; - Colors[EGDC_HIGH_LIGHT_TEXT] = 0xd0e0e0e0; - Colors[EGDC_INACTIVE_BORDER] = 0xf0a5a5a5; - Colors[EGDC_INACTIVE_CAPTION] = 0xffd2d2d2; - Colors[EGDC_TOOLTIP] = 0xf00f2033; - Colors[EGDC_TOOLTIP_BACKGROUND] = 0xc0cbd2d9; - Colors[EGDC_SCROLLBAR] = 0xf0e0e0e0; - Colors[EGDC_WINDOW] = 0xf0f0f0f0; - Colors[EGDC_WINDOW_SYMBOL] = 0xd0161616; - Colors[EGDC_ICON] = 0xd0161616; - Colors[EGDC_ICON_HIGH_LIGHT] = 0xd0606060; - Colors[EGDC_GRAY_WINDOW_SYMBOL] = 0x3c101010; - Colors[EGDC_EDITABLE] = 0xf0ffffff; - Colors[EGDC_GRAY_EDITABLE] = 0xf0cccccc; - Colors[EGDC_FOCUSED_EDITABLE] = 0xf0fffff0; - - Sizes[EGDS_SCROLLBAR_SIZE] = 14; - Sizes[EGDS_MENU_HEIGHT] = 48; - Sizes[EGDS_WINDOW_BUTTON_WIDTH] = 15; - Sizes[EGDS_CHECK_BOX_WIDTH] = 18; - Sizes[EGDS_MESSAGE_BOX_WIDTH] = 500; - Sizes[EGDS_MESSAGE_BOX_HEIGHT] = 200; - Sizes[EGDS_BUTTON_WIDTH] = 80; - Sizes[EGDS_BUTTON_HEIGHT] = 30; - - Sizes[EGDS_TEXT_DISTANCE_X] = 3; - Sizes[EGDS_TEXT_DISTANCE_Y] = 2; - - Sizes[EGDS_TITLEBARTEXT_DISTANCE_X] = 3; - Sizes[EGDS_TITLEBARTEXT_DISTANCE_Y] = 2; - } - - Sizes[EGDS_MESSAGE_BOX_GAP_SPACE] = 15; - Sizes[EGDS_MESSAGE_BOX_MIN_TEXT_WIDTH] = 0; - Sizes[EGDS_MESSAGE_BOX_MAX_TEXT_WIDTH] = 500; - Sizes[EGDS_MESSAGE_BOX_MIN_TEXT_HEIGHT] = 0; - Sizes[EGDS_MESSAGE_BOX_MAX_TEXT_HEIGHT] = 99999; - - Sizes[EGDS_BUTTON_PRESSED_IMAGE_OFFSET_X] = 1; - Sizes[EGDS_BUTTON_PRESSED_IMAGE_OFFSET_Y] = 1; - Sizes[EGDS_BUTTON_PRESSED_TEXT_OFFSET_X] = 0; - Sizes[EGDS_BUTTON_PRESSED_TEXT_OFFSET_Y] = 2; - - Texts[EGDT_MSG_BOX_OK] = L"OK"; - Texts[EGDT_MSG_BOX_CANCEL] = L"Cancel"; - Texts[EGDT_MSG_BOX_YES] = L"Yes"; - Texts[EGDT_MSG_BOX_NO] = L"No"; - Texts[EGDT_WINDOW_CLOSE] = L"Close"; - Texts[EGDT_WINDOW_RESTORE] = L"Restore"; - Texts[EGDT_WINDOW_MINIMIZE] = L"Minimize"; - Texts[EGDT_WINDOW_MAXIMIZE] = L"Maximize"; - - Icons[EGDI_WINDOW_MAXIMIZE] = 225; - Icons[EGDI_WINDOW_RESTORE] = 226; - Icons[EGDI_WINDOW_CLOSE] = 227; - Icons[EGDI_WINDOW_MINIMIZE] = 228; - Icons[EGDI_CURSOR_UP] = 229; - Icons[EGDI_CURSOR_DOWN] = 230; - Icons[EGDI_CURSOR_LEFT] = 231; - Icons[EGDI_CURSOR_RIGHT] = 232; - Icons[EGDI_MENU_MORE] = 232; - Icons[EGDI_CHECK_BOX_CHECKED] = 233; - Icons[EGDI_DROP_DOWN] = 234; - Icons[EGDI_SMALL_CURSOR_UP] = 235; - Icons[EGDI_SMALL_CURSOR_DOWN] = 236; - Icons[EGDI_RADIO_BUTTON_CHECKED] = 237; - Icons[EGDI_MORE_LEFT] = 238; - Icons[EGDI_MORE_RIGHT] = 239; - Icons[EGDI_MORE_UP] = 240; - Icons[EGDI_MORE_DOWN] = 241; - Icons[EGDI_WINDOW_RESIZE] = 242; - Icons[EGDI_EXPAND] = 243; - Icons[EGDI_COLLAPSE] = 244; - - Icons[EGDI_FILE] = 245; - Icons[EGDI_DIRECTORY] = 246; - - for (u32 i=0; idrop(); - } - - if (SpriteBank) - SpriteBank->drop(); -} - - -//! returns default color -video::SColor GUISkin::getColor(EGUI_DEFAULT_COLOR color) const -{ - if ((u32)color < EGDC_COUNT) - return Colors[color]; - else - return video::SColor(); -} - - -//! sets a default color -void GUISkin::setColor(EGUI_DEFAULT_COLOR which, video::SColor newColor) -{ - if ((u32)which < EGDC_COUNT) - Colors[which] = newColor; -} - - -//! returns size for the given size type -s32 GUISkin::getSize(EGUI_DEFAULT_SIZE size) const -{ - if ((u32)size < EGDS_COUNT) - return Sizes[size]; - else - return 0; -} - - -//! sets a default size -void GUISkin::setSize(EGUI_DEFAULT_SIZE which, s32 size) -{ - if ((u32)which < EGDS_COUNT) - Sizes[which] = size; -} - - -//! returns the default font -IGUIFont* GUISkin::getFont(EGUI_DEFAULT_FONT which) const -{ - if (((u32)which < EGDF_COUNT) && Fonts[which]) - return Fonts[which]; - else - return Fonts[EGDF_DEFAULT]; -} - - -//! sets a default font -void GUISkin::setFont(IGUIFont* font, EGUI_DEFAULT_FONT which) -{ - if ((u32)which >= EGDF_COUNT) - return; - - if (font) - { - font->grab(); - if (Fonts[which]) - Fonts[which]->drop(); - - Fonts[which] = font; - } -} - - -//! gets the sprite bank stored -IGUISpriteBank* GUISkin::getSpriteBank() const -{ - return SpriteBank; -} - - -//! set a new sprite bank or remove one by passing 0 -void GUISkin::setSpriteBank(IGUISpriteBank* bank) -{ - if (bank) - bank->grab(); - - if (SpriteBank) - SpriteBank->drop(); - - SpriteBank = bank; -} - - -//! Returns a default icon -u32 GUISkin::getIcon(EGUI_DEFAULT_ICON icon) const -{ - if ((u32)icon < EGDI_COUNT) - return Icons[icon]; - else - return 0; -} - - -//! Sets a default icon -void GUISkin::setIcon(EGUI_DEFAULT_ICON icon, u32 index) -{ - if ((u32)icon < EGDI_COUNT) - Icons[icon] = index; -} - - -//! Returns a default text. For example for Message box button captions: -//! "OK", "Cancel", "Yes", "No" and so on. -const wchar_t* GUISkin::getDefaultText(EGUI_DEFAULT_TEXT text) const -{ - if ((u32)text < EGDT_COUNT) - return Texts[text].c_str(); - else - return Texts[0].c_str(); -} - - -//! Sets a default text. For example for Message box button captions: -//! "OK", "Cancel", "Yes", "No" and so on. -void GUISkin::setDefaultText(EGUI_DEFAULT_TEXT which, const wchar_t* newText) -{ - if ((u32)which < EGDT_COUNT) - Texts[which] = newText; -} - - -//! draws a standard 3d button pane -/** Used for drawing for example buttons in normal state. -It uses the colors EGDC_3D_DARK_SHADOW, EGDC_3D_HIGH_LIGHT, EGDC_3D_SHADOW and -EGDC_3D_FACE for this. See EGUI_DEFAULT_COLOR for details. -\param rect: Defining area where to draw. -\param clip: Clip area. -\param element: Pointer to the element which wishes to draw this. This parameter -is usually not used by ISkin, but can be used for example by more complex -implementations to find out how to draw the part exactly. */ -// PATCH -void GUISkin::drawColored3DButtonPaneStandard(IGUIElement* element, - const core::rect& r, - const core::rect* clip, - const video::SColor* colors) -{ - if (!Driver) - return; - - if (!colors) - colors = Colors; - - core::rect rect = r; - - if ( Type == EGST_BURNING_SKIN ) - { - rect.UpperLeftCorner.X -= 1; - rect.UpperLeftCorner.Y -= 1; - rect.LowerRightCorner.X += 1; - rect.LowerRightCorner.Y += 1; - draw3DSunkenPane(element, - colors[ EGDC_WINDOW ].getInterpolated( 0xFFFFFFFF, 0.9f ) - ,false, true, rect, clip); - return; - } - - Driver->draw2DRectangle(colors[EGDC_3D_DARK_SHADOW], rect, clip); - - rect.LowerRightCorner.X -= 1; - rect.LowerRightCorner.Y -= 1; - Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], rect, clip); - - rect.UpperLeftCorner.X += 1; - rect.UpperLeftCorner.Y += 1; - Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], rect, clip); - - rect.LowerRightCorner.X -= 1; - rect.LowerRightCorner.Y -= 1; - - if (!UseGradient) - { - Driver->draw2DRectangle(colors[EGDC_3D_FACE], rect, clip); - } - else - { - const video::SColor c1 = colors[EGDC_3D_FACE]; - const video::SColor c2 = c1.getInterpolated(colors[EGDC_3D_DARK_SHADOW], 0.4f); - Driver->draw2DRectangle(rect, c1, c1, c2, c2, clip); - } -} -// END PATCH - - -//! draws a pressed 3d button pane -/** Used for drawing for example buttons in pressed state. -It uses the colors EGDC_3D_DARK_SHADOW, EGDC_3D_HIGH_LIGHT, EGDC_3D_SHADOW and -EGDC_3D_FACE for this. See EGUI_DEFAULT_COLOR for details. -\param rect: Defining area where to draw. -\param clip: Clip area. -\param element: Pointer to the element which wishes to draw this. This parameter -is usually not used by ISkin, but can be used for example by more complex -implementations to find out how to draw the part exactly. */ -// PATCH -void GUISkin::drawColored3DButtonPanePressed(IGUIElement* element, - const core::rect& r, - const core::rect* clip, - const video::SColor* colors) -{ - if (!Driver) - return; - - if (!colors) - colors = Colors; - - core::rect rect = r; - Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], rect, clip); - - rect.LowerRightCorner.X -= 1; - rect.LowerRightCorner.Y -= 1; - Driver->draw2DRectangle(colors[EGDC_3D_DARK_SHADOW], rect, clip); - - rect.UpperLeftCorner.X += 1; - rect.UpperLeftCorner.Y += 1; - Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], rect, clip); - - rect.UpperLeftCorner.X += 1; - rect.UpperLeftCorner.Y += 1; - - if (!UseGradient) - { - Driver->draw2DRectangle(colors[EGDC_3D_FACE], rect, clip); - } - else - { - const video::SColor c1 = colors[EGDC_3D_FACE]; - const video::SColor c2 = c1.getInterpolated(colors[EGDC_3D_DARK_SHADOW], 0.4f); - Driver->draw2DRectangle(rect, c1, c1, c2, c2, clip); - } -} -// END PATCH - - -//! draws a sunken 3d pane -/** Used for drawing the background of edit, combo or check boxes. -\param element: Pointer to the element which wishes to draw this. This parameter -is usually not used by ISkin, but can be used for example by more complex -implementations to find out how to draw the part exactly. -\param bgcolor: Background color. -\param flat: Specifies if the sunken pane should be flat or displayed as sunken -deep into the ground. -\param rect: Defining area where to draw. -\param clip: Clip area. */ -// PATCH -void GUISkin::drawColored3DSunkenPane(IGUIElement* element, video::SColor bgcolor, - bool flat, bool fillBackGround, - const core::rect& r, - const core::rect* clip, - const video::SColor* colors) -{ - if (!Driver) - return; - - if (!colors) - colors = Colors; - - core::rect rect = r; - - if (fillBackGround) - Driver->draw2DRectangle(bgcolor, rect, clip); - - if (flat) - { - // draw flat sunken pane - - rect.LowerRightCorner.Y = rect.UpperLeftCorner.Y + 1; - Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], rect, clip); // top - - ++rect.UpperLeftCorner.Y; - rect.LowerRightCorner.Y = r.LowerRightCorner.Y; - rect.LowerRightCorner.X = rect.UpperLeftCorner.X + 1; - Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], rect, clip); // left - - rect = r; - ++rect.UpperLeftCorner.Y; - rect.UpperLeftCorner.X = rect.LowerRightCorner.X - 1; - Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], rect, clip); // right - - rect = r; - ++rect.UpperLeftCorner.X; - rect.UpperLeftCorner.Y = r.LowerRightCorner.Y - 1; - --rect.LowerRightCorner.X; - Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], rect, clip); // bottom - } - else - { - // draw deep sunken pane - rect.LowerRightCorner.Y = rect.UpperLeftCorner.Y + 1; - Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], rect, clip); // top - ++rect.UpperLeftCorner.X; - ++rect.UpperLeftCorner.Y; - --rect.LowerRightCorner.X; - ++rect.LowerRightCorner.Y; - Driver->draw2DRectangle(colors[EGDC_3D_DARK_SHADOW], rect, clip); - - rect.UpperLeftCorner.X = r.UpperLeftCorner.X; - rect.UpperLeftCorner.Y = r.UpperLeftCorner.Y+1; - rect.LowerRightCorner.X = rect.UpperLeftCorner.X + 1; - rect.LowerRightCorner.Y = r.LowerRightCorner.Y; - Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], rect, clip); // left - ++rect.UpperLeftCorner.X; - ++rect.UpperLeftCorner.Y; - ++rect.LowerRightCorner.X; - --rect.LowerRightCorner.Y; - Driver->draw2DRectangle(colors[EGDC_3D_DARK_SHADOW], rect, clip); - - rect = r; - rect.UpperLeftCorner.X = rect.LowerRightCorner.X - 1; - ++rect.UpperLeftCorner.Y; - Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], rect, clip); // right - --rect.UpperLeftCorner.X; - ++rect.UpperLeftCorner.Y; - --rect.LowerRightCorner.X; - --rect.LowerRightCorner.Y; - Driver->draw2DRectangle(colors[EGDC_3D_LIGHT], rect, clip); - - rect = r; - ++rect.UpperLeftCorner.X; - rect.UpperLeftCorner.Y = r.LowerRightCorner.Y - 1; - --rect.LowerRightCorner.X; - Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], rect, clip); // bottom - ++rect.UpperLeftCorner.X; - --rect.UpperLeftCorner.Y; - --rect.LowerRightCorner.X; - --rect.LowerRightCorner.Y; - Driver->draw2DRectangle(colors[EGDC_3D_LIGHT], rect, clip); - } -} -// END PATCH - -//! draws a window background -// return where to draw title bar text. -// PATCH -core::rect GUISkin::drawColored3DWindowBackground(IGUIElement* element, - bool drawTitleBar, video::SColor titleBarColor, - const core::rect& r, - const core::rect* clip, - core::rect* checkClientArea, - const video::SColor* colors) -{ - if (!Driver) - { - if ( checkClientArea ) - { - *checkClientArea = r; - } - return r; - } - - if (!colors) - colors = Colors; - - core::rect rect = r; - - // top border - rect.LowerRightCorner.Y = rect.UpperLeftCorner.Y + 1; - if ( !checkClientArea ) - { - Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], rect, clip); - } - - // left border - rect.LowerRightCorner.Y = r.LowerRightCorner.Y; - rect.LowerRightCorner.X = rect.UpperLeftCorner.X + 1; - if ( !checkClientArea ) - { - Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], rect, clip); - } - - // right border dark outer line - rect.UpperLeftCorner.X = r.LowerRightCorner.X - 1; - rect.LowerRightCorner.X = r.LowerRightCorner.X; - rect.UpperLeftCorner.Y = r.UpperLeftCorner.Y; - rect.LowerRightCorner.Y = r.LowerRightCorner.Y; - if ( !checkClientArea ) - { - Driver->draw2DRectangle(colors[EGDC_3D_DARK_SHADOW], rect, clip); - } - - // right border bright innner line - rect.UpperLeftCorner.X -= 1; - rect.LowerRightCorner.X -= 1; - rect.UpperLeftCorner.Y += 1; - rect.LowerRightCorner.Y -= 1; - if ( !checkClientArea ) - { - Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], rect, clip); - } - - // bottom border dark outer line - rect.UpperLeftCorner.X = r.UpperLeftCorner.X; - rect.UpperLeftCorner.Y = r.LowerRightCorner.Y - 1; - rect.LowerRightCorner.Y = r.LowerRightCorner.Y; - rect.LowerRightCorner.X = r.LowerRightCorner.X; - if ( !checkClientArea ) - { - Driver->draw2DRectangle(colors[EGDC_3D_DARK_SHADOW], rect, clip); - } - - // bottom border bright inner line - rect.UpperLeftCorner.X += 1; - rect.LowerRightCorner.X -= 1; - rect.UpperLeftCorner.Y -= 1; - rect.LowerRightCorner.Y -= 1; - if ( !checkClientArea ) - { - Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], rect, clip); - } - - // client area for background - rect = r; - rect.UpperLeftCorner.X +=1; - rect.UpperLeftCorner.Y +=1; - rect.LowerRightCorner.X -= 2; - rect.LowerRightCorner.Y -= 2; - if (checkClientArea) - { - *checkClientArea = rect; - } - - if ( !checkClientArea ) - { - if (!UseGradient) - { - Driver->draw2DRectangle(colors[EGDC_3D_FACE], rect, clip); - } - else if ( Type == EGST_BURNING_SKIN ) - { - const video::SColor c1 = colors[EGDC_WINDOW].getInterpolated ( 0xFFFFFFFF, 0.9f ); - const video::SColor c2 = colors[EGDC_WINDOW].getInterpolated ( 0xFFFFFFFF, 0.8f ); - - Driver->draw2DRectangle(rect, c1, c1, c2, c2, clip); - } - else - { - const video::SColor c2 = colors[EGDC_3D_SHADOW]; - const video::SColor c1 = colors[EGDC_3D_FACE]; - Driver->draw2DRectangle(rect, c1, c1, c1, c2, clip); - } - } - - // title bar - rect = r; - rect.UpperLeftCorner.X += 2; - rect.UpperLeftCorner.Y += 2; - rect.LowerRightCorner.X -= 2; - rect.LowerRightCorner.Y = rect.UpperLeftCorner.Y + getSize(EGDS_WINDOW_BUTTON_WIDTH) + 2; - - if (drawTitleBar ) - { - if (checkClientArea) - { - (*checkClientArea).UpperLeftCorner.Y = rect.LowerRightCorner.Y; - } - else - { - // draw title bar - //if (!UseGradient) - // Driver->draw2DRectangle(titleBarColor, rect, clip); - //else - if ( Type == EGST_BURNING_SKIN ) - { - const video::SColor c = titleBarColor.getInterpolated( video::SColor(titleBarColor.getAlpha(),255,255,255), 0.8f); - Driver->draw2DRectangle(rect, titleBarColor, titleBarColor, c, c, clip); - } - else - { - const video::SColor c = titleBarColor.getInterpolated(video::SColor(titleBarColor.getAlpha(),0,0,0), 0.2f); - Driver->draw2DRectangle(rect, titleBarColor, c, titleBarColor, c, clip); - } - } - } - - return rect; -} -// END PATCH - - -//! draws a standard 3d menu pane -/** Used for drawing for menus and context menus. -It uses the colors EGDC_3D_DARK_SHADOW, EGDC_3D_HIGH_LIGHT, EGDC_3D_SHADOW and -EGDC_3D_FACE for this. See EGUI_DEFAULT_COLOR for details. -\param element: Pointer to the element which wishes to draw this. This parameter -is usually not used by ISkin, but can be used for example by more complex -implementations to find out how to draw the part exactly. -\param rect: Defining area where to draw. -\param clip: Clip area. */ -// PATCH -void GUISkin::drawColored3DMenuPane(IGUIElement* element, - const core::rect& r, const core::rect* clip, - const video::SColor* colors) -{ - if (!Driver) - return; - - if (!colors) - colors = Colors; - - core::rect rect = r; - - if ( Type == EGST_BURNING_SKIN ) - { - rect.UpperLeftCorner.Y -= 3; - draw3DButtonPaneStandard(element, rect, clip); - return; - } - - // in this skin, this is exactly what non pressed buttons look like, - // so we could simply call - // draw3DButtonPaneStandard(element, rect, clip); - // here. - // but if the skin is transparent, this doesn't look that nice. So - // We draw it a little bit better, with some more draw2DRectangle calls, - // but there aren't that much menus visible anyway. - - rect.LowerRightCorner.Y = rect.UpperLeftCorner.Y + 1; - Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], rect, clip); - - rect.LowerRightCorner.Y = r.LowerRightCorner.Y; - rect.LowerRightCorner.X = rect.UpperLeftCorner.X + 1; - Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], rect, clip); - - rect.UpperLeftCorner.X = r.LowerRightCorner.X - 1; - rect.LowerRightCorner.X = r.LowerRightCorner.X; - rect.UpperLeftCorner.Y = r.UpperLeftCorner.Y; - rect.LowerRightCorner.Y = r.LowerRightCorner.Y; - Driver->draw2DRectangle(colors[EGDC_3D_DARK_SHADOW], rect, clip); - - rect.UpperLeftCorner.X -= 1; - rect.LowerRightCorner.X -= 1; - rect.UpperLeftCorner.Y += 1; - rect.LowerRightCorner.Y -= 1; - Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], rect, clip); - - rect.UpperLeftCorner.X = r.UpperLeftCorner.X; - rect.UpperLeftCorner.Y = r.LowerRightCorner.Y - 1; - rect.LowerRightCorner.Y = r.LowerRightCorner.Y; - rect.LowerRightCorner.X = r.LowerRightCorner.X; - Driver->draw2DRectangle(colors[EGDC_3D_DARK_SHADOW], rect, clip); - - rect.UpperLeftCorner.X += 1; - rect.LowerRightCorner.X -= 1; - rect.UpperLeftCorner.Y -= 1; - rect.LowerRightCorner.Y -= 1; - Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], rect, clip); - - rect = r; - rect.UpperLeftCorner.X +=1; - rect.UpperLeftCorner.Y +=1; - rect.LowerRightCorner.X -= 2; - rect.LowerRightCorner.Y -= 2; - - if (!UseGradient) - Driver->draw2DRectangle(colors[EGDC_3D_FACE], rect, clip); - else - { - const video::SColor c1 = colors[EGDC_3D_FACE]; - const video::SColor c2 = colors[EGDC_3D_SHADOW]; - Driver->draw2DRectangle(rect, c1, c1, c2, c2, clip); - } -} -// END PATCH - - -//! draws a standard 3d tool bar -/** Used for drawing for toolbars and menus. -\param element: Pointer to the element which wishes to draw this. This parameter -is usually not used by ISkin, but can be used for example by more complex -implementations to find out how to draw the part exactly. -\param rect: Defining area where to draw. -\param clip: Clip area. */ -// PATCH -void GUISkin::drawColored3DToolBar(IGUIElement* element, - const core::rect& r, - const core::rect* clip, - const video::SColor* colors) -{ - if (!Driver) - return; - - if (!colors) - colors = Colors; - - core::rect rect = r; - - rect.UpperLeftCorner.X = r.UpperLeftCorner.X; - rect.UpperLeftCorner.Y = r.LowerRightCorner.Y - 1; - rect.LowerRightCorner.Y = r.LowerRightCorner.Y; - rect.LowerRightCorner.X = r.LowerRightCorner.X; - Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], rect, clip); - - rect = r; - rect.LowerRightCorner.Y -= 1; - - if (!UseGradient) - { - Driver->draw2DRectangle(colors[EGDC_3D_FACE], rect, clip); - } - else - if ( Type == EGST_BURNING_SKIN ) - { - const video::SColor c1 = 0xF0000000 | colors[EGDC_3D_FACE].color; - const video::SColor c2 = 0xF0000000 | colors[EGDC_3D_SHADOW].color; - - rect.LowerRightCorner.Y += 1; - Driver->draw2DRectangle(rect, c1, c2, c1, c2, clip); - } - else - { - const video::SColor c1 = colors[EGDC_3D_FACE]; - const video::SColor c2 = colors[EGDC_3D_SHADOW]; - Driver->draw2DRectangle(rect, c1, c1, c2, c2, clip); - } -} -// END PATCH - -//! draws a tab button -/** Used for drawing for tab buttons on top of tabs. -\param element: Pointer to the element which wishes to draw this. This parameter -is usually not used by ISkin, but can be used for example by more complex -implementations to find out how to draw the part exactly. -\param active: Specifies if the tab is currently active. -\param rect: Defining area where to draw. -\param clip: Clip area. */ -// PATCH -void GUISkin::drawColored3DTabButton(IGUIElement* element, bool active, - const core::rect& frameRect, const core::rect* clip, EGUI_ALIGNMENT alignment, - const video::SColor* colors) -{ - if (!Driver) - return; - - if (!colors) - colors = Colors; - - core::rect tr = frameRect; - - if ( alignment == EGUIA_UPPERLEFT ) - { - tr.LowerRightCorner.X -= 2; - tr.LowerRightCorner.Y = tr.UpperLeftCorner.Y + 1; - tr.UpperLeftCorner.X += 1; - Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], tr, clip); - - // draw left highlight - tr = frameRect; - tr.LowerRightCorner.X = tr.UpperLeftCorner.X + 1; - tr.UpperLeftCorner.Y += 1; - Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], tr, clip); - - // draw grey background - tr = frameRect; - tr.UpperLeftCorner.X += 1; - tr.UpperLeftCorner.Y += 1; - tr.LowerRightCorner.X -= 2; - Driver->draw2DRectangle(colors[EGDC_3D_FACE], tr, clip); - - // draw right middle gray shadow - tr.LowerRightCorner.X += 1; - tr.UpperLeftCorner.X = tr.LowerRightCorner.X - 1; - Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], tr, clip); - - tr.LowerRightCorner.X += 1; - tr.UpperLeftCorner.X += 1; - tr.UpperLeftCorner.Y += 1; - Driver->draw2DRectangle(colors[EGDC_3D_DARK_SHADOW], tr, clip); - } - else - { - tr.LowerRightCorner.X -= 2; - tr.UpperLeftCorner.Y = tr.LowerRightCorner.Y - 1; - tr.UpperLeftCorner.X += 1; - Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], tr, clip); - - // draw left highlight - tr = frameRect; - tr.LowerRightCorner.X = tr.UpperLeftCorner.X + 1; - tr.LowerRightCorner.Y -= 1; - Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], tr, clip); - - // draw grey background - tr = frameRect; - tr.UpperLeftCorner.X += 1; - tr.UpperLeftCorner.Y -= 1; - tr.LowerRightCorner.X -= 2; - tr.LowerRightCorner.Y -= 1; - Driver->draw2DRectangle(colors[EGDC_3D_FACE], tr, clip); - - // draw right middle gray shadow - tr.LowerRightCorner.X += 1; - tr.UpperLeftCorner.X = tr.LowerRightCorner.X - 1; - //tr.LowerRightCorner.Y -= 1; - Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], tr, clip); - - tr.LowerRightCorner.X += 1; - tr.UpperLeftCorner.X += 1; - tr.LowerRightCorner.Y -= 1; - Driver->draw2DRectangle(colors[EGDC_3D_DARK_SHADOW], tr, clip); - } -} -// END PATCH - - -//! draws a tab control body -/** \param element: Pointer to the element which wishes to draw this. This parameter -is usually not used by ISkin, but can be used for example by more complex -implementations to find out how to draw the part exactly. -\param border: Specifies if the border should be drawn. -\param background: Specifies if the background should be drawn. -\param rect: Defining area where to draw. -\param clip: Clip area. */ -// PATCH -void GUISkin::drawColored3DTabBody(IGUIElement* element, bool border, bool background, - const core::rect& rect, const core::rect* clip, s32 tabHeight, EGUI_ALIGNMENT alignment, - const video::SColor* colors) -{ - if (!Driver) - return; - - if (!colors) - colors = Colors; - - core::rect tr = rect; - - if ( tabHeight == -1 ) - tabHeight = getSize(gui::EGDS_BUTTON_HEIGHT); - - // draw border. - if (border) - { - if ( alignment == EGUIA_UPPERLEFT ) - { - // draw left hightlight - tr.UpperLeftCorner.Y += tabHeight + 2; - tr.LowerRightCorner.X = tr.UpperLeftCorner.X + 1; - Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], tr, clip); - - // draw right shadow - tr.UpperLeftCorner.X = rect.LowerRightCorner.X - 1; - tr.LowerRightCorner.X = tr.UpperLeftCorner.X + 1; - Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], tr, clip); - - // draw lower shadow - tr = rect; - tr.UpperLeftCorner.Y = tr.LowerRightCorner.Y - 1; - Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], tr, clip); - } - else - { - // draw left hightlight - tr.LowerRightCorner.Y -= tabHeight + 2; - tr.LowerRightCorner.X = tr.UpperLeftCorner.X + 1; - Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], tr, clip); - - // draw right shadow - tr.UpperLeftCorner.X = rect.LowerRightCorner.X - 1; - tr.LowerRightCorner.X = tr.UpperLeftCorner.X + 1; - Driver->draw2DRectangle(colors[EGDC_3D_SHADOW], tr, clip); - - // draw lower shadow - tr = rect; - tr.LowerRightCorner.Y = tr.UpperLeftCorner.Y + 1; - Driver->draw2DRectangle(colors[EGDC_3D_HIGH_LIGHT], tr, clip); - } - } - - if (background) - { - if ( alignment == EGUIA_UPPERLEFT ) - { - tr = rect; - tr.UpperLeftCorner.Y += tabHeight + 2; - tr.LowerRightCorner.X -= 1; - tr.UpperLeftCorner.X += 1; - tr.LowerRightCorner.Y -= 1; - } - else - { - tr = rect; - tr.UpperLeftCorner.X += 1; - tr.UpperLeftCorner.Y -= 1; - tr.LowerRightCorner.X -= 1; - tr.LowerRightCorner.Y -= tabHeight + 2; - //tr.UpperLeftCorner.X += 1; - } - - if (!UseGradient) - Driver->draw2DRectangle(colors[EGDC_3D_FACE], tr, clip); - else - { - video::SColor c1 = colors[EGDC_3D_FACE]; - video::SColor c2 = colors[EGDC_3D_SHADOW]; - Driver->draw2DRectangle(tr, c1, c1, c2, c2, clip); - } - } -} -// END PATCH - - -//! draws an icon, usually from the skin's sprite bank -/** \param parent: Pointer to the element which wishes to draw this icon. -This parameter is usually not used by IGUISkin, but can be used for example -by more complex implementations to find out how to draw the part exactly. -\param icon: Specifies the icon to be drawn. -\param position: The position to draw the icon -\param starttime: The time at the start of the animation -\param currenttime: The present time, used to calculate the frame number -\param loop: Whether the animation should loop or not -\param clip: Clip area. */ -// PATCH -void GUISkin::drawColoredIcon(IGUIElement* element, EGUI_DEFAULT_ICON icon, - const core::position2di position, - u32 starttime, u32 currenttime, - bool loop, const core::rect* clip, - const video::SColor* colors) -{ - if (!SpriteBank) - return; - - if (!colors) - colors = Colors; - - bool gray = element && !element->isEnabled(); - SpriteBank->draw2DSprite(Icons[icon], position, clip, - colors[gray? EGDC_GRAY_WINDOW_SYMBOL : EGDC_WINDOW_SYMBOL], starttime, currenttime, loop, true); -} -// END PATCH - - -EGUI_SKIN_TYPE GUISkin::getType() const -{ - return Type; -} - - -//! draws a 2d rectangle. -void GUISkin::draw2DRectangle(IGUIElement* element, - const video::SColor &color, const core::rect& pos, - const core::rect* clip) -{ - Driver->draw2DRectangle(color, pos, clip); -} - - -//! gets the colors -// PATCH -void GUISkin::getColors(video::SColor* colors) -{ - u32 i; - for (i=0; i -#include "ITexture.h" - -namespace irr -{ -namespace video -{ - class IVideoDriver; -} -namespace gui -{ - class GUISkin : public IGUISkin - { - public: - - GUISkin(EGUI_SKIN_TYPE type, video::IVideoDriver* driver); - - //! destructor - virtual ~GUISkin(); - - //! returns default color - virtual video::SColor getColor(EGUI_DEFAULT_COLOR color) const; - - //! sets a default color - virtual void setColor(EGUI_DEFAULT_COLOR which, video::SColor newColor); - - //! returns size for the given size type - virtual s32 getSize(EGUI_DEFAULT_SIZE size) const; - - //! sets a default size - virtual void setSize(EGUI_DEFAULT_SIZE which, s32 size); - - //! returns the default font - virtual IGUIFont* getFont(EGUI_DEFAULT_FONT which=EGDF_DEFAULT) const; - - //! sets a default font - virtual void setFont(IGUIFont* font, EGUI_DEFAULT_FONT which=EGDF_DEFAULT); - - //! sets the sprite bank used for drawing icons - virtual void setSpriteBank(IGUISpriteBank* bank); - - //! gets the sprite bank used for drawing icons - virtual IGUISpriteBank* getSpriteBank() const; - - //! Returns a default icon - /** Returns the sprite index within the sprite bank */ - virtual u32 getIcon(EGUI_DEFAULT_ICON icon) const; - - //! Sets a default icon - /** Sets the sprite index used for drawing icons like arrows, - close buttons and ticks in checkboxes - \param icon: Enum specifying which icon to change - \param index: The sprite index used to draw this icon */ - virtual void setIcon(EGUI_DEFAULT_ICON icon, u32 index); - - //! Returns a default text. - /** For example for Message box button captions: - "OK", "Cancel", "Yes", "No" and so on. */ - virtual const wchar_t* getDefaultText(EGUI_DEFAULT_TEXT text) const; - - //! Sets a default text. - /** For example for Message box button captions: - "OK", "Cancel", "Yes", "No" and so on. */ - virtual void setDefaultText(EGUI_DEFAULT_TEXT which, const wchar_t* newText); - - //! draws a standard 3d button pane - /** Used for drawing for example buttons in normal state. - It uses the colors EGDC_3D_DARK_SHADOW, EGDC_3D_HIGH_LIGHT, EGDC_3D_SHADOW and - EGDC_3D_FACE for this. See EGUI_DEFAULT_COLOR for details. - \param rect: Defining area where to draw. - \param clip: Clip area. - \param element: Pointer to the element which wishes to draw this. This parameter - is usually not used by ISkin, but can be used for example by more complex - implementations to find out how to draw the part exactly. */ - virtual void draw3DButtonPaneStandard(IGUIElement* element, - const core::rect& rect, - const core::rect* clip=0) - { - drawColored3DButtonPaneStandard(element, rect,clip); - } - - virtual void drawColored3DButtonPaneStandard(IGUIElement* element, - const core::rect& rect, - const core::rect* clip=0, - const video::SColor* colors=0); - - //! draws a pressed 3d button pane - /** Used for drawing for example buttons in pressed state. - It uses the colors EGDC_3D_DARK_SHADOW, EGDC_3D_HIGH_LIGHT, EGDC_3D_SHADOW and - EGDC_3D_FACE for this. See EGUI_DEFAULT_COLOR for details. - \param rect: Defining area where to draw. - \param clip: Clip area. - \param element: Pointer to the element which wishes to draw this. This parameter - is usually not used by ISkin, but can be used for example by more complex - implementations to find out how to draw the part exactly. */ - virtual void draw3DButtonPanePressed(IGUIElement* element, - const core::rect& rect, - const core::rect* clip=0) - { - drawColored3DButtonPanePressed(element, rect, clip); - } - - virtual void drawColored3DButtonPanePressed(IGUIElement* element, - const core::rect& rect, - const core::rect* clip=0, - const video::SColor* colors=0); - - //! draws a sunken 3d pane - /** Used for drawing the background of edit, combo or check boxes. - \param element: Pointer to the element which wishes to draw this. This parameter - is usually not used by ISkin, but can be used for example by more complex - implementations to find out how to draw the part exactly. - \param bgcolor: Background color. - \param flat: Specifies if the sunken pane should be flat or displayed as sunken - deep into the ground. - \param rect: Defining area where to draw. - \param clip: Clip area. */ - virtual void draw3DSunkenPane(IGUIElement* element, - video::SColor bgcolor, bool flat, - bool fillBackGround, - const core::rect& rect, - const core::rect* clip=0) - { - drawColored3DSunkenPane(element, bgcolor, flat, fillBackGround, rect, clip); - } - - virtual void drawColored3DSunkenPane(IGUIElement* element, - video::SColor bgcolor, bool flat, - bool fillBackGround, - const core::rect& rect, - const core::rect* clip=0, - const video::SColor* colors=0); - - //! draws a window background - /** Used for drawing the background of dialogs and windows. - \param element: Pointer to the element which wishes to draw this. This parameter - is usually not used by ISkin, but can be used for example by more complex - implementations to find out how to draw the part exactly. - \param titleBarColor: Title color. - \param drawTitleBar: True to enable title drawing. - \param rect: Defining area where to draw. - \param clip: Clip area. - \param checkClientArea: When set to non-null the function will not draw anything, - but will instead return the clientArea which can be used for drawing by the calling window. - That is the area without borders and without titlebar. - \return Returns rect where it would be good to draw title bar text. This will - work even when checkClientArea is set to a non-null value.*/ - virtual core::rect draw3DWindowBackground(IGUIElement* element, - bool drawTitleBar, video::SColor titleBarColor, - const core::rect& rect, - const core::rect* clip, - core::rect* checkClientArea) - { - return drawColored3DWindowBackground(element, drawTitleBar, titleBarColor, - rect, clip, checkClientArea); - } - - virtual core::rect drawColored3DWindowBackground(IGUIElement* element, - bool drawTitleBar, video::SColor titleBarColor, - const core::rect& rect, - const core::rect* clip, - core::rect* checkClientArea, - const video::SColor* colors=0); - - //! draws a standard 3d menu pane - /** Used for drawing for menus and context menus. - It uses the colors EGDC_3D_DARK_SHADOW, EGDC_3D_HIGH_LIGHT, EGDC_3D_SHADOW and - EGDC_3D_FACE for this. See EGUI_DEFAULT_COLOR for details. - \param element: Pointer to the element which wishes to draw this. This parameter - is usually not used by ISkin, but can be used for example by more complex - implementations to find out how to draw the part exactly. - \param rect: Defining area where to draw. - \param clip: Clip area. */ - virtual void draw3DMenuPane(IGUIElement* element, - const core::rect& rect, - const core::rect* clip=0) - { - drawColored3DMenuPane(element, rect, clip); - } - - virtual void drawColored3DMenuPane(IGUIElement* element, - const core::rect& rect, - const core::rect* clip=0, - const video::SColor* colors=0); - - //! draws a standard 3d tool bar - /** Used for drawing for toolbars and menus. - \param element: Pointer to the element which wishes to draw this. This parameter - is usually not used by ISkin, but can be used for example by more complex - implementations to find out how to draw the part exactly. - \param rect: Defining area where to draw. - \param clip: Clip area. */ - virtual void draw3DToolBar(IGUIElement* element, - const core::rect& rect, - const core::rect* clip=0) - { - drawColored3DToolBar(element, rect, clip); - } - - virtual void drawColored3DToolBar(IGUIElement* element, - const core::rect& rect, - const core::rect* clip=0, - const video::SColor* colors=0); - - //! draws a tab button - /** Used for drawing for tab buttons on top of tabs. - \param element: Pointer to the element which wishes to draw this. This parameter - is usually not used by ISkin, but can be used for example by more complex - implementations to find out how to draw the part exactly. - \param active: Specifies if the tab is currently active. - \param rect: Defining area where to draw. - \param clip: Clip area. */ - virtual void draw3DTabButton(IGUIElement* element, bool active, - const core::rect& rect, const core::rect* clip=0, EGUI_ALIGNMENT alignment=EGUIA_UPPERLEFT) - { - drawColored3DTabButton(element, active, rect, clip, alignment); - } - - virtual void drawColored3DTabButton(IGUIElement* element, bool active, - const core::rect& rect, const core::rect* clip=0, EGUI_ALIGNMENT alignment=EGUIA_UPPERLEFT, - const video::SColor* colors=0); - - //! draws a tab control body - /** \param element: Pointer to the element which wishes to draw this. This parameter - is usually not used by ISkin, but can be used for example by more complex - implementations to find out how to draw the part exactly. - \param border: Specifies if the border should be drawn. - \param background: Specifies if the background should be drawn. - \param rect: Defining area where to draw. - \param clip: Clip area. */ - virtual void draw3DTabBody(IGUIElement* element, bool border, bool background, - const core::rect& rect, const core::rect* clip=0, s32 tabHeight=-1, EGUI_ALIGNMENT alignment=EGUIA_UPPERLEFT) - { - drawColored3DTabBody(element, border, background, rect, clip, tabHeight, alignment); - } - - virtual void drawColored3DTabBody(IGUIElement* element, bool border, bool background, - const core::rect& rect, const core::rect* clip=0, s32 tabHeight=-1, EGUI_ALIGNMENT alignment=EGUIA_UPPERLEFT, - const video::SColor* colors=0); - - //! draws an icon, usually from the skin's sprite bank - /** \param element: Pointer to the element which wishes to draw this icon. - This parameter is usually not used by IGUISkin, but can be used for example - by more complex implementations to find out how to draw the part exactly. - \param icon: Specifies the icon to be drawn. - \param position: The position to draw the icon - \param starttime: The time at the start of the animation - \param currenttime: The present time, used to calculate the frame number - \param loop: Whether the animation should loop or not - \param clip: Clip area. */ - virtual void drawIcon(IGUIElement* element, EGUI_DEFAULT_ICON icon, - const core::position2di position, - u32 starttime=0, u32 currenttime=0, - bool loop=false, const core::rect* clip=0) - { - drawColoredIcon(element, icon, position, starttime, currenttime, loop, clip); - } - - virtual void drawColoredIcon(IGUIElement* element, EGUI_DEFAULT_ICON icon, - const core::position2di position, - u32 starttime=0, u32 currenttime=0, - bool loop=false, const core::rect* clip=0, - const video::SColor* colors=0); - - //! draws a 2d rectangle. - /** \param element: Pointer to the element which wishes to draw this icon. - This parameter is usually not used by IGUISkin, but can be used for example - by more complex implementations to find out how to draw the part exactly. - \param color: Color of the rectangle to draw. The alpha component specifies how - transparent the rectangle will be. - \param pos: Position of the rectangle. - \param clip: Pointer to rectangle against which the rectangle will be clipped. - If the pointer is null, no clipping will be performed. */ - virtual void draw2DRectangle(IGUIElement* element, const video::SColor &color, - const core::rect& pos, const core::rect* clip = 0); - - - //! get the type of this skin - virtual EGUI_SKIN_TYPE getType() const; - - //! gets the colors - virtual void getColors(video::SColor* colors); // ::PATCH: - - private: - - video::SColor Colors[EGDC_COUNT]; - s32 Sizes[EGDS_COUNT]; - u32 Icons[EGDI_COUNT]; - IGUIFont* Fonts[EGDF_COUNT]; - IGUISpriteBank* SpriteBank; - core::stringw Texts[EGDT_COUNT]; - video::IVideoDriver* Driver; - bool UseGradient; - - EGUI_SKIN_TYPE Type; - }; - - #define set3DSkinColors(skin, button_color) \ - { \ - skin->setColor(EGDC_3D_FACE, button_color); \ - skin->setColor(EGDC_3D_DARK_SHADOW, button_color, 0.25f); \ - skin->setColor(EGDC_3D_SHADOW, button_color, 0.5f); \ - skin->setColor(EGDC_3D_LIGHT, button_color); \ - skin->setColor(EGDC_3D_HIGH_LIGHT, button_color, 1.5f); \ - } - - #define getElementSkinColor(color) \ - { \ - if (!Colors) \ - { \ - IGUISkin* skin = Environment->getSkin(); \ - if (skin) \ - return skin->getColor(color); \ - } \ - return Colors[color]; \ - } - - #define setElementSkinColor(which, newColor, shading) \ - { \ - if (!Colors) \ - { \ - Colors = new video::SColor[EGDC_COUNT]; \ - GUISkin* skin = (GUISkin *)Environment->getSkin(); \ - if (skin) \ - skin->getColors(Colors); \ - } \ - Colors[which] = newColor; \ - setShading(Colors[which],shading); \ - } -} // end namespace gui -//! Sets the shading -inline void setShading(video::SColor &color,f32 s) // :PATCH: -{ - if (s < 1.0f) - { - color.setRed(color.getRed() * s); - color.setGreen(color.getGreen() * s); - color.setBlue(color.getBlue() * s); - } - else if (s > 1.0f) - { - s -= 1.0f; - - color.setRed(color.getRed() + (255 - color.getRed()) * s); - color.setGreen(color.getGreen() + (255 - color.getGreen()) * s); - color.setBlue(color.getBlue() + (255 - color.getBlue()) * s); - } -} -} // end namespace irr - -#endif diff --git a/src/gui/guiTable.cpp b/src/gui/guiTable.cpp index 93a56ed3c..a58020300 100644 --- a/src/gui/guiTable.cpp +++ b/src/gui/guiTable.cpp @@ -27,6 +27,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include "client/renderingengine.h" #include "debug.h" +#include "irrlicht_changes/CGUITTFont.h" #include "log.h" #include "client/texturesource.h" #include "gettime.h" @@ -227,6 +228,8 @@ void GUITable::setTable(const TableOptions &options, s32 content_index; // Next cell: Width in pixels s32 content_width; + // Next cell: Image scale (only for "image" column type) + f32 image_scale; // Vector of completed cells in this row std::vector cells; // Stores colors and how long they last (maximum column index) @@ -236,6 +239,17 @@ void GUITable::setTable(const TableOptions &options, }; TempRow *rows = new TempRow[rowcount]; + CGUITTFont *ttfont = dynamic_cast(m_font); + f32 desired_image_scale = 1.0f; + if (ttfont) { + // This gives us the effective font size, which is chosen taking display + // density and gui_scaling into account. + // Since row height scales with font size, this gives better results than + // just using display density and gui_scaling when a non-standard font + // size is used (e.g. Android default of 14). + desired_image_scale = std::max(1.0f, ttfont->getFontSize() / 16.0f); + } + // Get em width. Pedantically speaking, the width of "M" is not // necessarily the same as the em width, but whatever, close enough. s32 em = 6; @@ -373,8 +387,18 @@ void GUITable::setTable(const TableOptions &options, if (row->content_index >= 0) image = m_images[row->content_index]; + row->image_scale = 1.0f; + row->content_width = 0; + if (image) { + f32 max_image_scale = (f32)m_rowheight / (f32)image->getOriginalSize().Height; + // Scale with display density and make sure it fits into the row + row->image_scale = std::min(desired_image_scale, max_image_scale); + // When upscaling, fractional factors would cause artifacts + if (row->image_scale > 1.0f) + row->image_scale = std::floor(row->image_scale); + row->content_width = image->getOriginalSize().Width * row->image_scale; + } // Get content width and update xmax - row->content_width = image ? image->getOriginalSize().Width : 0; row->content_width = MYMAX(row->content_width, width); s32 row_xmax = row->x + padding + row->content_width; xmax = MYMAX(xmax, row_xmax); @@ -384,6 +408,7 @@ void GUITable::setTable(const TableOptions &options, newcell.xmin = rows[i].x + padding; alignContent(&newcell, xmax, rows[i].content_width, align); newcell.content_index = rows[i].content_index; + newcell.image_scale = rows[i].image_scale; rows[i].cells.push_back(newcell); rows[i].x = newcell.xmax; } @@ -740,23 +765,23 @@ void GUITable::drawCell(const Cell *cell, video::SColor color, video::ITexture *image = m_images[cell->content_index]; if (image) { - core::position2d dest_pos = - row_rect.UpperLeftCorner; - dest_pos.X += cell->xpos; core::rect source_rect( core::position2d(0, 0), image->getOriginalSize()); - s32 imgh = source_rect.LowerRightCorner.Y; + core::rect dest_rect( + 0, 0, + image->getOriginalSize().Width * cell->image_scale, + image->getOriginalSize().Height * cell->image_scale); + dest_rect += row_rect.UpperLeftCorner + v2s32(cell->xpos, 0); + + s32 imgh = dest_rect.getHeight(); s32 rowh = row_rect.getHeight(); + // Center vertically if needed if (imgh < rowh) - dest_pos.Y += (rowh - imgh) / 2; - else - source_rect.LowerRightCorner.Y = rowh; + dest_rect += v2s32(0, (rowh - imgh) / 2); - video::SColor color(255, 255, 255, 255); - - driver->draw2DImage(image, dest_pos, source_rect, - &client_clip, color, true); + driver->draw2DImage(image, dest_rect, source_rect, + &client_clip, nullptr, true); } } } diff --git a/src/gui/guiTable.h b/src/gui/guiTable.h index 76a0e94d0..271649ff2 100644 --- a/src/gui/guiTable.h +++ b/src/gui/guiTable.h @@ -166,6 +166,7 @@ protected: video::SColor color; bool color_defined; s32 reported_column; + f32 image_scale; // only for "image" type columns }; struct Row { diff --git a/src/gui/guiVolumeChange.cpp b/src/gui/guiVolumeChange.cpp index a6608dd18..4d1139dce 100644 --- a/src/gui/guiVolumeChange.cpp +++ b/src/gui/guiVolumeChange.cpp @@ -27,6 +27,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include #include #include +#include #include "settings.h" #include "gettext.h" diff --git a/src/gui/modalMenu.cpp b/src/gui/modalMenu.cpp index 00bc143bb..fd60d08c2 100644 --- a/src/gui/modalMenu.cpp +++ b/src/gui/modalMenu.cpp @@ -28,7 +28,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "gui/guiInventoryList.h" #include "porting.h" #include "settings.h" -#include "touchscreengui.h" +#include "touchcontrols.h" PointerAction PointerAction::fromEvent(const SEvent &event) { switch (event.EventType) { @@ -59,14 +59,8 @@ GUIModalMenu::GUIModalMenu(gui::IGUIEnvironment* env, gui::IGUIElement* parent, m_menumgr(menumgr), m_remap_click_outside(remap_click_outside) { - m_gui_scale = std::max(g_settings->getFloat("gui_scaling"), 0.5f); - const float screen_dpi_scale = RenderingEngine::getDisplayDensity(); - - if (g_settings->getBool("enable_touch")) { - m_gui_scale *= 1.1f - 0.3f * screen_dpi_scale + 0.2f * screen_dpi_scale * screen_dpi_scale; - } else { - m_gui_scale *= screen_dpi_scale; - } + m_gui_scale = g_settings->getFloat("gui_scaling", 0.5f, 20.0f) * + RenderingEngine::getDisplayDensity(); setVisible(true); m_menumgr->createdMenu(this); @@ -117,8 +111,8 @@ void GUIModalMenu::quitMenu() Environment->removeFocus(this); m_menumgr->deletingMenu(this); this->remove(); - if (g_touchscreengui) - g_touchscreengui->show(); + if (g_touchcontrols) + g_touchcontrols->show(); } static bool isChild(gui::IGUIElement *tocheck, gui::IGUIElement *parent) @@ -325,6 +319,11 @@ bool GUIModalMenu::preprocessEvent(const SEvent &event) } #endif + // If the second touch arrives here again, that means nobody handled it. + // Abort to avoid infinite recursion. + if (m_second_touch) + return true; + // Convert touch events into mouse events. if (event.EventType == EET_TOUCH_INPUT_EVENT) { irr_ptr holder; diff --git a/src/gui/profilergraph.cpp b/src/gui/profilergraph.cpp index e6fdf9ae8..ab4796cb9 100644 --- a/src/gui/profilergraph.cpp +++ b/src/gui/profilergraph.cpp @@ -20,6 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "porting.h" #include "profilergraph.h" +#include "IVideoDriver.h" #include "util/string.h" void ProfilerGraph::put(const Profiler::GraphValues &values) diff --git a/src/gui/profilergraph.h b/src/gui/profilergraph.h index 6354ac9ef..c92cbf837 100644 --- a/src/gui/profilergraph.h +++ b/src/gui/profilergraph.h @@ -23,9 +23,12 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include #include -#include #include "profiler.h" +namespace irr::video { + class IVideoDriver; +} + /* Profiler display */ class ProfilerGraph { diff --git a/src/gui/touchscreengui.cpp b/src/gui/touchcontrols.cpp similarity index 68% rename from src/gui/touchscreengui.cpp rename to src/gui/touchcontrols.cpp index 2504c4eb5..4a673ccf3 100644 --- a/src/gui/touchscreengui.cpp +++ b/src/gui/touchcontrols.cpp @@ -20,7 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#include "touchscreengui.h" +#include "touchcontrols.h" #include "gettime.h" #include "irr_v2d.h" @@ -31,20 +31,23 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "client/keycode.h" #include "client/renderingengine.h" #include "util/numeric.h" +#include "gettext.h" +#include "IGUIStaticText.h" +#include "IGUIFont.h" +#include #include #include #include -TouchScreenGUI *g_touchscreengui; +TouchControls *g_touchcontrols; static const char *button_image_names[] = { "jump_btn.png", "down.png", "zoom.png", "aux1_btn.png", - "gear_icon.png", - "rare_controls.png", + "overflow_btn.png", "fly_btn.png", "noclip_btn.png", @@ -65,6 +68,33 @@ static const char *button_image_names[] = { "joystick_center.png", }; +// compare with GUIKeyChangeMenu::init_keys +static const char *button_titles[] = { + N_("Jump"), + N_("Sneak"), + N_("Zoom"), + N_("Aux1"), + N_("Overflow menu"), + + N_("Toggle fly"), + N_("Toggle noclip"), + N_("Toggle fast"), + N_("Toggle debug"), + N_("Change camera"), + N_("Range select"), + N_("Toggle minimap"), + N_("Toggle chat log"), + + N_("Chat"), + N_("Inventory"), + N_("Drop"), + N_("Exit"), + + N_("Joystick"), + N_("Joystick"), + N_("Joystick"), +}; + static void load_button_texture(IGUIImage *gui_button, const std::string &path, const recti &button_rect, ISimpleTextureSource *tsrc, video::IVideoDriver *driver) { @@ -237,173 +267,14 @@ static EKEY_CODE id_to_keycode(touch_gui_button_id id) code = keyname_to_keycode(resolved.c_str()); } catch (UnknownKeycode &e) { code = KEY_UNKNOWN; - warningstream << "TouchScreenGUI: Unknown key '" << resolved + warningstream << "TouchControls: Unknown key '" << resolved << "' for '" << key << "', hiding button." << std::endl; } return code; } -AutoHideButtonBar::AutoHideButtonBar(IrrlichtDevice *device, ISimpleTextureSource *tsrc, - touch_gui_button_id starter_id, const std::string &starter_img, - recti starter_rect, autohide_button_bar_dir dir) : - m_driver(device->getVideoDriver()), - m_guienv(device->getGUIEnvironment()), - m_receiver(device->getEventReceiver()), - m_texturesource(tsrc) -{ - m_upper_left = starter_rect.UpperLeftCorner; - m_lower_right = starter_rect.LowerRightCorner; - IGUIImage *starter_gui_button = m_guienv->addImage(starter_rect, nullptr, - starter_id); - load_button_texture(starter_gui_button, starter_img, starter_rect, - m_texturesource, m_driver); - - m_starter = grab_gui_element(starter_gui_button); - m_dir = dir; -} - -void AutoHideButtonBar::addButton(touch_gui_button_id id, const std::string &image) -{ - int button_size = 0; - - if (m_dir == AHBB_Dir_Top_Bottom || m_dir == AHBB_Dir_Bottom_Top) - button_size = m_lower_right.X - m_upper_left.X; - else - button_size = m_lower_right.Y - m_upper_left.Y; - - recti current_button; - - if (m_dir == AHBB_Dir_Right_Left || m_dir == AHBB_Dir_Left_Right) { - int x_start = 0; - int x_end = 0; - - if (m_dir == AHBB_Dir_Left_Right) { - x_start = m_lower_right.X + button_size * 1.25f * m_buttons.size() - + button_size * 0.25f; - x_end = x_start + button_size; - } else { - x_end = m_upper_left.X - button_size * 1.25f * m_buttons.size() - - button_size * 0.25f; - x_start = x_end - button_size; - } - - current_button = recti(x_start, m_upper_left.Y, x_end, m_lower_right.Y); - } else { - double y_start = 0; - double y_end = 0; - - if (m_dir == AHBB_Dir_Top_Bottom) { - y_start = m_lower_right.X + button_size * 1.25f * m_buttons.size() - + button_size * 0.25f; - y_end = y_start + button_size; - } else { - y_end = m_upper_left.X - button_size * 1.25f * m_buttons.size() - - button_size * 0.25f; - y_start = y_end - button_size; - } - - current_button = recti(m_upper_left.X, y_start, m_lower_right.Y, y_end); - } - - IGUIImage *btn_gui_button = m_guienv->addImage(current_button, nullptr, id); - btn_gui_button->setVisible(false); - btn_gui_button->setEnabled(false); - load_button_texture(btn_gui_button, image, current_button, m_texturesource, m_driver); - - button_info btn{}; - btn.keycode = id_to_keycode(id); - btn.gui_button = grab_gui_element(btn_gui_button); - m_buttons.push_back(btn); -} - -void AutoHideButtonBar::addToggleButton(touch_gui_button_id id, - const std::string &image_1, const std::string &image_2) -{ - addButton(id, image_1); - button_info &btn = m_buttons.back(); - btn.toggleable = button_info::FIRST_TEXTURE; - btn.toggle_textures[0] = image_1; - btn.toggle_textures[1] = image_2; -} - -bool AutoHideButtonBar::handlePress(size_t pointer_id, IGUIElement *element) -{ - if (m_active) { - return buttons_handlePress(m_buttons, pointer_id, element, m_driver, - m_receiver, m_texturesource); - } - if (m_starter.get() == element) { - activate(); - return true; - } - return false; -} - -bool AutoHideButtonBar::handleRelease(size_t pointer_id) -{ - return buttons_handleRelease(m_buttons, pointer_id, m_driver, - m_receiver, m_texturesource); -} - -void AutoHideButtonBar::step(float dtime) -{ - // Since buttons can stay pressed after the buttonbar is deactivated, - // we call the step function even if the buttonbar is inactive. - bool has_pointers = buttons_step(m_buttons, dtime, m_driver, m_receiver, - m_texturesource); - - if (m_active) { - if (!has_pointers) { - m_timeout += dtime; - if (m_timeout > BUTTONBAR_HIDE_DELAY) - deactivate(); - } else { - m_timeout = 0.0f; - } - } - -} - -void AutoHideButtonBar::updateVisibility() { - bool starter_visible = m_visible && !m_active; - bool inner_visible = m_visible && m_active; - - m_starter->setVisible(starter_visible); - m_starter->setEnabled(starter_visible); - - for (auto &button : m_buttons) { - button.gui_button->setVisible(inner_visible); - button.gui_button->setEnabled(inner_visible); - } -} - -void AutoHideButtonBar::activate() -{ - m_active = true; - m_timeout = 0.0f; - updateVisibility(); -} - -void AutoHideButtonBar::deactivate() -{ - m_active = false; - updateVisibility(); -} - -void AutoHideButtonBar::show() -{ - m_visible = true; - updateVisibility(); -} - -void AutoHideButtonBar::hide() -{ - m_visible = false; - updateVisibility(); -} - -TouchScreenGUI::TouchScreenGUI(IrrlichtDevice *device, ISimpleTextureSource *tsrc): +TouchControls::TouchControls(IrrlichtDevice *device, ISimpleTextureSource *tsrc): m_device(device), m_guienv(device->getGUIEnvironment()), m_receiver(device->getEventReceiver()), @@ -421,44 +292,44 @@ TouchScreenGUI::TouchScreenGUI(IrrlichtDevice *device, ISimpleTextureSource *tsr // Initialize joystick display "button". // Joystick is placed on the bottom left of screen. if (m_fixed_joystick) { - m_joystick_btn_off = grab_gui_element(makeJoystickButton(joystick_off_id, + m_joystick_btn_off = grab_gui_element(makeButtonDirect(joystick_off_id, recti(m_button_size, m_screensize.Y - m_button_size * 4, m_button_size * 4, m_screensize.Y - m_button_size), true)); } else { - m_joystick_btn_off = grab_gui_element(makeJoystickButton(joystick_off_id, + m_joystick_btn_off = grab_gui_element(makeButtonDirect(joystick_off_id, recti(m_button_size, m_screensize.Y - m_button_size * 3, m_button_size * 3, m_screensize.Y - m_button_size), true)); } - m_joystick_btn_bg = grab_gui_element(makeJoystickButton(joystick_bg_id, + m_joystick_btn_bg = grab_gui_element(makeButtonDirect(joystick_bg_id, recti(m_button_size, m_screensize.Y - m_button_size * 4, m_button_size * 4, m_screensize.Y - m_button_size), false)); - m_joystick_btn_center = grab_gui_element(makeJoystickButton(joystick_center_id, + m_joystick_btn_center = grab_gui_element(makeButtonDirect(joystick_center_id, recti(0, 0, m_button_size, m_button_size), false)); // init jump button - addButton(jump_id, button_image_names[jump_id], + addButton(m_buttons, jump_id, button_image_names[jump_id], recti(m_screensize.X - 1.75f * m_button_size, m_screensize.Y - m_button_size, m_screensize.X - 0.25f * m_button_size, m_screensize.Y)); // init sneak button - addButton(sneak_id, button_image_names[sneak_id], + addButton(m_buttons, sneak_id, button_image_names[sneak_id], recti(m_screensize.X - 3.25f * m_button_size, m_screensize.Y - m_button_size, m_screensize.X - 1.75f * m_button_size, m_screensize.Y)); // init zoom button - addButton(zoom_id, button_image_names[zoom_id], + addButton(m_buttons, zoom_id, button_image_names[zoom_id], recti(m_screensize.X - 1.25f * m_button_size, m_screensize.Y - 4 * m_button_size, m_screensize.X - 0.25f * m_button_size, @@ -466,78 +337,122 @@ TouchScreenGUI::TouchScreenGUI(IrrlichtDevice *device, ISimpleTextureSource *tsr // init aux1 button if (!m_joystick_triggers_aux1) - addButton(aux1_id, button_image_names[aux1_id], + addButton(m_buttons, aux1_id, button_image_names[aux1_id], recti(m_screensize.X - 1.25f * m_button_size, m_screensize.Y - 2.5f * m_button_size, m_screensize.X - 0.25f * m_button_size, m_screensize.Y - 1.5f * m_button_size)); - AutoHideButtonBar &settings_bar = m_buttonbars.emplace_back(m_device, m_texturesource, - settings_starter_id, button_image_names[settings_starter_id], - recti(m_screensize.X - 1.25f * m_button_size, - m_screensize.Y - (SETTINGS_BAR_Y_OFFSET + 1.0f) * m_button_size - + 0.5f * m_button_size, - m_screensize.X - 0.25f * m_button_size, - m_screensize.Y - SETTINGS_BAR_Y_OFFSET * m_button_size - + 0.5f * m_button_size), - AHBB_Dir_Right_Left); + // init overflow button + m_overflow_btn = grab_gui_element(makeButtonDirect(overflow_id, + recti(m_screensize.X - 1.25f * m_button_size, + m_screensize.Y - 5.5f * m_button_size, + m_screensize.X - 0.25f * m_button_size, + m_screensize.Y - 4.5f * m_button_size), true)); - const static touch_gui_button_id settings_bar_buttons[] { - fly_id, noclip_id, fast_id, debug_id, camera_id, range_id, minimap_id, - }; - for (auto id : settings_bar_buttons) { - if (id_to_keycode(id) == KEY_UNKNOWN) - continue; - settings_bar.addButton(id, button_image_names[id]); - } - - // Chat is shown by default, so chat_hide_btn.png is shown first. - settings_bar.addToggleButton(toggle_chat_id, - "chat_hide_btn.png", "chat_show_btn.png"); - - AutoHideButtonBar &rare_controls_bar = m_buttonbars.emplace_back(m_device, m_texturesource, - rare_controls_starter_id, button_image_names[rare_controls_starter_id], - recti(0.25f * m_button_size, - m_screensize.Y - (RARE_CONTROLS_BAR_Y_OFFSET + 1.0f) * m_button_size - + 0.5f * m_button_size, - 0.75f * m_button_size, - m_screensize.Y - RARE_CONTROLS_BAR_Y_OFFSET * m_button_size - + 0.5f * m_button_size), - AHBB_Dir_Left_Right); - - const static touch_gui_button_id rare_controls_bar_buttons[] { + const static touch_gui_button_id overflow_buttons[] { chat_id, inventory_id, drop_id, exit_id, + fly_id, noclip_id, fast_id, debug_id, camera_id, range_id, minimap_id, + toggle_chat_id, }; - for (auto id : rare_controls_bar_buttons) { + + IGUIStaticText *background = m_guienv->addStaticText(L"", + recti(v2s32(0, 0), dimension2du(m_screensize))); + background->setBackgroundColor(video::SColor(140, 0, 0, 0)); + background->setVisible(false); + m_overflow_bg = grab_gui_element(background); + + s32 cols = 4; + s32 rows = 3; + f32 screen_aspect = (f32)m_screensize.X / (f32)m_screensize.Y; + while ((s32)ARRLEN(overflow_buttons) > cols * rows) { + f32 aspect = (f32)cols / (f32)rows; + if (aspect > screen_aspect) + rows++; + else + cols++; + } + + v2s32 size(m_button_size, m_button_size); + v2s32 spacing(m_screensize.X / (cols + 1), m_screensize.Y / (rows + 1)); + v2s32 pos(spacing); + + for (auto id : overflow_buttons) { if (id_to_keycode(id) == KEY_UNKNOWN) continue; - rare_controls_bar.addButton(id, button_image_names[id]); + + recti rect(pos - size / 2, dimension2du(size.X, size.Y)); + if (rect.LowerRightCorner.X > (s32)m_screensize.X) { + pos.X = spacing.X; + pos.Y += spacing.Y; + rect = recti(pos - size / 2, dimension2du(size.X, size.Y)); + } + + if (id == toggle_chat_id) + // Chat is shown by default, so chat_hide_btn.png is shown first. + addToggleButton(m_overflow_buttons, id, "chat_hide_btn.png", + "chat_show_btn.png", rect, false); + else + addButton(m_overflow_buttons, id, button_image_names[id], rect, false); + + std::wstring str = wstrgettext(button_titles[id]); + IGUIStaticText *text = m_guienv->addStaticText(str.c_str(), recti()); + IGUIFont *font = text->getActiveFont(); + dimension2du dim = font->getDimension(str.c_str()); + dim = dimension2du(dim.Width * 1.25f, dim.Height * 1.25f); // avoid clipping + text->setRelativePosition(recti(pos.X - dim.Width / 2, pos.Y + size.Y / 2, + pos.X + dim.Width / 2, pos.Y + size.Y / 2 + dim.Height)); + text->setTextAlignment(EGUIA_CENTER, EGUIA_UPPERLEFT); + text->setVisible(false); + m_overflow_button_titles.push_back(grab_gui_element(text)); + + rect.addInternalPoint(text->getRelativePosition().UpperLeftCorner); + rect.addInternalPoint(text->getRelativePosition().LowerRightCorner); + m_overflow_button_rects.push_back(rect); + + pos.X += spacing.X; } + + m_status_text = grab_gui_element( + m_guienv->addStaticText(L"", recti(), false, false)); + m_status_text->setVisible(false); } -void TouchScreenGUI::addButton(touch_gui_button_id id, const std::string &image, const recti &rect) +void TouchControls::addButton(std::vector &buttons, touch_gui_button_id id, + const std::string &image, const recti &rect, bool visible) { IGUIImage *btn_gui_button = m_guienv->addImage(rect, nullptr, id); + btn_gui_button->setVisible(visible); load_button_texture(btn_gui_button, image, rect, m_texturesource, m_device->getVideoDriver()); - button_info &btn = m_buttons.emplace_back(); + button_info &btn = buttons.emplace_back(); btn.keycode = id_to_keycode(id); btn.gui_button = grab_gui_element(btn_gui_button); } -IGUIImage *TouchScreenGUI::makeJoystickButton(touch_gui_button_id id, - const recti &button_rect, bool visible) +void TouchControls::addToggleButton(std::vector &buttons, touch_gui_button_id id, + const std::string &image_1, const std::string &image_2, const recti &rect, bool visible) { - IGUIImage *btn_gui_button = m_guienv->addImage(button_rect, nullptr, id); + addButton(buttons, id, image_1, rect, visible); + button_info &btn = buttons.back(); + btn.toggleable = button_info::FIRST_TEXTURE; + btn.toggle_textures[0] = image_1; + btn.toggle_textures[1] = image_2; +} + +IGUIImage *TouchControls::makeButtonDirect(touch_gui_button_id id, + const recti &rect, bool visible) +{ + IGUIImage *btn_gui_button = m_guienv->addImage(rect, nullptr, id); btn_gui_button->setVisible(visible); - load_button_texture(btn_gui_button, button_image_names[id], button_rect, + load_button_texture(btn_gui_button, button_image_names[id], rect, m_texturesource, m_device->getVideoDriver()); return btn_gui_button; } -bool TouchScreenGUI::isHotbarButton(const SEvent &event) +bool TouchControls::isHotbarButton(const SEvent &event) { const v2s32 touch_pos = v2s32(event.TouchInput.X, event.TouchInput.Y); // check if hotbar item is pressed @@ -552,14 +467,14 @@ bool TouchScreenGUI::isHotbarButton(const SEvent &event) return false; } -std::optional TouchScreenGUI::getHotbarSelection() +std::optional TouchControls::getHotbarSelection() { auto selection = m_hotbar_selection; m_hotbar_selection = std::nullopt; return selection; } -void TouchScreenGUI::handleReleaseEvent(size_t pointer_id) +void TouchControls::handleReleaseEvent(size_t pointer_id) { // By the way: Android reuses pointer IDs, so m_pointer_pos[pointer_id] // will be overwritten soon anyway. @@ -570,12 +485,9 @@ void TouchScreenGUI::handleReleaseEvent(size_t pointer_id) if (buttons_handleRelease(m_buttons, pointer_id, m_device->getVideoDriver(), m_receiver, m_texturesource)) return; - - // handle buttonbars - for (AutoHideButtonBar &bar : m_buttonbars) { - if (bar.handleRelease(pointer_id)) - return; - } + if (buttons_handleRelease(m_overflow_buttons, pointer_id, m_device->getVideoDriver(), + m_receiver, m_texturesource)) + return; if (m_has_move_id && pointer_id == m_move_id) { // handle the point used for moving view @@ -584,7 +496,8 @@ void TouchScreenGUI::handleReleaseEvent(size_t pointer_id) // If m_tap_state is already set to TapState::ShortTap, we must keep // that value. Otherwise, many short taps will be ignored if you tap // very fast. - if (!m_move_has_really_moved && m_tap_state != TapState::LongTap) { + if (!m_move_has_really_moved && !m_move_prevent_short_tap && + m_tap_state != TapState::LongTap) { m_tap_state = TapState::ShortTap; } else { m_tap_state = TapState::None; @@ -601,19 +514,17 @@ void TouchScreenGUI::handleReleaseEvent(size_t pointer_id) m_joystick_status_aux1 = false; applyJoystickStatus(); - m_joystick_btn_off->setVisible(true); - m_joystick_btn_bg->setVisible(false); - m_joystick_btn_center->setVisible(false); + updateVisibility(); } else { - infostream << "TouchScreenGUI::translateEvent released unknown button: " + infostream << "TouchControls::translateEvent released unknown button: " << pointer_id << std::endl; } } -void TouchScreenGUI::translateEvent(const SEvent &event) +void TouchControls::translateEvent(const SEvent &event) { if (!m_visible) { - infostream << "TouchScreenGUI::translateEvent got event but is not visible!" + infostream << "TouchControls::translateEvent got event but is not visible!" << std::endl; return; } @@ -635,41 +546,45 @@ void TouchScreenGUI::translateEvent(const SEvent &event) m_pointer_downpos[pointer_id] = touch_pos; m_pointer_pos[pointer_id] = touch_pos; + bool prevent_short_tap = false; + IGUIElement *element = m_guienv->getRootGUIElement()->getElementFromPoint(touch_pos); + // handle overflow menu + if (!m_overflow_open) { + if (element == m_overflow_btn.get()) { + toggleOverflowMenu(); + return; + } + } else { + for (size_t i = 0; i < m_overflow_buttons.size(); i++) { + if (m_overflow_button_rects[i].isPointInside(touch_pos)) { + element = m_overflow_buttons[i].gui_button.get(); + break; + } + } + + if (buttons_handlePress(m_overflow_buttons, pointer_id, element, + m_device->getVideoDriver(), m_receiver, m_texturesource)) + return; + + toggleOverflowMenu(); + // refresh since visibility of buttons has changed + element = m_guienv->getRootGUIElement()->getElementFromPoint(touch_pos); + // continue processing, but avoid accidentally placing a node + // when closing the overflow menu + prevent_short_tap = true; + } + // handle buttons if (buttons_handlePress(m_buttons, pointer_id, element, - m_device->getVideoDriver(), m_receiver, m_texturesource)) { - for (AutoHideButtonBar &bar : m_buttonbars) - bar.deactivate(); + m_device->getVideoDriver(), m_receiver, m_texturesource)) return; - } - - // handle buttonbars - for (AutoHideButtonBar &bar : m_buttonbars) { - if (bar.handlePress(pointer_id, element)) { - for (AutoHideButtonBar &other : m_buttonbars) - if (other != bar) - other.deactivate(); - return; - } - } // handle hotbar - if (isHotbarButton(event)) { + if (isHotbarButton(event)) // already handled in isHotbarButton() - for (AutoHideButtonBar &bar : m_buttonbars) - bar.deactivate(); return; - } - - // handle non button events - for (AutoHideButtonBar &bar : m_buttonbars) { - if (bar.isActive()) { - bar.deactivate(); - return; - } - } // Select joystick when joystick tapped (fixed joystick position) or // when left 1/3 of screen dragged (free joystick position) @@ -681,9 +596,7 @@ void TouchScreenGUI::translateEvent(const SEvent &event) m_joystick_id = pointer_id; m_joystick_has_really_moved = false; - m_joystick_btn_off->setVisible(false); - m_joystick_btn_bg->setVisible(true); - m_joystick_btn_center->setVisible(true); + updateVisibility(); // If it's a fixed joystick, don't move the joystick "button". if (!m_fixed_joystick) @@ -704,6 +617,7 @@ void TouchScreenGUI::translateEvent(const SEvent &event) // DON'T reset m_tap_state here, otherwise many short taps // will be ignored if you tap very fast. m_had_move_id = true; + m_move_prevent_short_tap = prevent_short_tap; } } } @@ -780,7 +694,7 @@ void TouchScreenGUI::translateEvent(const SEvent &event) } } -void TouchScreenGUI::applyJoystickStatus() +void TouchControls::applyJoystickStatus() { if (m_joystick_triggers_aux1) { SEvent translated{}; @@ -796,12 +710,11 @@ void TouchScreenGUI::applyJoystickStatus() } } -void TouchScreenGUI::step(float dtime) +void TouchControls::step(float dtime) { // simulate keyboard repeats buttons_step(m_buttons, dtime, m_device->getVideoDriver(), m_receiver, m_texturesource); - for (AutoHideButtonBar &bar : m_buttonbars) - bar.step(dtime); + buttons_step(m_overflow_buttons, dtime, m_device->getVideoDriver(), m_receiver, m_texturesource); // joystick applyJoystickStatus(); @@ -832,58 +745,84 @@ void TouchScreenGUI::step(float dtime) m_had_move_id = false; } -void TouchScreenGUI::resetHotbarRects() +void TouchControls::resetHotbarRects() { m_hotbar_rects.clear(); } -void TouchScreenGUI::registerHotbarRect(u16 index, const recti &rect) +void TouchControls::registerHotbarRect(u16 index, const recti &rect) { m_hotbar_rects[index] = rect; } -void TouchScreenGUI::setVisible(bool visible) +void TouchControls::setVisible(bool visible) { + if (m_visible == visible) + return; + m_visible = visible; - for (auto &button : m_buttons) { - if (button.gui_button) - button.gui_button->setVisible(visible); - } - - if (m_joystick_btn_off) - m_joystick_btn_off->setVisible(visible); - - // clear all active buttons if (!visible) { - while (!m_pointer_pos.empty()) - handleReleaseEvent(m_pointer_pos.begin()->first); - for (AutoHideButtonBar &bar : m_buttonbars) { - bar.deactivate(); - bar.hide(); - } - } else { - for (AutoHideButtonBar &bar : m_buttonbars) - bar.show(); + releaseAll(); + m_overflow_open = false; + } + updateVisibility(); +} + +void TouchControls::toggleOverflowMenu() +{ + // no releaseAll here so that you can e.g. continue holding the joystick + // while the overflow menu is open + m_overflow_open = !m_overflow_open; + updateVisibility(); +} + +void TouchControls::updateVisibility() +{ + bool regular_visible = m_visible && !m_overflow_open; + for (auto &button : m_buttons) + button.gui_button->setVisible(regular_visible); + m_overflow_btn->setVisible(regular_visible); + + m_joystick_btn_off->setVisible(regular_visible && !m_has_joystick_id); + m_joystick_btn_bg->setVisible(regular_visible && m_has_joystick_id); + m_joystick_btn_center->setVisible(regular_visible && m_has_joystick_id); + + bool overflow_visible = m_visible && m_overflow_open; + m_overflow_bg->setVisible(overflow_visible); + for (auto &button : m_overflow_buttons) + button.gui_button->setVisible(overflow_visible); + for (auto &text : m_overflow_button_titles) + text->setVisible(overflow_visible); +} + +void TouchControls::releaseAll() +{ + while (!m_pointer_pos.empty()) + handleReleaseEvent(m_pointer_pos.begin()->first); + + // Release those manually too since the change initiated by + // handleReleaseEvent will only be applied later by applyContextControls. + if (m_dig_pressed) { + emitMouseEvent(EMIE_LMOUSE_LEFT_UP); + m_dig_pressed = false; + } + if (m_place_pressed) { + emitMouseEvent(EMIE_RMOUSE_LEFT_UP); + m_place_pressed = false; } } -void TouchScreenGUI::hide() +void TouchControls::hide() { - if (!m_visible) - return; - setVisible(false); } -void TouchScreenGUI::show() +void TouchControls::show() { - if (m_visible) - return; - setVisible(true); } -v2s32 TouchScreenGUI::getPointerPos() +v2s32 TouchControls::getPointerPos() { if (m_draw_crosshair) return v2s32(m_screensize.X / 2, m_screensize.Y / 2); @@ -892,7 +831,7 @@ v2s32 TouchScreenGUI::getPointerPos() return m_move_pos; } -void TouchScreenGUI::emitMouseEvent(EMOUSE_INPUT_EVENT type) +void TouchControls::emitMouseEvent(EMOUSE_INPUT_EVENT type) { v2s32 pointer_pos = getPointerPos(); @@ -907,7 +846,7 @@ void TouchScreenGUI::emitMouseEvent(EMOUSE_INPUT_EVENT type) m_receiver->OnEvent(event); } -void TouchScreenGUI::applyContextControls(const TouchInteractionMode &mode) +void TouchControls::applyContextControls(const TouchInteractionMode &mode) { // Since the pointed thing has already been determined when this function // is called, we cannot use this function to update the shootline. diff --git a/src/gui/touchscreengui.h b/src/gui/touchcontrols.h similarity index 77% rename from src/gui/touchscreengui.h rename to src/gui/touchcontrols.h index ca6c05e18..102c85f09 100644 --- a/src/gui/touchscreengui.h +++ b/src/gui/touchcontrols.h @@ -20,11 +20,11 @@ with this program; if not, write to the Free Software Foundation, Inc., #pragma once +#include "IGUIStaticText.h" #include "irrlichttypes.h" #include #include #include -#include #include #include @@ -34,6 +34,11 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "itemdef.h" #include "client/game.h" +namespace irr +{ + class IrrlichtDevice; +} + using namespace irr; using namespace irr::core; using namespace irr::gui; @@ -74,8 +79,7 @@ enum touch_gui_button_id sneak_id, zoom_id, aux1_id, - settings_starter_id, - rare_controls_starter_id, + overflow_id, // usually in the "settings bar" fly_id, @@ -99,25 +103,16 @@ enum touch_gui_button_id joystick_center_id, }; -enum autohide_button_bar_dir -{ - AHBB_Dir_Top_Bottom, - AHBB_Dir_Bottom_Top, - AHBB_Dir_Left_Right, - AHBB_Dir_Right_Left -}; #define BUTTON_REPEAT_DELAY 0.5f #define BUTTON_REPEAT_INTERVAL 0.333f -#define BUTTONBAR_HIDE_DELAY 3.0f -#define SETTINGS_BAR_Y_OFFSET 5 -#define RARE_CONTROLS_BAR_Y_OFFSET 5 // Our simulated clicks last some milliseconds so that server-side mods have a // chance to detect them via l_get_player_control. // If you tap faster than this value, the simulated clicks are of course shorter. #define SIMULATED_CLICK_DURATION_MS 50 + struct button_info { float repeat_counter; @@ -136,57 +131,11 @@ struct button_info IEventReceiver *receiver, ISimpleTextureSource *tsrc); }; -class AutoHideButtonBar + +class TouchControls { public: - AutoHideButtonBar(IrrlichtDevice *device, ISimpleTextureSource *tsrc, - touch_gui_button_id starter_id, const std::string &starter_image, - recti starter_rect, autohide_button_bar_dir dir); - - void addButton(touch_gui_button_id id, const std::string &image); - void addToggleButton(touch_gui_button_id id, - const std::string &image_1, const std::string &image_2); - - bool handlePress(size_t pointer_id, IGUIElement *element); - bool handleRelease(size_t pointer_id); - - void step(float dtime); - - void activate(); - void deactivate(); - bool isActive() { return m_active; } - - void show(); - void hide(); - - bool operator==(const AutoHideButtonBar &other) - { return m_starter.get() == other.m_starter.get(); } - bool operator!=(const AutoHideButtonBar &other) - { return m_starter.get() != other.m_starter.get(); } - -private: - irr::video::IVideoDriver *m_driver = nullptr; - IGUIEnvironment *m_guienv = nullptr; - IEventReceiver *m_receiver = nullptr; - ISimpleTextureSource *m_texturesource = nullptr; - std::shared_ptr m_starter; - std::vector m_buttons; - - v2s32 m_upper_left; - v2s32 m_lower_right; - - bool m_active = false; - bool m_visible = true; - float m_timeout = 0.0f; - autohide_button_bar_dir m_dir = AHBB_Dir_Right_Left; - - void updateVisibility(); -}; - -class TouchScreenGUI -{ -public: - TouchScreenGUI(IrrlichtDevice *device, ISimpleTextureSource *tsrc); + TouchControls(IrrlichtDevice *device, ISimpleTextureSource *tsrc); void translateEvent(const SEvent &event); void applyContextControls(const TouchInteractionMode &mode); @@ -228,6 +177,9 @@ public: void registerHotbarRect(u16 index, const recti &rect); std::optional getHotbarSelection(); + bool isStatusTextOverriden() { return m_overflow_open; } + IGUIStaticText *getStatusText() { return m_status_text.get(); } + private: IrrlichtDevice *m_device = nullptr; IGUIEnvironment *m_guienv = nullptr; @@ -237,7 +189,7 @@ private: s32 m_button_size; double m_touchscreen_threshold; u16 m_long_tap_delay; - bool m_visible = true; // is the whole touch screen gui visible + bool m_visible = true; std::unordered_map m_hotbar_rects; std::optional m_hotbar_selection = std::nullopt; @@ -262,6 +214,7 @@ private: // This is needed so that we don't miss if m_has_move_id is true for less // than one client step, i.e. press and release happen in the same step. bool m_had_move_id = false; + bool m_move_prevent_short_tap = false; bool m_has_joystick_id = false; size_t m_joystick_id; @@ -277,13 +230,30 @@ private: std::shared_ptr m_joystick_btn_center; std::vector m_buttons; + std::shared_ptr m_overflow_btn; + + bool m_overflow_open = false; + std::shared_ptr m_overflow_bg; + std::vector m_overflow_buttons; + std::vector> m_overflow_button_titles; + std::vector m_overflow_button_rects; + + std::shared_ptr m_status_text; + + void toggleOverflowMenu(); + void updateVisibility(); + void releaseAll(); // initialize a button - void addButton(touch_gui_button_id id, const std::string &image, - const recti &rect); + void addButton(std::vector &buttons, + touch_gui_button_id id, const std::string &image, + const recti &rect, bool visible=true); + void addToggleButton(std::vector &buttons, + touch_gui_button_id id, + const std::string &image_1, const std::string &image_2, + const recti &rect, bool visible=true); - // initialize a joystick button - IGUIImage *makeJoystickButton(touch_gui_button_id id, + IGUIImage *makeButtonDirect(touch_gui_button_id id, const recti &rect, bool visible); // handle pressing hotbar items @@ -300,8 +270,6 @@ private: // map to store the IDs and positions of currently pressed pointers std::unordered_map m_pointer_pos; - std::vector m_buttonbars; - v2s32 getPointerPos(); void emitMouseEvent(EMOUSE_INPUT_EVENT type); TouchInteractionMode m_last_mode = TouchInteractionMode_END; @@ -314,4 +282,4 @@ private: u64 m_place_pressed_until = 0; }; -extern TouchScreenGUI *g_touchscreengui; +extern TouchControls *g_touchcontrols; diff --git a/src/httpfetch.cpp b/src/httpfetch.cpp index 6e7e22f86..771e539e5 100644 --- a/src/httpfetch.cpp +++ b/src/httpfetch.cpp @@ -40,10 +40,17 @@ static std::unordered_map> g_httpfetch_results; static PcgRandom g_callerid_randomness; +static std::string default_user_agent() +{ + std::string ret(PROJECT_NAME_C "/"); + ret.append(g_version_string).append(" (").append(porting::get_sysinfo()).append(")"); + return ret; +} + HTTPFetchRequest::HTTPFetchRequest() : timeout(g_settings->getS32("curl_timeout")), connect_timeout(10 * 1000), - useragent(std::string(PROJECT_NAME_C "/") + g_version_hash + " (" + porting::get_sysinfo() + ")") + useragent(default_user_agent()) { timeout = std::max(timeout, MIN_HTTPFETCH_TIMEOUT_INTERACTIVE); } @@ -749,19 +756,6 @@ static void httpfetch_request_clear(u64 caller) } } -static void httpfetch_sync(const HTTPFetchRequest &fetch_request, - HTTPFetchResult &fetch_result) -{ - // Create ongoing fetch data and make a cURL handle - // Set cURL options based on HTTPFetchRequest - CurlHandlePool pool; - HTTPFetchOngoing ongoing(fetch_request, &pool); - // Do the fetch (curl_easy_perform) - CURLcode res = ongoing.start(nullptr); - // Update fetch result - fetch_result = *ongoing.complete(res); -} - bool httpfetch_sync_interruptible(const HTTPFetchRequest &fetch_request, HTTPFetchResult &fetch_result, long interval) { @@ -779,7 +773,8 @@ bool httpfetch_sync_interruptible(const HTTPFetchRequest &fetch_request, } while (!httpfetch_async_get(req.caller, fetch_result)); httpfetch_caller_free(req.caller); } else { - httpfetch_sync(fetch_request, fetch_result); + throw ModError(std::string("You have tried to execute a synchronous HTTP request on the main thread! " + "This offense shall be punished. (").append(fetch_request.url).append(")")); } return true; } diff --git a/src/hud.cpp b/src/hud.cpp index 9b336cdef..e66eff1e5 100644 --- a/src/hud.cpp +++ b/src/hud.cpp @@ -30,6 +30,7 @@ const struct EnumString es_HudElementType[] = {HUD_ELEM_IMAGE_WAYPOINT, "image_waypoint"}, {HUD_ELEM_COMPASS, "compass"}, {HUD_ELEM_MINIMAP, "minimap"}, + {HUD_ELEM_HOTBAR, "hotbar"}, {0, NULL}, }; diff --git a/src/hud.h b/src/hud.h index 5540828d4..ac79aa750 100644 --- a/src/hud.h +++ b/src/hud.h @@ -20,7 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #pragma once -#include "irrlichttypes_extrabloated.h" +#include "irrlichttypes_bloated.h" #include #include "common/c_types.h" @@ -67,7 +67,8 @@ enum HudElementType { HUD_ELEM_WAYPOINT = 4, HUD_ELEM_IMAGE_WAYPOINT = 5, HUD_ELEM_COMPASS = 6, - HUD_ELEM_MINIMAP = 7 + HUD_ELEM_MINIMAP = 7, + HUD_ELEM_HOTBAR = 8, }; enum HudElementStat : u8 { diff --git a/src/irrlicht_changes/CGUITTFont.cpp b/src/irrlicht_changes/CGUITTFont.cpp index 40d2bb405..022ab46b0 100644 --- a/src/irrlicht_changes/CGUITTFont.cpp +++ b/src/irrlicht_changes/CGUITTFont.cpp @@ -513,12 +513,15 @@ void CGUITTFont::setFontHinting(const bool enable, const bool enable_auto_hintin void CGUITTFont::draw(const core::stringw& text, const core::rect& position, video::SColor color, bool hcenter, bool vcenter, const core::rect* clip) { - draw(EnrichedString(std::wstring(text.c_str()), color), position, hcenter, vcenter, clip); + // Allow colors to work for strings that have passed through irrlicht by catching + // them here and converting them to enriched just before drawing. + EnrichedString s(text.c_str(), color); + draw(s, position, hcenter, vcenter, clip); } void CGUITTFont::draw(const EnrichedString &text, const core::rect& position, bool hcenter, bool vcenter, const core::rect* clip) { - const std::vector &colors = text.getColors(); + const auto &colors = text.getColors(); if (!Driver) return; @@ -1095,13 +1098,9 @@ core::array CGUITTFont::addTextSceneNode(const wchar_t* text // the default font material SMaterial mat; - mat.Lighting = true; mat.ZWriteEnable = video::EZW_OFF; - mat.NormalizeNormals = true; - mat.ColorMaterial = video::ECM_NONE; mat.MaterialType = use_transparency ? video::EMT_TRANSPARENT_ALPHA_CHANNEL : video::EMT_SOLID; mat.MaterialTypeParam = 0.01f; - mat.DiffuseColor = color; wchar_t current_char = 0, previous_char = 0; u32 n = 0; diff --git a/src/irrlicht_changes/static_text.h b/src/irrlicht_changes/static_text.h index 636760f6c..15a976c74 100644 --- a/src/irrlicht_changes/static_text.h +++ b/src/irrlicht_changes/static_text.h @@ -61,7 +61,7 @@ namespace gui static irr::gui::IGUIStaticText *add( irr::gui::IGUIEnvironment *guienv, - const wchar_t *text, + std::wstring_view text, const core::rect< s32 > &rectangle, bool border = false, bool wordWrap = true, @@ -204,7 +204,7 @@ inline void setStaticText(irr::gui::IGUIStaticText *static_text, const EnrichedS } } -inline void setStaticText(irr::gui::IGUIStaticText *static_text, const wchar_t *text) +inline void setStaticText(irr::gui::IGUIStaticText *static_text, std::wstring_view text) { setStaticText(static_text, EnrichedString(text, static_text->getOverrideColor())); } diff --git a/src/irrlichttypes_extrabloated.h b/src/irrlichttypes_extrabloated.h index b03ba7955..a3de2c3c8 100644 --- a/src/irrlichttypes_extrabloated.h +++ b/src/irrlichttypes_extrabloated.h @@ -24,7 +24,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #ifndef SERVER #include #include -#include #include #include #include diff --git a/src/itemdef.cpp b/src/itemdef.cpp index ad2ed4847..220c6fbb6 100644 --- a/src/itemdef.cpp +++ b/src/itemdef.cpp @@ -45,7 +45,8 @@ TouchInteraction::TouchInteraction() pointed_object = TouchInteractionMode_USER; } -TouchInteractionMode TouchInteraction::getMode(PointedThingType pointed_type) const +TouchInteractionMode TouchInteraction::getMode(const ItemDefinition &selected_def, + PointedThingType pointed_type) const { TouchInteractionMode result; switch (pointed_type) { @@ -63,7 +64,9 @@ TouchInteractionMode TouchInteraction::getMode(PointedThingType pointed_type) co } if (result == TouchInteractionMode_USER) { - if (pointed_type == POINTEDTHING_OBJECT) + if (pointed_type == POINTEDTHING_OBJECT && !selected_def.usable) + // Only apply when we're actually able to punch the object, i.e. when + // the selected item has no on_use callback defined. result = g_settings->get("touch_punch_gesture") == "long_tap" ? LONG_DIG_SHORT_PLACE : SHORT_DIG_LONG_PLACE; else diff --git a/src/itemdef.h b/src/itemdef.h index 782dad816..44fab8d91 100644 --- a/src/itemdef.h +++ b/src/itemdef.h @@ -20,7 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #pragma once -#include "irrlichttypes_extrabloated.h" +#include "irrlichttypes_bloated.h" #include #include #include @@ -71,7 +71,8 @@ struct TouchInteraction TouchInteraction(); // Returns the right mode for the pointed thing and resolves any occurrence // of TouchInteractionMode_USER into an actual mode. - TouchInteractionMode getMode(PointedThingType pointed_type) const; + TouchInteractionMode getMode(const ItemDefinition &selected_def, + PointedThingType pointed_type) const; void serialize(std::ostream &os) const; void deSerialize(std::istream &is); }; diff --git a/src/lighting.h b/src/lighting.h index 991dd6d31..f6028ade2 100644 --- a/src/lighting.h +++ b/src/lighting.h @@ -18,7 +18,7 @@ with this program; if not, write to the Free Software Foundation, Inc., */ #pragma once -#include +#include "SColor.h" using namespace irr; @@ -57,4 +57,5 @@ struct Lighting float saturation {1.0f}; float volumetric_light_strength {0.0f}; video::SColor artificial_light_color{ 255, 133, 133, 133 }; + video::SColor shadow_tint; }; diff --git a/src/log.cpp b/src/log.cpp index 98939c9bf..f7eb691ac 100644 --- a/src/log.cpp +++ b/src/log.cpp @@ -55,7 +55,7 @@ public: return m_logger.hasOutput(m_level); } - virtual void log(const std::string &buf) override { + virtual void log(std::string_view buf) override { if (!m_raw) { m_logger.log(m_level, buf); } else { @@ -106,7 +106,7 @@ thread_local LogStream dout_con(trace_target); // Android #ifdef __ANDROID__ -static unsigned int g_level_to_android[] = { +constexpr static unsigned int g_level_to_android[] = { ANDROID_LOG_INFO, // LL_NONE ANDROID_LOG_ERROR, // LL_ERROR ANDROID_LOG_WARN, // LL_WARNING @@ -116,11 +116,12 @@ static unsigned int g_level_to_android[] = { ANDROID_LOG_VERBOSE, // LL_TRACE }; -void AndroidLogOutput::logRaw(LogLevel lev, const std::string &line) +void AndroidLogOutput::logRaw(LogLevel lev, std::string_view line) { static_assert(ARRLEN(g_level_to_android) == LL_MAX, "mismatch between android and internal loglevels"); - __android_log_write(g_level_to_android[lev], PROJECT_NAME_C, line.c_str()); + __android_log_print(g_level_to_android[lev], PROJECT_NAME_C, "%.*s", + line.size(), line.data()); } #endif @@ -131,7 +132,7 @@ void AndroidLogOutput::logRaw(LogLevel lev, const std::string &line) //// Logger //// -LogLevel Logger::stringToLevel(const std::string &name) +LogLevel Logger::stringToLevel(std::string_view name) { if (name == "none") return LL_NONE; @@ -202,7 +203,7 @@ void Logger::setLevelSilenced(LogLevel lev, bool silenced) m_silenced_levels[lev] = silenced; } -void Logger::registerThread(const std::string &name) +void Logger::registerThread(std::string_view name) { std::thread::id id = std::this_thread::get_id(); MutexAutoLock lock(m_mutex); @@ -252,7 +253,7 @@ const std::string &Logger::getThreadName() return fallback_name; } -void Logger::log(LogLevel lev, const std::string &text) +void Logger::log(LogLevel lev, std::string_view text) { if (isLevelSilenced(lev)) return; @@ -268,7 +269,7 @@ void Logger::log(LogLevel lev, const std::string &text) logToOutputs(lev, line, timestamp, thread_name, text); } -void Logger::logRaw(LogLevel lev, const std::string &text) +void Logger::logRaw(LogLevel lev, std::string_view text) { if (isLevelSilenced(lev)) return; @@ -276,7 +277,7 @@ void Logger::logRaw(LogLevel lev, const std::string &text) logToOutputsRaw(lev, text); } -void Logger::logToOutputsRaw(LogLevel lev, const std::string &line) +void Logger::logToOutputsRaw(LogLevel lev, std::string_view line) { MutexAutoLock lock(m_mutex); for (size_t i = 0; i != m_outputs[lev].size(); i++) @@ -285,7 +286,7 @@ void Logger::logToOutputsRaw(LogLevel lev, const std::string &line) void Logger::logToOutputs(LogLevel lev, const std::string &combined, const std::string &time, const std::string &thread_name, - const std::string &payload_text) + std::string_view payload_text) { MutexAutoLock lock(m_mutex); for (size_t i = 0; i != m_outputs[lev].size(); i++) @@ -334,7 +335,7 @@ StreamLogOutput::StreamLogOutput(std::ostream &stream) : #endif } -void StreamLogOutput::logRaw(LogLevel lev, const std::string &line) +void StreamLogOutput::logRaw(LogLevel lev, std::string_view line) { bool colored_message = (Logger::color_mode == LOG_COLOR_ALWAYS) || (Logger::color_mode == LOG_COLOR_AUTO && is_tty); @@ -385,7 +386,7 @@ void LogOutputBuffer::updateLogLevel() m_logger.addOutputMaxLevel(this, log_level); } -void LogOutputBuffer::logRaw(LogLevel lev, const std::string &line) +void LogOutputBuffer::logRaw(LogLevel lev, std::string_view line) { std::string color; diff --git a/src/log.h b/src/log.h index 9ac4e5767..721ce58ed 100644 --- a/src/log.h +++ b/src/log.h @@ -22,7 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include #include -#include +#include #include #include #include @@ -62,14 +62,14 @@ public: LogLevelMask removeOutput(ILogOutput *out); void setLevelSilenced(LogLevel lev, bool silenced); - void registerThread(const std::string &name); + void registerThread(std::string_view name); void deregisterThread(); - void log(LogLevel lev, const std::string &text); + void log(LogLevel lev, std::string_view text); // Logs without a prefix - void logRaw(LogLevel lev, const std::string &text); + void logRaw(LogLevel lev, std::string_view text); - static LogLevel stringToLevel(const std::string &name); + static LogLevel stringToLevel(std::string_view name); static const char *getLevelLabel(LogLevel lev); bool hasOutput(LogLevel level) { @@ -83,10 +83,10 @@ public: static LogColor color_mode; private: - void logToOutputsRaw(LogLevel, const std::string &line); + void logToOutputsRaw(LogLevel, std::string_view line); void logToOutputs(LogLevel, const std::string &combined, const std::string &time, const std::string &thread_name, - const std::string &payload_text); + std::string_view payload_text); const std::string &getThreadName(); @@ -99,17 +99,17 @@ private: class ILogOutput { public: - virtual void logRaw(LogLevel, const std::string &line) = 0; + virtual void logRaw(LogLevel, std::string_view line) = 0; virtual void log(LogLevel, const std::string &combined, const std::string &time, const std::string &thread_name, - const std::string &payload_text) = 0; + std::string_view payload_text) = 0; }; class ICombinedLogOutput : public ILogOutput { public: void log(LogLevel lev, const std::string &combined, const std::string &time, const std::string &thread_name, - const std::string &payload_text) + std::string_view payload_text) { logRaw(lev, combined); } @@ -119,7 +119,7 @@ class StreamLogOutput : public ICombinedLogOutput { public: StreamLogOutput(std::ostream &stream); - void logRaw(LogLevel lev, const std::string &line); + void logRaw(LogLevel lev, std::string_view line); private: std::ostream &m_stream; @@ -130,7 +130,7 @@ class FileLogOutput : public ICombinedLogOutput { public: void setFile(const std::string &filename, s64 file_size_max); - void logRaw(LogLevel lev, const std::string &line) + void logRaw(LogLevel lev, std::string_view line) { m_stream << line << std::endl; } @@ -154,7 +154,7 @@ public: void updateLogLevel(); - void logRaw(LogLevel lev, const std::string &line); + void logRaw(LogLevel lev, std::string_view line); void clear() { @@ -190,7 +190,7 @@ private: #ifdef __ANDROID__ class AndroidLogOutput : public ICombinedLogOutput { public: - void logRaw(LogLevel lev, const std::string &line); + void logRaw(LogLevel lev, std::string_view line); }; #endif @@ -206,7 +206,7 @@ class LogTarget { public: // Must be thread-safe. These can be called from any thread. virtual bool hasOutput() = 0; - virtual void log(const std::string &buf) = 0; + virtual void log(std::string_view buf) = 0; }; @@ -304,7 +304,7 @@ public: return m_target.hasOutput(); } - void internalFlush(const std::string &buf) { + void internalFlush(std::string_view buf) { m_target.log(buf); } diff --git a/src/main.cpp b/src/main.cpp index 7474ae84c..30db81aa9 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -531,7 +531,6 @@ static bool setup_log_params(const Settings &cmd_args) if (cmd_args.getFlag("trace")) { dstream << _("Enabling trace level debug output") << std::endl; g_logger.addOutput(&stderr_output, LL_TRACE); - socket_enable_debug_output = true; } return true; @@ -1095,13 +1094,9 @@ static bool run_dedicated_server(const GameParams &game_params, const Settings & if (cmd_args.exists("terminal")) { #if USE_CURSES - bool name_ok = true; std::string admin_nick = g_settings->get("name"); - name_ok = name_ok && !admin_nick.empty(); - name_ok = name_ok && string_allowed(admin_nick, PLAYERNAME_ALLOWED_CHARS); - - if (!name_ok) { + if (!is_valid_player_name(admin_nick)) { if (admin_nick.empty()) { errorstream << "No name given for admin. " << "Please check your minetest.conf that it " @@ -1110,7 +1105,8 @@ static bool run_dedicated_server(const GameParams &game_params, const Settings & } else { errorstream << "Name for admin '" << admin_nick << "' is not valid. " - << "Please check that it only contains allowed characters. " + << "Please check that it only contains allowed characters " + << "and that it is at most 20 characters long. " << "Valid characters are: " << PLAYERNAME_ALLOWED_CHARS_USER_EXPL << std::endl; } diff --git a/src/mapgen/cavegen.cpp b/src/mapgen/cavegen.cpp index 47272142f..e6ab66980 100644 --- a/src/mapgen/cavegen.cpp +++ b/src/mapgen/cavegen.cpp @@ -82,8 +82,6 @@ void CavesNoiseIntersection::generateCaves(MMVManip *vm, const v3s16 &em = vm->m_area.getExtent(); u32 index2d = 0; // Biomemap index - s16 *biome_transitions = m_bmgn->getBiomeTransitions(); - for (s16 z = nmin.Z; z <= nmax.Z; z++) for (s16 x = nmin.X; x <= nmax.X; x++, index2d++) { bool column_is_open = false; // Is column open to overground @@ -101,8 +99,7 @@ void CavesNoiseIntersection::generateCaves(MMVManip *vm, u16 depth_riverbed = biome->depth_riverbed; u16 nplaced = 0; - int cur_biome_depth = 0; - s16 biome_y_min = biome_transitions[cur_biome_depth]; + s16 biome_y_min = m_bmgn->getNextTransitionY(nmax.Y); // Don't excavate the overgenerated stone at nmax.Y + 1, // this creates a 'roof' over the tunnel, preventing light in @@ -114,15 +111,12 @@ void CavesNoiseIntersection::generateCaves(MMVManip *vm, // We need this check to make sure that biomes don't generate too far down if (y < biome_y_min) { biome = m_bmgn->getBiomeAtIndex(index2d, v3s16(x, y, z)); + biome_y_min = m_bmgn->getNextTransitionY(y); - // Finding the height of the next biome - // On first iteration this may loop a couple times after than it should just run once - while (y < biome_y_min) { - biome_y_min = biome_transitions[++cur_biome_depth]; + if (x == nmin.X && z == nmin.Z && false) { + dstream << "cavegen: biome at " << y << " is " << biome->name + << ", next at " << biome_y_min << std::endl; } - - /*if (x == nmin.X && z == nmin.Z) - printf("Cave: check @ %i -> %s -> again at %i\n", y, biome->name.c_str(), biome_y_min);*/ } content_t c = vm->m_data[vi].getContent(); diff --git a/src/mapgen/mapgen.cpp b/src/mapgen/mapgen.cpp index 80ffebc9e..0b821e02e 100644 --- a/src/mapgen/mapgen.cpp +++ b/src/mapgen/mapgen.cpp @@ -649,8 +649,6 @@ void MapgenBasic::generateBiomes() noise_filler_depth->perlinMap2D(node_min.X, node_min.Z); - s16 *biome_transitions = biomegen->getBiomeTransitions(); - for (s16 z = node_min.Z; z <= node_max.Z; z++) for (s16 x = node_min.X; x <= node_max.X; x++, index++) { Biome *biome = NULL; @@ -661,8 +659,7 @@ void MapgenBasic::generateBiomes() u16 depth_riverbed = 0; u32 vi = vm->m_area.index(x, node_max.Y, z); - int cur_biome_depth = 0; - s16 biome_y_min = biome_transitions[cur_biome_depth]; + s16 biome_y_min = biomegen->getNextTransitionY(node_max.Y); // Check node at base of mapchunk above, either a node of a previously // generated mapchunk or if not, a node of overgenerated base terrain. @@ -695,15 +692,7 @@ void MapgenBasic::generateBiomes() if (!biome || y < biome_y_min) { // (Re)calculate biome biome = biomegen->getBiomeAtIndex(index, v3s16(x, y, z)); - - // Finding the height of the next biome - // On first iteration this may loop a couple times after than it should just run once - while (y < biome_y_min) { - biome_y_min = biome_transitions[++cur_biome_depth]; - } - - /*if (x == node_min.X && z == node_min.Z) - printf("Map: check @ %i -> %s -> again at %i\n", y, biome->name.c_str(), biome_y_min);*/ + biome_y_min = biomegen->getNextTransitionY(y); } // Add biome to biomemap at first stone surface detected diff --git a/src/mapgen/mapgen.h b/src/mapgen/mapgen.h index d2d21a9fc..7a3808da3 100644 --- a/src/mapgen/mapgen.h +++ b/src/mapgen/mapgen.h @@ -167,6 +167,7 @@ private: */ class Mapgen { public: + // Seed used for noises (truncated from the map seed) s32 seed = 0; int water_level = 0; int mapgen_limit = 0; @@ -180,6 +181,7 @@ public: EmergeParams *m_emerge = nullptr; const NodeDefManager *ndef = nullptr; + // Chunk-specific seed used to place ores and decorations u32 blockseed; s16 *heightmap = nullptr; biome_t *biomemap = nullptr; diff --git a/src/mapgen/mg_biome.cpp b/src/mapgen/mg_biome.cpp index 83ecbd691..b270a5413 100644 --- a/src/mapgen/mg_biome.cpp +++ b/src/mapgen/mg_biome.cpp @@ -149,47 +149,36 @@ BiomeGenOriginal::BiomeGenOriginal(BiomeManager *biomemgr, // is disabled. memset(biomemap, 0, sizeof(biome_t) * m_csize.X * m_csize.Z); - // Calculating the bounding position of each biome so we know when we might switch - // First gathering all heights where we might switch - std::vector temp_transition_heights; - temp_transition_heights.reserve(m_bmgr->getNumObjects() * 2); + // Calculate cache of Y transition points + std::vector values; + values.reserve(m_bmgr->getNumObjects() * 2); for (size_t i = 0; i < m_bmgr->getNumObjects(); i++) { Biome *b = (Biome *)m_bmgr->getRaw(i); - temp_transition_heights.push_back(b->max_pos.Y); - temp_transition_heights.push_back(b->min_pos.Y); + values.push_back(b->max_pos.Y); + values.push_back(b->min_pos.Y); } - // Sorting the biome transition points - std::sort(temp_transition_heights.begin(), temp_transition_heights.end(), std::greater()); + std::sort(values.begin(), values.end(), std::greater<>()); + values.erase(std::unique(values.begin(), values.end()), values.end()); - // Getting rid of duplicate biome transition points - s16 last = temp_transition_heights[0]; - size_t out_pos = 1; - for (size_t i = 1; i < temp_transition_heights.size(); i++){ - if (temp_transition_heights[i] != last) { - last = temp_transition_heights[i]; - temp_transition_heights[out_pos++] = last; - } - } - - biome_transitions = new s16[out_pos]; - memcpy(biome_transitions, temp_transition_heights.data(), sizeof(s16) * out_pos); + m_transitions_y = std::move(values); } BiomeGenOriginal::~BiomeGenOriginal() { delete []biomemap; - delete []biome_transitions; delete noise_heat; delete noise_humidity; delete noise_heat_blend; delete noise_humidity_blend; } -s16* BiomeGenOriginal::getBiomeTransitions() const +s16 BiomeGenOriginal::getNextTransitionY(s16 y) const { - return biome_transitions; + // Find first value that is less than y using binary search + auto it = std::lower_bound(m_transitions_y.begin(), m_transitions_y.end(), y, std::greater_equal<>()); + return (it == m_transitions_y.end()) ? S16_MIN : *it; } BiomeGen *BiomeGenOriginal::clone(BiomeManager *biomemgr) const diff --git a/src/mapgen/mg_biome.h b/src/mapgen/mg_biome.h index 567a0fe81..389b36ee9 100644 --- a/src/mapgen/mg_biome.h +++ b/src/mapgen/mg_biome.h @@ -128,11 +128,14 @@ public: // Same as above, but uses a raw numeric index correlating to the (x,z) position. virtual Biome *getBiomeAtIndex(size_t index, v3s16 pos) const = 0; - virtual s16 *getBiomeTransitions() const = 0; + // Returns the next lower y position at which the biome could change. + // You can use this to optimize calls to getBiomeAtIndex(). + virtual s16 getNextTransitionY(s16 y) const { + return y == S16_MIN ? y : (y - 1); + }; // Result of calcBiomes bulk computation. biome_t *biomemap = nullptr; - s16 *biome_transitions = nullptr; protected: BiomeManager *m_bmgr = nullptr; @@ -167,7 +170,7 @@ struct BiomeParamsOriginal : public BiomeParams { NoiseParams np_humidity_blend; }; -class BiomeGenOriginal : public BiomeGen { +class BiomeGenOriginal final : public BiomeGen { public: BiomeGenOriginal(BiomeManager *biomemgr, const BiomeParamsOriginal *params, v3s16 chunksize); @@ -189,7 +192,7 @@ public: Biome *getBiomeAtIndex(size_t index, v3s16 pos) const; Biome *calcBiomeFromNoise(float heat, float humidity, v3s16 pos) const; - s16 *getBiomeTransitions() const; + s16 getNextTransitionY(s16 y) const; float *heatmap; float *humidmap; @@ -201,6 +204,9 @@ private: Noise *noise_humidity; Noise *noise_heat_blend; Noise *noise_humidity_blend; + + // ordered descending + std::vector m_transitions_y; }; diff --git a/src/mapnode.cpp b/src/mapnode.cpp index 6fe169e90..4e3c60192 100644 --- a/src/mapnode.cpp +++ b/src/mapnode.cpp @@ -17,7 +17,7 @@ with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#include "irrlichttypes_extrabloated.h" +#include "irrlichttypes_bloated.h" #include "mapnode.h" #include "porting.h" #include "nodedef.h" diff --git a/src/migratesettings.h b/src/migratesettings.h index 60435f18a..d4488702f 100644 --- a/src/migratesettings.h +++ b/src/migratesettings.h @@ -11,4 +11,12 @@ void migrate_settings() g_settings->getBool("opaque_water") ? "false" : "true"); g_settings->remove("opaque_water"); } + + // Converts enable_touch to touch_controls/touch_gui + if (g_settings->existsLocal("enable_touch")) { + bool value = g_settings->getBool("enable_touch"); + g_settings->setBool("touch_controls", value); + g_settings->setBool("touch_gui", value); + g_settings->remove("enable_touch"); + } } diff --git a/src/nameidmapping.h b/src/nameidmapping.h index 47f424cbc..b200e3e7c 100644 --- a/src/nameidmapping.h +++ b/src/nameidmapping.h @@ -23,7 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include #include -#include "irrlichttypes_bloated.h" +#include "irrlichttypes.h" typedef std::unordered_map IdToNameMap; typedef std::unordered_map NameToIdMap; diff --git a/src/network/CMakeLists.txt b/src/network/CMakeLists.txt index d2e2f52e9..8f17e58af 100644 --- a/src/network/CMakeLists.txt +++ b/src/network/CMakeLists.txt @@ -1,10 +1,11 @@ set(common_network_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/address.cpp ${CMAKE_CURRENT_SOURCE_DIR}/connection.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/connectionthreads.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/mtp/impl.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/mtp/threads.cpp ${CMAKE_CURRENT_SOURCE_DIR}/networkpacket.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/serverpackethandler.cpp ${CMAKE_CURRENT_SOURCE_DIR}/serveropcodes.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/serverpackethandler.cpp ${CMAKE_CURRENT_SOURCE_DIR}/socket.cpp PARENT_SCOPE ) diff --git a/src/network/clientopcodes.cpp b/src/network/clientopcodes.cpp index d426d3fe7..7d0840754 100644 --- a/src/network/clientopcodes.cpp +++ b/src/network/clientopcodes.cpp @@ -81,7 +81,7 @@ const ToClientCommandHandler toClientCommandTable[TOCLIENT_NUM_MSG_TYPES] = { "TOCLIENT_MOVE_PLAYER", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_MovePlayer }, // 0x34 { "TOCLIENT_ACCESS_DENIED_LEGACY", TOCLIENT_STATE_NOT_CONNECTED, &Client::handleCommand_AccessDenied }, // 0x35 { "TOCLIENT_FOV", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_Fov }, // 0x36 - { "TOCLIENT_DEATHSCREEN", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_DeathScreen }, // 0x37 + { "TOCLIENT_DEATHSCREEN_LEGACY", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_DeathScreenLegacy }, // 0x37 { "TOCLIENT_MEDIA", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_Media }, // 0x38 null_command_handler, { "TOCLIENT_NODEDEF", TOCLIENT_STATE_CONNECTED, &Client::handleCommand_NodeDef }, // 0x3a @@ -198,7 +198,7 @@ const ServerCommandFactory serverCommandFactoryTable[TOSERVER_NUM_MSG_TYPES] = { "TOSERVER_DAMAGE", 0, true }, // 0x35 null_command_factory, // 0x36 { "TOSERVER_PLAYERITEM", 0, true }, // 0x37 - { "TOSERVER_RESPAWN", 0, true }, // 0x38 + { "TOSERVER_RESPAWN_LEGACY", 0, true }, // 0x38 { "TOSERVER_INTERACT", 0, true }, // 0x39 { "TOSERVER_REMOVED_SOUNDS", 2, true }, // 0x3a { "TOSERVER_NODEMETA_FIELDS", 0, true }, // 0x3b diff --git a/src/network/clientpackethandler.cpp b/src/network/clientpackethandler.cpp index 9fb0c56ad..d5c9067e9 100644 --- a/src/network/clientpackethandler.cpp +++ b/src/network/clientpackethandler.cpp @@ -48,6 +48,22 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "particles.h" #include +const char *accessDeniedStrings[SERVER_ACCESSDENIED_MAX] = { + N_("Invalid password"), + N_("Your client sent something the server didn't expect. Try reconnecting or updating your client."), + N_("The server is running in singleplayer mode. You cannot connect."), + N_("Your client's version is not supported.\nPlease contact the server administrator."), + N_("Player name contains disallowed characters"), + N_("Player name not allowed"), + N_("Too many users"), + N_("Empty passwords are disallowed. Set a password and try again."), + N_("Another client is connected with this name. If your client closed unexpectedly, try again in a minute."), + N_("Internal server error"), + "", + N_("Server shutting down"), + N_("The server has experienced an internal error. You will now be disconnected.") +}; + void Client::handleCommand_Deprecated(NetworkPacket* pkt) { infostream << "Got deprecated command " @@ -62,11 +78,11 @@ void Client::handleCommand_Hello(NetworkPacket* pkt) u8 serialization_ver; u16 proto_ver; - u16 compression_mode; + u16 unused_compression_mode; u32 auth_mechs; - std::string username_legacy; // for case insensitivity - *pkt >> serialization_ver >> compression_mode >> proto_ver - >> auth_mechs >> username_legacy; + std::string unused; + *pkt >> serialization_ver >> unused_compression_mode >> proto_ver + >> auth_mechs >> unused; // Chose an auth method we support AuthMechanism chosen_auth_mechanism = choseAuthMech(auth_mechs); @@ -75,7 +91,6 @@ void Client::handleCommand_Hello(NetworkPacket* pkt) << "serialization_ver=" << (u32)serialization_ver << ", auth_mechs=" << auth_mechs << ", proto_ver=" << proto_ver - << ", compression_mode=" << compression_mode << ". Doing auth with mech " << chosen_auth_mechanism << std::endl; if (!ser_ver_supported(serialization_ver)) { @@ -87,10 +102,6 @@ void Client::handleCommand_Hello(NetworkPacket* pkt) m_server_ser_ver = serialization_ver; m_proto_ver = proto_ver; - //TODO verify that username_legacy matches sent username, only - // differs in casing (make both uppercase and compare) - // This is only necessary though when we actually want to add casing support - if (m_chosen_auth_mech != AUTH_MECHANISM_NONE) { // we received a TOCLIENT_HELLO while auth was already going on errorstream << "Client: TOCLIENT_HELLO while auth was already going on" @@ -193,7 +204,6 @@ void Client::handleCommand_AccessDenied(NetworkPacket* pkt) // to be processed even if the serialization format has // not been agreed yet, the same as TOCLIENT_INIT. m_access_denied = true; - m_access_denied_reason = "Unknown"; if (pkt->getCommand() != TOCLIENT_ACCESS_DENIED) { // Legacy code from 0.4.12 and older but is still used @@ -212,29 +222,23 @@ void Client::handleCommand_AccessDenied(NetworkPacket* pkt) u8 denyCode; *pkt >> denyCode; - if (denyCode == SERVER_ACCESSDENIED_SHUTDOWN || - denyCode == SERVER_ACCESSDENIED_CRASH) { + if (pkt->getRemainingBytes() > 0) *pkt >> m_access_denied_reason; - if (m_access_denied_reason.empty()) - m_access_denied_reason = accessDeniedStrings[denyCode]; + + if (m_access_denied_reason.empty()) { + if (denyCode >= SERVER_ACCESSDENIED_MAX) { + m_access_denied_reason = gettext("Unknown disconnect reason."); + } else if (denyCode != SERVER_ACCESSDENIED_CUSTOM_STRING) { + m_access_denied_reason = gettext(accessDeniedStrings[denyCode]); + } + } + + if (denyCode == SERVER_ACCESSDENIED_TOO_MANY_USERS) { + m_access_denied_reconnect = true; + } else if (pkt->getRemainingBytes() > 0) { u8 reconnect; *pkt >> reconnect; m_access_denied_reconnect = reconnect & 1; - } else if (denyCode == SERVER_ACCESSDENIED_CUSTOM_STRING) { - *pkt >> m_access_denied_reason; - } else if (denyCode == SERVER_ACCESSDENIED_TOO_MANY_USERS) { - m_access_denied_reason = accessDeniedStrings[denyCode]; - m_access_denied_reconnect = true; - } else if (denyCode < SERVER_ACCESSDENIED_MAX) { - m_access_denied_reason = accessDeniedStrings[denyCode]; - } else { - // Allow us to add new error messages to the - // protocol without raising the protocol version, if we want to. - // Until then (which may be never), this is outside - // of the defined protocol. - *pkt >> m_access_denied_reason; - if (m_access_denied_reason.empty()) - m_access_denied_reason = "Unknown"; } } @@ -471,6 +475,8 @@ void Client::handleCommand_ActiveObjectRemoveAdd(NetworkPacket* pkt) for (u16 i = 0; i < removed_count; i++) { *pkt >> id; m_env.removeActiveObject(id); + // Object-attached sounds MUST NOT be removed here because they might + // have started to play immediately before the entity was removed. } // Read added objects @@ -647,20 +653,10 @@ void Client::handleCommand_MovePlayerRel(NetworkPacket *pkt) player->addPosition(added_pos); } -void Client::handleCommand_DeathScreen(NetworkPacket* pkt) +void Client::handleCommand_DeathScreenLegacy(NetworkPacket* pkt) { - bool set_camera_point_target; - v3f camera_point_target; - - *pkt >> set_camera_point_target; - *pkt >> camera_point_target; - ClientEvent *event = new ClientEvent(); - event->type = CE_DEATHSCREEN; - event->deathscreen.set_camera_point_target = set_camera_point_target; - event->deathscreen.camera_point_target_x = camera_point_target.X; - event->deathscreen.camera_point_target_y = camera_point_target.Y; - event->deathscreen.camera_point_target_z = camera_point_target.Z; + event->type = CE_DEATHSCREEN_LEGACY; m_client_event_queue.push(event); } @@ -1470,6 +1466,7 @@ void Client::handleCommand_CloudParams(NetworkPacket* pkt) f32 density; video::SColor color_bright; video::SColor color_ambient; + video::SColor color_shadow = video::SColor(255, 204, 204, 204); f32 height; f32 thickness; v2f speed; @@ -1477,6 +1474,10 @@ void Client::handleCommand_CloudParams(NetworkPacket* pkt) *pkt >> density >> color_bright >> color_ambient >> height >> thickness >> speed; + if (pkt->getRemainingBytes() >= 4) { + *pkt >> color_shadow; + } + ClientEvent *event = new ClientEvent(); event->type = CE_CLOUD_PARAMS; event->cloud_params.density = density; @@ -1485,6 +1486,7 @@ void Client::handleCommand_CloudParams(NetworkPacket* pkt) // we avoid using new() and delete() for no good reason event->cloud_params.color_bright = color_bright.color; event->cloud_params.color_ambient = color_ambient.color; + event->cloud_params.color_shadow = color_shadow.color; event->cloud_params.height = height; event->cloud_params.thickness = thickness; // same here: deconstruct to skip constructor @@ -1817,4 +1819,6 @@ void Client::handleCommand_SetLighting(NetworkPacket *pkt) *pkt >> lighting.volumetric_light_strength; if (pkt->getRemainingBytes() >= 4) *pkt >> lighting.artificial_light_color; + if (pkt->getRemainingBytes() >= 4) + *pkt >> lighting.shadow_tint; } diff --git a/src/network/connection.cpp b/src/network/connection.cpp index 00b4fe4b0..3ffd06fc7 100644 --- a/src/network/connection.cpp +++ b/src/network/connection.cpp @@ -1,1672 +1,17 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola +// Minetest +// SPDX-License-Identifier: LGPL-2.1-or-later -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ - -#include -#include -#include -#include -#include "connection_internal.h" -#include "serialization.h" -#include "log.h" -#include "porting.h" -#include "network/connectionthreads.h" -#include "network/networkpacket.h" -#include "network/peerhandler.h" -#include "util/serialize.h" -#include "util/numeric.h" -#include "util/string.h" -#include "settings.h" -#include "profiler.h" +#include "network/connection.h" +#include "network/mtp/impl.h" namespace con { -/******************************************************************************/ -/* defines used for debugging and profiling */ -/******************************************************************************/ -#ifdef NDEBUG - #define PROFILE(a) -#else - #define PROFILE(a) a -#endif - -// TODO: Clean this up. -#define LOG(a) a - -#define PING_TIMEOUT 5.0f - -// exponent base -#define RESEND_SCALE_BASE 1.5f - -// since spacing is exponential the numbers here shouldn't be too high -// (it's okay to start out quick) -#define RESEND_TIMEOUT_MIN 0.1f -#define RESEND_TIMEOUT_MAX 2.0f -#define RESEND_TIMEOUT_FACTOR 2 - -u16 BufferedPacket::getSeqnum() const -{ - if (size() < BASE_HEADER_SIZE + 3) - return 0; // should never happen - - return readU16(&data[BASE_HEADER_SIZE + 1]); -} - -BufferedPacketPtr makePacket(const Address &address, const SharedBuffer &data, - u32 protocol_id, session_t sender_peer_id, u8 channel) -{ - u32 packet_size = data.getSize() + BASE_HEADER_SIZE; - - auto p = std::make_shared(packet_size); - p->address = address; - - writeU32(&p->data[0], protocol_id); - writeU16(&p->data[4], sender_peer_id); - writeU8(&p->data[6], channel); - - memcpy(&p->data[BASE_HEADER_SIZE], *data, data.getSize()); - - return p; -} - -SharedBuffer makeOriginalPacket(const SharedBuffer &data) -{ - u32 header_size = 1; - u32 packet_size = data.getSize() + header_size; - SharedBuffer b(packet_size); - - writeU8(&(b[0]), PACKET_TYPE_ORIGINAL); - if (data.getSize() > 0) { - memcpy(&(b[header_size]), *data, data.getSize()); - } - return b; -} - -// Split data in chunks and add TYPE_SPLIT headers to them -void makeSplitPacket(const SharedBuffer &data, u32 chunksize_max, u16 seqnum, - std::list> *chunks) -{ - // Chunk packets, containing the TYPE_SPLIT header - const u32 chunk_header_size = 7; - const u32 maximum_data_size = chunksize_max - chunk_header_size; - u32 start = 0, end = 0; - u16 chunk_num = 0; - do { - end = start + maximum_data_size - 1; - if (end > data.getSize() - 1) - end = data.getSize() - 1; - - u32 payload_size = end - start + 1; - u32 packet_size = chunk_header_size + payload_size; - - SharedBuffer chunk(packet_size); - - writeU8(&chunk[0], PACKET_TYPE_SPLIT); - writeU16(&chunk[1], seqnum); - // [3] u16 chunk_count is written at next stage - writeU16(&chunk[5], chunk_num); - memcpy(&chunk[chunk_header_size], &data[start], payload_size); - - chunks->push_back(chunk); - - start = end + 1; - sanity_check(chunk_num < 0xFFFF); // overflow - chunk_num++; - } - while (end != data.getSize() - 1); - - for (auto &chunk : *chunks) { - // Write chunk_count - writeU16(&chunk[3], chunk_num); - } -} - -void makeAutoSplitPacket(const SharedBuffer &data, u32 chunksize_max, - u16 &split_seqnum, std::list> *list) -{ - u32 original_header_size = 1; - - if (data.getSize() + original_header_size > chunksize_max) { - makeSplitPacket(data, chunksize_max, split_seqnum, list); - split_seqnum++; - return; - } - - list->push_back(makeOriginalPacket(data)); -} - -SharedBuffer makeReliablePacket(const SharedBuffer &data, u16 seqnum) -{ - u32 header_size = 3; - u32 packet_size = data.getSize() + header_size; - SharedBuffer b(packet_size); - - writeU8(&b[0], PACKET_TYPE_RELIABLE); - writeU16(&b[1], seqnum); - - memcpy(&b[header_size], *data, data.getSize()); - - return b; -} - -/* - ReliablePacketBuffer -*/ - -void ReliablePacketBuffer::print() -{ - MutexAutoLock listlock(m_list_mutex); - LOG(dout_con<<"Dump of ReliablePacketBuffer:" << std::endl); - unsigned int index = 0; - for (BufferedPacketPtr &packet : m_list) { - LOG(dout_con<getSeqnum() << std::endl); - index++; - } -} - -bool ReliablePacketBuffer::empty() -{ - MutexAutoLock listlock(m_list_mutex); - return m_list.empty(); -} - -u32 ReliablePacketBuffer::size() -{ - MutexAutoLock listlock(m_list_mutex); - return m_list.size(); -} - -ReliablePacketBuffer::FindResult ReliablePacketBuffer::findPacketNoLock(u16 seqnum) -{ - for (auto it = m_list.begin(); it != m_list.end(); ++it) { - if ((*it)->getSeqnum() == seqnum) - return it; - } - return m_list.end(); -} - -bool ReliablePacketBuffer::getFirstSeqnum(u16& result) -{ - MutexAutoLock listlock(m_list_mutex); - if (m_list.empty()) - return false; - result = m_list.front()->getSeqnum(); - return true; -} - -BufferedPacketPtr ReliablePacketBuffer::popFirst() -{ - MutexAutoLock listlock(m_list_mutex); - if (m_list.empty()) - throw NotFoundException("Buffer is empty"); - - BufferedPacketPtr p(m_list.front()); - m_list.pop_front(); - - if (m_list.empty()) { - m_oldest_non_answered_ack = 0; - } else { - m_oldest_non_answered_ack = m_list.front()->getSeqnum(); - } - return p; -} - -BufferedPacketPtr ReliablePacketBuffer::popSeqnum(u16 seqnum) +IConnection *createMTP(float timeout, bool ipv6, PeerHandler *handler) { - MutexAutoLock listlock(m_list_mutex); - auto r = findPacketNoLock(seqnum); - if (r == m_list.end()) { - LOG(dout_con<<"Sequence number: " << seqnum - << " not found in reliable buffer"<getSeqnum(); - } - return p; + // safe minimum across internet networks for ipv4 and ipv6 + constexpr u32 MAX_PACKET_SIZE = 512; + return new con::Connection(MAX_PACKET_SIZE, timeout, ipv6, handler); } -void ReliablePacketBuffer::insert(BufferedPacketPtr &p_ptr, u16 next_expected) -{ - MutexAutoLock listlock(m_list_mutex); - const BufferedPacket &p = *p_ptr; - - if (p.size() < BASE_HEADER_SIZE + 3) { - errorstream << "ReliablePacketBuffer::insert(): Invalid data size for " - "reliable packet" << std::endl; - return; - } - u8 type = readU8(&p.data[BASE_HEADER_SIZE + 0]); - if (type != PACKET_TYPE_RELIABLE) { - errorstream << "ReliablePacketBuffer::insert(): type is not reliable" - << std::endl; - return; - } - const u16 seqnum = p.getSeqnum(); - - if (!seqnum_in_window(seqnum, next_expected, MAX_RELIABLE_WINDOW_SIZE)) { - errorstream << "ReliablePacketBuffer::insert(): seqnum is outside of " - "expected window " << std::endl; - return; - } - if (seqnum == next_expected) { - errorstream << "ReliablePacketBuffer::insert(): seqnum is next expected" - << std::endl; - return; - } - - sanity_check(m_list.size() <= SEQNUM_MAX); // FIXME: Handle the error? - - // Find the right place for the packet and insert it there - // If list is empty, just add it - if (m_list.empty()) { - m_list.push_back(p_ptr); - m_oldest_non_answered_ack = seqnum; - // Done. - return; - } - - // Otherwise find the right place - auto it = m_list.begin(); - // Find the first packet in the list which has a higher seqnum - u16 s = (*it)->getSeqnum(); - - /* case seqnum is smaller then next_expected seqnum */ - /* this is true e.g. on wrap around */ - if (seqnum < next_expected) { - while(((s < seqnum) || (s >= next_expected)) && (it != m_list.end())) { - ++it; - if (it != m_list.end()) - s = (*it)->getSeqnum(); - } - } - /* non wrap around case (at least for incoming and next_expected */ - else - { - while(((s < seqnum) && (s >= next_expected)) && (it != m_list.end())) { - ++it; - if (it != m_list.end()) - s = (*it)->getSeqnum(); - } - } - - if (s == seqnum) { - /* nothing to do this seems to be a resent packet */ - /* for paranoia reason data should be compared */ - auto &i = *it; - if ( - (i->getSeqnum() != seqnum) || - (i->size() != p.size()) || - (i->address != p.address) - ) - { - /* if this happens your maximum transfer window may be to big */ - char buf[200]; - snprintf(buf, sizeof(buf), - "Duplicated seqnum %d non matching packet detected:\n", - seqnum); - warningstream << buf; - snprintf(buf, sizeof(buf), - "Old: seqnum: %05d size: %04zu, address: %s\n", - i->getSeqnum(), i->size(), - i->address.serializeString().c_str()); - warningstream << buf; - snprintf(buf, sizeof(buf), - "New: seqnum: %05d size: %04zu, address: %s\n", - p.getSeqnum(), p.size(), - p.address.serializeString().c_str()); - warningstream << buf << std::flush; - throw IncomingDataCorruption("duplicated packet isn't same as original one"); - } - } - /* insert or push back */ - else if (it != m_list.end()) { - m_list.insert(it, p_ptr); - } else { - m_list.push_back(p_ptr); - } - - /* update last packet number */ - m_oldest_non_answered_ack = m_list.front()->getSeqnum(); } - -void ReliablePacketBuffer::incrementTimeouts(float dtime) -{ - MutexAutoLock listlock(m_list_mutex); - for (auto &packet : m_list) { - packet->time += dtime; - packet->totaltime += dtime; - } -} - -u32 ReliablePacketBuffer::getTimedOuts(float timeout) -{ - MutexAutoLock listlock(m_list_mutex); - u32 count = 0; - for (auto &packet : m_list) { - if (packet->totaltime >= timeout) - count++; - } - return count; -} - -std::vector> - ReliablePacketBuffer::getResend(float timeout, u32 max_packets) -{ - MutexAutoLock listlock(m_list_mutex); - std::vector> timed_outs; - for (auto &packet : m_list) { - // resend time scales exponentially with each cycle - const float pkt_timeout = timeout * powf(RESEND_SCALE_BASE, packet->resend_count); - - if (packet->time < pkt_timeout) - continue; - - // caller will resend packet so reset time and increase counter - packet->time = 0.0f; - packet->resend_count++; - - timed_outs.emplace_back(packet); - - if (timed_outs.size() >= max_packets) - break; - } - return timed_outs; -} - -/* - IncomingSplitPacket -*/ - -bool IncomingSplitPacket::insert(u32 chunk_num, SharedBuffer &chunkdata) -{ - sanity_check(chunk_num < chunk_count); - - // If chunk already exists, ignore it. - // Sometimes two identical packets may arrive when there is network - // lag and the server re-sends stuff. - if (chunks.find(chunk_num) != chunks.end()) - return false; - - // Set chunk data in buffer - chunks[chunk_num] = chunkdata; - - return true; -} - -SharedBuffer IncomingSplitPacket::reassemble() -{ - sanity_check(allReceived()); - - // Calculate total size - u32 totalsize = 0; - for (const auto &chunk : chunks) - totalsize += chunk.second.getSize(); - - SharedBuffer fulldata(totalsize); - - // Copy chunks to data buffer - u32 start = 0; - for (u32 chunk_i = 0; chunk_i < chunk_count; chunk_i++) { - const SharedBuffer &buf = chunks[chunk_i]; - memcpy(&fulldata[start], *buf, buf.getSize()); - start += buf.getSize(); - } - - return fulldata; -} - -/* - IncomingSplitBuffer -*/ - -IncomingSplitBuffer::~IncomingSplitBuffer() -{ - MutexAutoLock listlock(m_map_mutex); - for (auto &i : m_buf) { - delete i.second; - } -} - -SharedBuffer IncomingSplitBuffer::insert(BufferedPacketPtr &p_ptr, bool reliable) -{ - MutexAutoLock listlock(m_map_mutex); - const BufferedPacket &p = *p_ptr; - - u32 headersize = BASE_HEADER_SIZE + 7; - if (p.size() < headersize) { - errorstream << "Invalid data size for split packet" << std::endl; - return SharedBuffer(); - } - u8 type = readU8(&p.data[BASE_HEADER_SIZE+0]); - u16 seqnum = readU16(&p.data[BASE_HEADER_SIZE+1]); - u16 chunk_count = readU16(&p.data[BASE_HEADER_SIZE+3]); - u16 chunk_num = readU16(&p.data[BASE_HEADER_SIZE+5]); - - if (type != PACKET_TYPE_SPLIT) { - errorstream << "IncomingSplitBuffer::insert(): type is not split" - << std::endl; - return SharedBuffer(); - } - if (chunk_num >= chunk_count) { - errorstream << "IncomingSplitBuffer::insert(): chunk_num=" << chunk_num - << " >= chunk_count=" << chunk_count << std::endl; - return SharedBuffer(); - } - - // Add if doesn't exist - IncomingSplitPacket *sp; - if (m_buf.find(seqnum) == m_buf.end()) { - sp = new IncomingSplitPacket(chunk_count, reliable); - m_buf[seqnum] = sp; - } else { - sp = m_buf[seqnum]; - } - - if (chunk_count != sp->chunk_count) { - errorstream << "IncomingSplitBuffer::insert(): chunk_count=" - << chunk_count << " != sp->chunk_count=" << sp->chunk_count - << std::endl; - return SharedBuffer(); - } - if (reliable != sp->reliable) - LOG(derr_con<<"Connection: WARNING: reliable="<reliable="<reliable - < chunkdata(chunkdatasize); - memcpy(*chunkdata, &(p.data[headersize]), chunkdatasize); - - if (!sp->insert(chunk_num, chunkdata)) - return SharedBuffer(); - - // If not all chunks are received, return empty buffer - if (!sp->allReceived()) - return SharedBuffer(); - - SharedBuffer fulldata = sp->reassemble(); - - // Remove sp from buffer - m_buf.erase(seqnum); - delete sp; - - return fulldata; -} - -void IncomingSplitBuffer::removeUnreliableTimedOuts(float dtime, float timeout) -{ - MutexAutoLock listlock(m_map_mutex); - std::vector remove_queue; - { - for (const auto &i : m_buf) { - IncomingSplitPacket *p = i.second; - // Reliable ones are not removed by timeout - if (p->reliable) - continue; - p->time += dtime; - if (p->time >= timeout) - remove_queue.push_back(i.first); - } - } - for (u16 j : remove_queue) { - LOG(dout_con<<"NOTE: Removing timed out unreliable split packet"<second; - m_buf.erase(it); - } -} - -/* - ConnectionCommand - */ - -ConnectionCommandPtr ConnectionCommand::create(ConnectionCommandType type) -{ - return ConnectionCommandPtr(new ConnectionCommand(type)); -} - -ConnectionCommandPtr ConnectionCommand::serve(Address address) -{ - auto c = create(CONNCMD_SERVE); - c->address = address; - return c; -} - -ConnectionCommandPtr ConnectionCommand::connect(Address address) -{ - auto c = create(CONNCMD_CONNECT); - c->address = address; - return c; -} - -ConnectionCommandPtr ConnectionCommand::disconnect() -{ - return create(CONNCMD_DISCONNECT); -} - -ConnectionCommandPtr ConnectionCommand::disconnect_peer(session_t peer_id) -{ - auto c = create(CONNCMD_DISCONNECT_PEER); - c->peer_id = peer_id; - return c; -} - -ConnectionCommandPtr ConnectionCommand::resend_one(session_t peer_id) -{ - auto c = create(CONNCMD_RESEND_ONE); - c->peer_id = peer_id; - c->channelnum = 0; // must be same as createPeer - c->reliable = true; - return c; -} - -ConnectionCommandPtr ConnectionCommand::send(session_t peer_id, u8 channelnum, - NetworkPacket *pkt, bool reliable) -{ - auto c = create(CONNCMD_SEND); - c->peer_id = peer_id; - c->channelnum = channelnum; - c->reliable = reliable; - c->data = pkt->oldForgePacket(); - return c; -} - -ConnectionCommandPtr ConnectionCommand::ack(session_t peer_id, u8 channelnum, const Buffer &data) -{ - auto c = create(CONCMD_ACK); - c->peer_id = peer_id; - c->channelnum = channelnum; - c->reliable = false; - data.copyTo(c->data); - return c; -} - -ConnectionCommandPtr ConnectionCommand::createPeer(session_t peer_id, const Buffer &data) -{ - auto c = create(CONCMD_CREATE_PEER); - c->peer_id = peer_id; - c->channelnum = 0; - c->reliable = true; - c->raw = true; - data.copyTo(c->data); - return c; -} - -/* - Channel -*/ - -u16 Channel::readNextIncomingSeqNum() -{ - MutexAutoLock internal(m_internal_mutex); - return next_incoming_seqnum; -} - -u16 Channel::incNextIncomingSeqNum() -{ - MutexAutoLock internal(m_internal_mutex); - u16 retval = next_incoming_seqnum; - next_incoming_seqnum++; - return retval; -} - -u16 Channel::readNextSplitSeqNum() -{ - MutexAutoLock internal(m_internal_mutex); - return next_outgoing_split_seqnum; -} -void Channel::setNextSplitSeqNum(u16 seqnum) -{ - MutexAutoLock internal(m_internal_mutex); - next_outgoing_split_seqnum = seqnum; -} - -u16 Channel::getOutgoingSequenceNumber(bool& successful) -{ - MutexAutoLock internal(m_internal_mutex); - - u16 retval = next_outgoing_seqnum; - successful = false; - - /* shortcut if there ain't any packet in outgoing list */ - if (outgoing_reliables_sent.empty()) { - successful = true; - next_outgoing_seqnum++; - return retval; - } - - u16 lowest_unacked_seqnumber; - if (outgoing_reliables_sent.getFirstSeqnum(lowest_unacked_seqnumber)) { - if (lowest_unacked_seqnumber < next_outgoing_seqnum) { - // ugly cast but this one is required in order to tell compiler we - // know about difference of two unsigned may be negative in general - // but we already made sure it won't happen in this case - if (((u16)(next_outgoing_seqnum - lowest_unacked_seqnumber)) > m_window_size) { - return 0; - } - } else { - // ugly cast but this one is required in order to tell compiler we - // know about difference of two unsigned may be negative in general - // but we already made sure it won't happen in this case - if ((next_outgoing_seqnum + (u16)(SEQNUM_MAX - lowest_unacked_seqnumber)) > - m_window_size) { - return 0; - } - } - } - - successful = true; - next_outgoing_seqnum++; - return retval; -} - -u16 Channel::readOutgoingSequenceNumber() -{ - MutexAutoLock internal(m_internal_mutex); - return next_outgoing_seqnum; -} - -bool Channel::putBackSequenceNumber(u16 seqnum) -{ - if (((seqnum + 1) % (SEQNUM_MAX+1)) == next_outgoing_seqnum) { - - next_outgoing_seqnum = seqnum; - return true; - } - return false; -} - -void Channel::UpdateBytesSent(unsigned int bytes, unsigned int packets) -{ - MutexAutoLock internal(m_internal_mutex); - current_bytes_transfered += bytes; - current_packet_successful += packets; -} - -void Channel::UpdateBytesReceived(unsigned int bytes) { - MutexAutoLock internal(m_internal_mutex); - current_bytes_received += bytes; -} - -void Channel::UpdateBytesLost(unsigned int bytes) -{ - MutexAutoLock internal(m_internal_mutex); - current_bytes_lost += bytes; -} - - -void Channel::UpdatePacketLossCounter(unsigned int count) -{ - MutexAutoLock internal(m_internal_mutex); - current_packet_loss += count; -} - -void Channel::UpdatePacketTooLateCounter() -{ - MutexAutoLock internal(m_internal_mutex); - current_packet_too_late++; -} - -void Channel::UpdateTimers(float dtime) -{ - bpm_counter += dtime; - packet_loss_counter += dtime; - - if (packet_loss_counter > 1.0f) { - packet_loss_counter -= 1.0f; - - unsigned int packet_loss = 11; /* use a neutral value for initialization */ - unsigned int packets_successful = 0; - //unsigned int packet_too_late = 0; - - bool reasonable_amount_of_data_transmitted = false; - - { - MutexAutoLock internal(m_internal_mutex); - packet_loss = current_packet_loss; - //packet_too_late = current_packet_too_late; - packets_successful = current_packet_successful; - - if (current_bytes_transfered > (unsigned int) (m_window_size*512/2)) { - reasonable_amount_of_data_transmitted = true; - } - current_packet_loss = 0; - current_packet_too_late = 0; - current_packet_successful = 0; - } - - /* dynamic window size */ - float successful_to_lost_ratio = 0.0f; - bool done = false; - - if (packets_successful > 0) { - successful_to_lost_ratio = packet_loss/packets_successful; - } else if (packet_loss > 0) { - setWindowSize(m_window_size - 10); - done = true; - } - - if (!done) { - if (successful_to_lost_ratio < 0.01f) { - /* don't even think about increasing if we didn't even - * use major parts of our window */ - if (reasonable_amount_of_data_transmitted) - setWindowSize(m_window_size + 100); - } else if (successful_to_lost_ratio < 0.05f) { - /* don't even think about increasing if we didn't even - * use major parts of our window */ - if (reasonable_amount_of_data_transmitted) - setWindowSize(m_window_size + 50); - } else if (successful_to_lost_ratio > 0.15f) { - setWindowSize(m_window_size - 100); - } else if (successful_to_lost_ratio > 0.1f) { - setWindowSize(m_window_size - 50); - } - } - } - - if (bpm_counter > 10.0f) { - { - MutexAutoLock internal(m_internal_mutex); - cur_kbps = - (((float) current_bytes_transfered)/bpm_counter)/1024.0f; - current_bytes_transfered = 0; - cur_kbps_lost = - (((float) current_bytes_lost)/bpm_counter)/1024.0f; - current_bytes_lost = 0; - cur_incoming_kbps = - (((float) current_bytes_received)/bpm_counter)/1024.0f; - current_bytes_received = 0; - bpm_counter = 0.0f; - } - - if (cur_kbps > max_kbps) { - max_kbps = cur_kbps; - } - - if (cur_kbps_lost > max_kbps_lost) { - max_kbps_lost = cur_kbps_lost; - } - - if (cur_incoming_kbps > max_incoming_kbps) { - max_incoming_kbps = cur_incoming_kbps; - } - - rate_samples = MYMIN(rate_samples+1,10); - float old_fraction = ((float) (rate_samples-1) )/( (float) rate_samples); - avg_kbps = avg_kbps * old_fraction + - cur_kbps * (1.0 - old_fraction); - avg_kbps_lost = avg_kbps_lost * old_fraction + - cur_kbps_lost * (1.0 - old_fraction); - avg_incoming_kbps = avg_incoming_kbps * old_fraction + - cur_incoming_kbps * (1.0 - old_fraction); - } -} - - -/* - Peer -*/ - -PeerHelper::~PeerHelper() -{ - if (m_peer) - m_peer->DecUseCount(); - - m_peer = nullptr; -} - -PeerHelper& PeerHelper::operator=(Peer* peer) -{ - if (m_peer) - m_peer->DecUseCount(); - m_peer = peer; - if (peer && !peer->IncUseCount()) - m_peer = nullptr; - return *this; -} - -bool Peer::IncUseCount() -{ - MutexAutoLock lock(m_exclusive_access_mutex); - - if (!m_pending_deletion) { - this->m_usage++; - return true; - } - - return false; -} - -void Peer::DecUseCount() -{ - { - MutexAutoLock lock(m_exclusive_access_mutex); - sanity_check(m_usage > 0); - m_usage--; - - if (!((m_pending_deletion) && (m_usage == 0))) - return; - } - delete this; -} - -void Peer::RTTStatistics(float rtt, const std::string &profiler_id, - unsigned int num_samples) { - - if (m_last_rtt > 0) { - /* set min max values */ - if (rtt < m_rtt.min_rtt) - m_rtt.min_rtt = rtt; - if (rtt >= m_rtt.max_rtt) - m_rtt.max_rtt = rtt; - - /* do average calculation */ - if (m_rtt.avg_rtt < 0.0) - m_rtt.avg_rtt = rtt; - else - m_rtt.avg_rtt = m_rtt.avg_rtt * (num_samples/(num_samples-1)) + - rtt * (1/num_samples); - - /* do jitter calculation */ - - //just use some neutral value at beginning - float jitter = m_rtt.jitter_min; - - if (rtt > m_last_rtt) - jitter = rtt-m_last_rtt; - - if (rtt <= m_last_rtt) - jitter = m_last_rtt - rtt; - - if (jitter < m_rtt.jitter_min) - m_rtt.jitter_min = jitter; - if (jitter >= m_rtt.jitter_max) - m_rtt.jitter_max = jitter; - - if (m_rtt.jitter_avg < 0.0) - m_rtt.jitter_avg = jitter; - else - m_rtt.jitter_avg = m_rtt.jitter_avg * (num_samples/(num_samples-1)) + - jitter * (1/num_samples); - - if (!profiler_id.empty()) { - g_profiler->graphAdd(profiler_id + " RTT [ms]", rtt * 1000.f); - g_profiler->graphAdd(profiler_id + " jitter [ms]", jitter * 1000.f); - } - } - /* save values required for next loop */ - m_last_rtt = rtt; -} - -bool Peer::isTimedOut(float timeout, std::string &reason) -{ - MutexAutoLock lock(m_exclusive_access_mutex); - - { - u64 current_time = porting::getTimeMs(); - float dtime = CALC_DTIME(m_last_timeout_check, current_time); - m_last_timeout_check = current_time; - m_timeout_counter += dtime; - } - if (m_timeout_counter > timeout) { - reason = "timeout counter"; - return true; - } - - return false; -} - -void Peer::Drop() -{ - { - MutexAutoLock usage_lock(m_exclusive_access_mutex); - m_pending_deletion = true; - if (m_usage != 0) - return; - } - - PROFILE(std::stringstream peerIdentifier1); - PROFILE(peerIdentifier1 << "runTimeouts[" << m_connection->getDesc() - << ";" << id << ";RELIABLE]"); - PROFILE(g_profiler->remove(peerIdentifier1.str())); - PROFILE(std::stringstream peerIdentifier2); - PROFILE(peerIdentifier2 << "sendPackets[" << m_connection->getDesc() - << ";" << id << ";RELIABLE]"); - PROFILE(ScopeProfiler peerprofiler(g_profiler, peerIdentifier2.str(), SPT_AVG)); - - delete this; -} - -UDPPeer::UDPPeer(session_t id, const Address &address, Connection *connection) : - Peer(id, address, connection) -{ - for (Channel &channel : channels) - channel.setWindowSize(START_RELIABLE_WINDOW_SIZE); -} - -bool UDPPeer::isTimedOut(float timeout, std::string &reason) -{ - if (Peer::isTimedOut(timeout, reason)) - return true; - - MutexAutoLock lock(m_exclusive_access_mutex); - - for (int i = 0; i < CHANNEL_COUNT; i++) { - Channel &channel = channels[i]; - if (channel.outgoing_reliables_sent.getTimedOuts(timeout) > 0) { - reason = "outgoing reliables channel=" + itos(i); - return true; - } - } - - return false; -} - -void UDPPeer::reportRTT(float rtt) -{ - if (rtt < 0.0) { - return; - } - RTTStatistics(rtt,"rudp",MAX_RELIABLE_WINDOW_SIZE*10); - - // use this value to decide the resend timeout - float timeout = getStat(AVG_RTT) * RESEND_TIMEOUT_FACTOR; - if (timeout < RESEND_TIMEOUT_MIN) - timeout = RESEND_TIMEOUT_MIN; - if (timeout > RESEND_TIMEOUT_MAX) - timeout = RESEND_TIMEOUT_MAX; - - setResendTimeout(timeout); -} - -bool UDPPeer::Ping(float dtime,SharedBuffer& data) -{ - m_ping_timer += dtime; - if (!isHalfOpen() && m_ping_timer >= PING_TIMEOUT) - { - // Create and send PING packet - writeU8(&data[0], PACKET_TYPE_CONTROL); - writeU8(&data[1], CONTROLTYPE_PING); - m_ping_timer = 0.0f; - return true; - } - return false; -} - -void UDPPeer::PutReliableSendCommand(ConnectionCommandPtr &c, - unsigned int max_packet_size) -{ - if (m_pending_disconnect) - return; - - Channel &chan = channels[c->channelnum]; - - if (chan.queued_commands.empty() && - /* don't queue more packets then window size */ - (chan.queued_reliables.size() + 1 < chan.getWindowSize() / 2)) { - LOG(dout_con<getDesc() - <<" processing reliable command for peer id: " << c->peer_id - <<" data size: " << c->data.getSize() << std::endl); - if (processReliableSendCommand(c, max_packet_size)) - return; - } else { - LOG(dout_con<getDesc() - <<" Queueing reliable command for peer id: " << c->peer_id - <<" data size: " << c->data.getSize() <= chan.getWindowSize() / 2) { - LOG(derr_con << m_connection->getDesc() - << "Possible packet stall to peer id: " << c->peer_id - << " queued_commands=" << chan.queued_commands.size() - << std::endl); - } - } - chan.queued_commands.push_back(c); -} - -bool UDPPeer::processReliableSendCommand( - ConnectionCommandPtr &c_ptr, - unsigned int max_packet_size) -{ - if (m_pending_disconnect) - return true; - - const auto &c = *c_ptr; - Channel &chan = channels[c.channelnum]; - - const u32 chunksize_max = max_packet_size - - BASE_HEADER_SIZE - - RELIABLE_HEADER_SIZE; - - std::list> originals; - - if (c.raw) { - originals.emplace_back(c.data); - } else { - u16 split_seqnum = chan.readNextSplitSeqNum(); - makeAutoSplitPacket(c.data, chunksize_max, split_seqnum, &originals); - chan.setNextSplitSeqNum(split_seqnum); - } - - sanity_check(originals.size() < MAX_RELIABLE_WINDOW_SIZE); - - bool have_sequence_number = false; - bool have_initial_sequence_number = false; - std::queue toadd; - u16 initial_sequence_number = 0; - - for (SharedBuffer &original : originals) { - u16 seqnum = chan.getOutgoingSequenceNumber(have_sequence_number); - - /* oops, we don't have enough sequence numbers to send this packet */ - if (!have_sequence_number) - break; - - if (!have_initial_sequence_number) - { - initial_sequence_number = seqnum; - have_initial_sequence_number = true; - } - - SharedBuffer reliable = makeReliablePacket(original, seqnum); - - // Add base headers and make a packet - BufferedPacketPtr p = con::makePacket(address, reliable, - m_connection->GetProtocolID(), m_connection->GetPeerID(), - c.channelnum); - - toadd.push(p); - } - - if (have_sequence_number) { - while (!toadd.empty()) { - BufferedPacketPtr p = toadd.front(); - toadd.pop(); -// LOG(dout_con<getDesc() -// << " queuing reliable packet for peer_id: " << c.peer_id -// << " channel: " << (c.channelnum&0xFF) -// << " seqnum: " << readU16(&p.data[BASE_HEADER_SIZE+1]) -// << std::endl) - chan.queued_reliables.push(p); - } - sanity_check(chan.queued_reliables.size() < 0xFFFF); - return true; - } - - u16 packets_available = toadd.size(); - /* we didn't get a single sequence number no need to fill queue */ - if (!have_initial_sequence_number) { - LOG(derr_con << m_connection->getDesc() << "Ran out of sequence numbers!" << std::endl); - return false; - } - - while (!toadd.empty()) { - /* remove packet */ - toadd.pop(); - - bool successfully_put_back_sequence_number - = chan.putBackSequenceNumber( - (initial_sequence_number+toadd.size() % (SEQNUM_MAX+1))); - - FATAL_ERROR_IF(!successfully_put_back_sequence_number, "error"); - } - - u32 n_queued = chan.outgoing_reliables_sent.size(); - - LOG(dout_con<getDesc() - << " Windowsize exceeded on reliable sending " - << c.data.getSize() << " bytes" - << std::endl << "\t\tinitial_sequence_number: " - << initial_sequence_number - << std::endl << "\t\tgot at most : " - << packets_available << " packets" - << std::endl << "\t\tpackets queued : " - << n_queued - << std::endl); - - return false; -} - -void UDPPeer::RunCommandQueues( - unsigned int max_packet_size, - unsigned int maxtransfer) -{ - - for (Channel &channel : channels) { - - if ((!channel.queued_commands.empty()) && - (channel.queued_reliables.size() < maxtransfer)) { - try { - ConnectionCommandPtr c = channel.queued_commands.front(); - - LOG(dout_con << m_connection->getDesc() - << " processing queued reliable command " << std::endl); - - // Packet is processed, remove it from queue - if (processReliableSendCommand(c, max_packet_size)) { - channel.queued_commands.pop_front(); - } else { - LOG(dout_con << m_connection->getDesc() - << " Failed to queue packets for peer_id: " << c->peer_id - << ", delaying sending of " << c->data.getSize() - << " bytes" << std::endl); - } - } - catch (ItemNotFoundException &e) { - // intentionally empty - } - } - } -} - -u16 UDPPeer::getNextSplitSequenceNumber(u8 channel) -{ - assert(channel < CHANNEL_COUNT); // Pre-condition - return channels[channel].readNextSplitSeqNum(); -} - -void UDPPeer::setNextSplitSequenceNumber(u8 channel, u16 seqnum) -{ - assert(channel < CHANNEL_COUNT); // Pre-condition - channels[channel].setNextSplitSeqNum(seqnum); -} - -SharedBuffer UDPPeer::addSplitPacket(u8 channel, BufferedPacketPtr &toadd, - bool reliable) -{ - assert(channel < CHANNEL_COUNT); // Pre-condition - return channels[channel].incoming_splits.insert(toadd, reliable); -} - -/* - ConnectionEvent -*/ - -const char *ConnectionEvent::describe() const -{ - switch(type) { - case CONNEVENT_NONE: - return "CONNEVENT_NONE"; - case CONNEVENT_DATA_RECEIVED: - return "CONNEVENT_DATA_RECEIVED"; - case CONNEVENT_PEER_ADDED: - return "CONNEVENT_PEER_ADDED"; - case CONNEVENT_PEER_REMOVED: - return "CONNEVENT_PEER_REMOVED"; - case CONNEVENT_BIND_FAILED: - return "CONNEVENT_BIND_FAILED"; - } - return "Invalid ConnectionEvent"; -} - - -ConnectionEventPtr ConnectionEvent::create(ConnectionEventType type) -{ - return std::shared_ptr(new ConnectionEvent(type)); -} - -ConnectionEventPtr ConnectionEvent::dataReceived(session_t peer_id, const Buffer &data) -{ - auto e = create(CONNEVENT_DATA_RECEIVED); - e->peer_id = peer_id; - data.copyTo(e->data); - return e; -} - -ConnectionEventPtr ConnectionEvent::peerAdded(session_t peer_id, Address address) -{ - auto e = create(CONNEVENT_PEER_ADDED); - e->peer_id = peer_id; - e->address = address; - return e; -} - -ConnectionEventPtr ConnectionEvent::peerRemoved(session_t peer_id, bool is_timeout, Address address) -{ - auto e = create(CONNEVENT_PEER_REMOVED); - e->peer_id = peer_id; - e->timeout = is_timeout; - e->address = address; - return e; -} - -ConnectionEventPtr ConnectionEvent::bindFailed() -{ - return create(CONNEVENT_BIND_FAILED); -} - -/* - Connection -*/ - -Connection::Connection(u32 protocol_id, u32 max_packet_size, float timeout, - bool ipv6, PeerHandler *peerhandler) : - m_udpSocket(ipv6), - m_protocol_id(protocol_id), - m_sendThread(new ConnectionSendThread(max_packet_size, timeout)), - m_receiveThread(new ConnectionReceiveThread()), - m_bc_peerhandler(peerhandler) - -{ - /* Amount of time Receive() will wait for data, this is entirely different - * from the connection timeout */ - m_udpSocket.setTimeoutMs(500); - - m_sendThread->setParent(this); - m_receiveThread->setParent(this); - - m_sendThread->start(); - m_receiveThread->start(); -} - - -Connection::~Connection() -{ - m_shutting_down = true; - // request threads to stop - m_sendThread->stop(); - m_receiveThread->stop(); - - //TODO for some unkonwn reason send/receive threads do not exit as they're - // supposed to be but wait on peer timeout. To speed up shutdown we reduce - // timeout to half a second. - m_sendThread->setPeerTimeout(0.5); - - // wait for threads to finish - m_sendThread->wait(); - m_receiveThread->wait(); - - // Delete peers - for (auto &peer : m_peers) { - delete peer.second; - } -} - -/* Internal stuff */ - -void Connection::putEvent(ConnectionEventPtr e) -{ - assert(e->type != CONNEVENT_NONE); // Pre-condition - m_event_queue.push_back(e); -} - -void Connection::TriggerSend() -{ - m_sendThread->Trigger(); -} - -PeerHelper Connection::getPeerNoEx(session_t peer_id) -{ - MutexAutoLock peerlock(m_peers_mutex); - std::map::iterator node = m_peers.find(peer_id); - - if (node == m_peers.end()) { - return PeerHelper(NULL); - } - - // Error checking - FATAL_ERROR_IF(node->second->id != peer_id, "Invalid peer id"); - - return PeerHelper(node->second); -} - -/* find peer_id for address */ -session_t Connection::lookupPeer(const Address& sender) -{ - MutexAutoLock peerlock(m_peers_mutex); - for (auto &it: m_peers) { - Peer *peer = it.second; - if (peer->isPendingDeletion()) - continue; - - if (peer->getAddress() == sender) - return peer->id; - } - - return PEER_ID_INEXISTENT; -} - -u32 Connection::getActiveCount() -{ - MutexAutoLock peerlock(m_peers_mutex); - u32 count = 0; - for (auto &it : m_peers) { - Peer *peer = it.second; - if (peer->isPendingDeletion()) - continue; - if (peer->isHalfOpen()) - continue; - count++; - } - return count; -} - -bool Connection::deletePeer(session_t peer_id, bool timeout) -{ - Peer *peer = 0; - - /* lock list as short as possible */ - { - MutexAutoLock peerlock(m_peers_mutex); - if (m_peers.find(peer_id) == m_peers.end()) - return false; - peer = m_peers[peer_id]; - m_peers.erase(peer_id); - auto it = std::find(m_peer_ids.begin(), m_peer_ids.end(), peer_id); - m_peer_ids.erase(it); - } - - // Create event - putEvent(ConnectionEvent::peerRemoved(peer_id, timeout, peer->getAddress())); - - peer->Drop(); - return true; -} - -/* Interface */ - -ConnectionEventPtr Connection::waitEvent(u32 timeout_ms) -{ - try { - return m_event_queue.pop_front(timeout_ms); - } catch(ItemNotFoundException &ex) { - return ConnectionEvent::create(CONNEVENT_NONE); - } -} - -void Connection::putCommand(ConnectionCommandPtr c) -{ - if (!m_shutting_down) { - m_command_queue.push_back(c); - m_sendThread->Trigger(); - } -} - -void Connection::Serve(Address bind_addr) -{ - putCommand(ConnectionCommand::serve(bind_addr)); -} - -void Connection::Connect(Address address) -{ - putCommand(ConnectionCommand::connect(address)); -} - -bool Connection::Connected() -{ - MutexAutoLock peerlock(m_peers_mutex); - - if (m_peers.size() != 1) - return false; - - std::map::iterator node = m_peers.find(PEER_ID_SERVER); - if (node == m_peers.end()) - return false; - - if (m_peer_id == PEER_ID_INEXISTENT) - return false; - - return true; -} - -void Connection::Disconnect() -{ - putCommand(ConnectionCommand::disconnect()); -} - -bool Connection::ReceiveTimeoutMs(NetworkPacket *pkt, u32 timeout_ms) -{ - /* - Note that this function can potentially wait infinitely if non-data - events keep happening before the timeout expires. - This is not considered to be a problem (is it?) - */ - for(;;) { - ConnectionEventPtr e_ptr = waitEvent(timeout_ms); - const ConnectionEvent &e = *e_ptr; - - if (e.type != CONNEVENT_NONE) { - LOG(dout_con << getDesc() << ": Receive: got event: " - << e.describe() << std::endl); - } - - switch (e.type) { - case CONNEVENT_NONE: - return false; - case CONNEVENT_DATA_RECEIVED: - // Data size is lesser than command size, ignoring packet - if (e.data.getSize() < 2) { - continue; - } - - pkt->putRawPacket(*e.data, e.data.getSize(), e.peer_id); - return true; - case CONNEVENT_PEER_ADDED: { - UDPPeer tmp(e.peer_id, e.address, this); - if (m_bc_peerhandler) - m_bc_peerhandler->peerAdded(&tmp); - continue; - } - case CONNEVENT_PEER_REMOVED: { - UDPPeer tmp(e.peer_id, e.address, this); - if (m_bc_peerhandler) - m_bc_peerhandler->deletingPeer(&tmp, e.timeout); - continue; - } - case CONNEVENT_BIND_FAILED: - throw ConnectionBindFailed("Failed to bind socket " - "(port already in use?)"); - } - } - return false; -} - -void Connection::Receive(NetworkPacket *pkt) -{ - bool any = ReceiveTimeoutMs(pkt, m_bc_receive_timeout); - if (!any) - throw NoIncomingDataException("No incoming data"); -} - -bool Connection::TryReceive(NetworkPacket *pkt) -{ - return ReceiveTimeoutMs(pkt, 0); -} - -void Connection::Send(session_t peer_id, u8 channelnum, - NetworkPacket *pkt, bool reliable) -{ - assert(channelnum < CHANNEL_COUNT); // Pre-condition - - // approximate check similar to UDPPeer::processReliableSendCommand() - // to get nicer errors / backtraces if this happens. - if (reliable && pkt->getSize() > MAX_RELIABLE_WINDOW_SIZE*512) { - std::ostringstream oss; - oss << "Packet too big for window, peer_id=" << peer_id - << " command=" << pkt->getCommand() << " size=" << pkt->getSize(); - FATAL_ERROR(oss.str().c_str()); - } - - putCommand(ConnectionCommand::send(peer_id, channelnum, pkt, reliable)); -} - -Address Connection::GetPeerAddress(session_t peer_id) -{ - PeerHelper peer = getPeerNoEx(peer_id); - - if (!peer) - throw PeerNotFoundException("No address for peer found!"); - return peer->getAddress(); -} - -float Connection::getPeerStat(session_t peer_id, rtt_stat_type type) -{ - PeerHelper peer = getPeerNoEx(peer_id); - if (!peer) - return -1; - return peer->getStat(type); -} - -float Connection::getLocalStat(rate_stat_type type) -{ - PeerHelper peer = getPeerNoEx(PEER_ID_SERVER); - - FATAL_ERROR_IF(!peer, "Connection::getLocalStat we couldn't get our own peer? are you serious???"); - - float retval = 0; - - for (Channel &channel : dynamic_cast(&peer)->channels) { - switch(type) { - case CUR_DL_RATE: - retval += channel.getCurrentDownloadRateKB(); - break; - case AVG_DL_RATE: - retval += channel.getAvgDownloadRateKB(); - break; - case CUR_INC_RATE: - retval += channel.getCurrentIncomingRateKB(); - break; - case AVG_INC_RATE: - retval += channel.getAvgIncomingRateKB(); - break; - case AVG_LOSS_RATE: - retval += channel.getAvgLossRateKB(); - break; - case CUR_LOSS_RATE: - retval += channel.getCurrentLossRateKB(); - break; - default: - FATAL_ERROR("Connection::getLocalStat Invalid stat type"); - } - } - return retval; -} - -session_t Connection::createPeer(const Address &sender, int fd) -{ - // Somebody wants to make a new connection - - // Get a unique peer id - const session_t minimum = 2; - const session_t overflow = MAX_UDP_PEERS; - - /* - Find an unused peer id - */ - - MutexAutoLock lock(m_peers_mutex); - session_t peer_id_new; - for (int tries = 0; tries < 100; tries++) { - peer_id_new = myrand_range(minimum, overflow - 1); - if (m_peers.find(peer_id_new) == m_peers.end()) - break; - } - if (m_peers.find(peer_id_new) != m_peers.end()) { - errorstream << getDesc() << " ran out of peer ids" << std::endl; - return PEER_ID_INEXISTENT; - } - - // Create a peer - Peer *peer = 0; - peer = new UDPPeer(peer_id_new, sender, this); - - m_peers[peer->id] = peer; - m_peer_ids.push_back(peer->id); - - LOG(dout_con << getDesc() - << "createPeer(): giving peer_id=" << peer_id_new << std::endl); - - { - Buffer reply(4); - writeU8(&reply[0], PACKET_TYPE_CONTROL); - writeU8(&reply[1], CONTROLTYPE_SET_PEER_ID); - writeU16(&reply[2], peer_id_new); - putCommand(ConnectionCommand::createPeer(peer_id_new, reply)); - } - - // Create peer addition event - putEvent(ConnectionEvent::peerAdded(peer_id_new, sender)); - - // We're now talking to a valid peer_id - return peer_id_new; -} - -const std::string Connection::getDesc() -{ - MutexAutoLock _(m_info_mutex); - return std::string("con(")+ - itos(m_udpSocket.GetHandle())+"/"+itos(m_peer_id)+")"; -} - -void Connection::DisconnectPeer(session_t peer_id) -{ - putCommand(ConnectionCommand::disconnect_peer(peer_id)); -} - -void Connection::doResendOne(session_t peer_id) -{ - assert(peer_id != PEER_ID_INEXISTENT); - putCommand(ConnectionCommand::resend_one(peer_id)); -} - -void Connection::sendAck(session_t peer_id, u8 channelnum, u16 seqnum) -{ - assert(channelnum < CHANNEL_COUNT); // Pre-condition - - LOG(dout_con< ack(4); - writeU8(&ack[0], PACKET_TYPE_CONTROL); - writeU8(&ack[1], CONTROLTYPE_ACK); - writeU16(&ack[2], seqnum); - - putCommand(ConnectionCommand::ack(peer_id, channelnum, ack)); - m_sendThread->Trigger(); -} - -UDPPeer* Connection::createServerPeer(const Address &address) -{ - if (ConnectedToServer()) - throw ConnectionException("Already connected to a server"); - - UDPPeer *peer = new UDPPeer(PEER_ID_SERVER, address, this); - peer->SetFullyOpen(); - - { - MutexAutoLock lock(m_peers_mutex); - m_peers[peer->id] = peer; - m_peer_ids.push_back(peer->id); - } - - return peer; -} - -} // namespace diff --git a/src/network/connection.h b/src/network/connection.h index a9e5a18c5..bec6f98f0 100644 --- a/src/network/connection.h +++ b/src/network/connection.h @@ -1,44 +1,26 @@ -/* -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. -*/ +// Minetest +// SPDX-License-Identifier: LGPL-2.1-or-later #pragma once #include "irrlichttypes.h" -#include "peerhandler.h" #include "socket.h" -#include "constants.h" -#include "util/pointer.h" -#include "util/container.h" -#include "util/numeric.h" -#include "porting.h" -#include "networkprotocol.h" -#include -#include -#include +#include "networkprotocol.h" // session_t class NetworkPacket; +class PeerHandler; namespace con { -class ConnectionReceiveThread; -class ConnectionSendThread; +enum rtt_stat_type { + MIN_RTT, + MAX_RTT, + AVG_RTT, + MIN_JITTER, + MAX_JITTER, + AVG_JITTER +}; enum rate_stat_type { CUR_DL_RATE, @@ -49,295 +31,43 @@ enum rate_stat_type { AVG_LOSS_RATE, }; -class Peer; - -// FIXME: Peer refcounting should generally be replaced by std::shared_ptr -class PeerHelper -{ +class IPeer { public: - PeerHelper() = default; - inline PeerHelper(Peer *peer) { *this = peer; } - ~PeerHelper(); + // Unique id of the peer + const session_t id; - PeerHelper& operator=(Peer *peer); - inline Peer* operator->() const { return m_peer; } - inline Peer* operator&() const { return m_peer; } - - inline bool operator!() { return !m_peer; } - inline bool operator!=(std::nullptr_t) { return !!m_peer; } - -private: - Peer *m_peer = nullptr; -}; - -/* - Connection -*/ - -enum ConnectionEventType { - CONNEVENT_NONE, - CONNEVENT_DATA_RECEIVED, - CONNEVENT_PEER_ADDED, - CONNEVENT_PEER_REMOVED, - CONNEVENT_BIND_FAILED, -}; - -struct ConnectionEvent; -typedef std::shared_ptr ConnectionEventPtr; - -// This is very similar to ConnectionCommand -struct ConnectionEvent -{ - const ConnectionEventType type; - session_t peer_id = 0; - Buffer data; - bool timeout = false; - Address address; - - // We don't want to copy "data" - DISABLE_CLASS_COPY(ConnectionEvent); - - static ConnectionEventPtr create(ConnectionEventType type); - static ConnectionEventPtr dataReceived(session_t peer_id, const Buffer &data); - static ConnectionEventPtr peerAdded(session_t peer_id, Address address); - static ConnectionEventPtr peerRemoved(session_t peer_id, bool is_timeout, Address address); - static ConnectionEventPtr bindFailed(); - - const char *describe() const; - -private: - ConnectionEvent(ConnectionEventType type_) : - type(type_) {} -}; - -struct ConnectionCommand; -typedef std::shared_ptr ConnectionCommandPtr; - -struct BufferedPacket; -typedef std::shared_ptr BufferedPacketPtr; - -class Connection; -class PeerHandler; - -class Peer { - public: - friend class PeerHelper; - - virtual ~Peer() { - MutexAutoLock usage_lock(m_exclusive_access_mutex); - FATAL_ERROR_IF(m_usage != 0, "Reference counting failure"); - } - - // Unique id of the peer - const session_t id; - - void Drop(); - - virtual void PutReliableSendCommand(ConnectionCommandPtr &c, - unsigned int max_packet_size) {}; - - virtual const Address &getAddress() const = 0; - - bool isPendingDeletion() const { - MutexAutoLock lock(m_exclusive_access_mutex); - return m_pending_deletion; - } - void ResetTimeout() { - MutexAutoLock lock(m_exclusive_access_mutex); - m_timeout_counter = 0; - } - - bool isHalfOpen() const { - MutexAutoLock lock(m_exclusive_access_mutex); - return m_half_open; - } - void SetFullyOpen() { - MutexAutoLock lock(m_exclusive_access_mutex); - m_half_open = false; - } - - virtual bool isTimedOut(float timeout, std::string &reason); - - unsigned int m_increment_packets_remaining = 0; - - virtual u16 getNextSplitSequenceNumber(u8 channel) { return 0; }; - virtual void setNextSplitSequenceNumber(u8 channel, u16 seqnum) {}; - virtual SharedBuffer addSplitPacket(u8 channel, BufferedPacketPtr &toadd, - bool reliable) - { - FATAL_ERROR("unimplemented in abstract class"); - } - - virtual bool Ping(float dtime, SharedBuffer& data) { return false; }; - - virtual float getStat(rtt_stat_type type) const { - switch (type) { - case MIN_RTT: - return m_rtt.min_rtt; - case MAX_RTT: - return m_rtt.max_rtt; - case AVG_RTT: - return m_rtt.avg_rtt; - case MIN_JITTER: - return m_rtt.jitter_min; - case MAX_JITTER: - return m_rtt.jitter_max; - case AVG_JITTER: - return m_rtt.jitter_avg; - } - return -1; - } - - protected: - Peer(session_t id, const Address &address, Connection *connection) : - id(id), - m_connection(connection), - address(address), - m_last_timeout_check(porting::getTimeMs()) - { - } - - virtual void reportRTT(float rtt) {}; - - void RTTStatistics(float rtt, - const std::string &profiler_id = "", - unsigned int num_samples = 1000); - - bool IncUseCount(); - void DecUseCount(); - - mutable std::mutex m_exclusive_access_mutex; - - bool m_pending_deletion = false; - - Connection *m_connection; - - // Address of the peer - Address address; - - // Ping timer - float m_ping_timer = 0.0f; - - private: - struct rttstats { - float jitter_min = FLT_MAX; - float jitter_max = 0.0f; - float jitter_avg = -1.0f; - float min_rtt = FLT_MAX; - float max_rtt = 0.0f; - float avg_rtt = -1.0f; - }; - - rttstats m_rtt; - float m_last_rtt = -1.0f; - - /* - Until the peer has communicated with us using their assigned peer id - the connection is considered half-open. - During this time we inhibit re-sending any reliables or pings. This - is to avoid spending too many resources on a potential DoS attack - and to make sure Minetest servers are not useful for UDP amplificiation. - */ - bool m_half_open = true; - - // current usage count - unsigned int m_usage = 0; - - // Seconds from last receive - float m_timeout_counter = 0.0f; - - u64 m_last_timeout_check; -}; - -class UDPPeer; - -class Connection -{ -public: - friend class ConnectionSendThread; - friend class ConnectionReceiveThread; - - Connection(u32 protocol_id, u32 max_packet_size, float timeout, bool ipv6, - PeerHandler *peerhandler); - ~Connection(); - - /* Interface */ - ConnectionEventPtr waitEvent(u32 timeout_ms); - - void putCommand(ConnectionCommandPtr c); - - void SetTimeoutMs(u32 timeout) { m_bc_receive_timeout = timeout; } - void Serve(Address bind_addr); - void Connect(Address address); - bool Connected(); - void Disconnect(); - bool ReceiveTimeoutMs(NetworkPacket *pkt, u32 timeout_ms); - void Receive(NetworkPacket *pkt); - bool TryReceive(NetworkPacket *pkt); - void Send(session_t peer_id, u8 channelnum, NetworkPacket *pkt, bool reliable); - session_t GetPeerID() const { return m_peer_id; } - Address GetPeerAddress(session_t peer_id); - float getPeerStat(session_t peer_id, rtt_stat_type type); - float getLocalStat(rate_stat_type type); - u32 GetProtocolID() const { return m_protocol_id; }; - const std::string getDesc(); - void DisconnectPeer(session_t peer_id); + virtual const Address &getAddress() const = 0; protected: - PeerHelper getPeerNoEx(session_t peer_id); - session_t lookupPeer(const Address& sender); - - session_t createPeer(const Address& sender, int fd); - UDPPeer* createServerPeer(const Address& sender); - bool deletePeer(session_t peer_id, bool timeout); - - void SetPeerID(session_t id) { m_peer_id = id; } - - void doResendOne(session_t peer_id); - - void sendAck(session_t peer_id, u8 channelnum, u16 seqnum); - - std::vector getPeerIDs() - { - MutexAutoLock peerlock(m_peers_mutex); - return m_peer_ids; - } - - u32 getActiveCount(); - - UDPSocket m_udpSocket; - // Command queue: user -> SendThread - MutexedQueue m_command_queue; - - void putEvent(ConnectionEventPtr e); - - void TriggerSend(); - - bool ConnectedToServer() - { - return getPeerNoEx(PEER_ID_SERVER) != nullptr; - } -private: - // Event queue: ReceiveThread -> user - MutexedQueue m_event_queue; - - session_t m_peer_id = 0; - u32 m_protocol_id; - - std::map m_peers; - std::vector m_peer_ids; - std::mutex m_peers_mutex; - - std::unique_ptr m_sendThread; - std::unique_ptr m_receiveThread; - - mutable std::mutex m_info_mutex; - - // Backwards compatibility - PeerHandler *m_bc_peerhandler; - u32 m_bc_receive_timeout = 0; - - bool m_shutting_down = false; + IPeer(session_t id) : id(id) {} + ~IPeer() {} }; +class IConnection +{ +public: + virtual ~IConnection() = default; + + virtual void Serve(Address bind_addr) = 0; + virtual void Connect(Address address) = 0; + virtual bool Connected() = 0; + virtual void Disconnect() = 0; + virtual void DisconnectPeer(session_t peer_id) = 0; + + virtual bool ReceiveTimeoutMs(NetworkPacket *pkt, u32 timeout_ms) = 0; + bool TryReceive(NetworkPacket *pkt) { + return ReceiveTimeoutMs(pkt, 0); + } + + virtual void Send(session_t peer_id, u8 channelnum, NetworkPacket *pkt, bool reliable) = 0; + + virtual session_t GetPeerID() const = 0; + virtual Address GetPeerAddress(session_t peer_id) = 0; + virtual float getPeerStat(session_t peer_id, rtt_stat_type type) = 0; + virtual float getLocalStat(rate_stat_type type) = 0; +}; + +// MTP = Minetest Protocol +IConnection *createMTP(float timeout, bool ipv6, PeerHandler *handler); + } // namespace diff --git a/src/network/mtp/impl.cpp b/src/network/mtp/impl.cpp new file mode 100644 index 000000000..1ef5eb853 --- /dev/null +++ b/src/network/mtp/impl.cpp @@ -0,0 +1,1674 @@ +/* +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. +*/ + +#include +#include +#include +#include +#include "network/mtp/internal.h" +#include "serialization.h" +#include "log.h" +#include "porting.h" +#include "network/mtp/threads.h" +#include "network/peerhandler.h" +#include "network/networkpacket.h" +#include "util/serialize.h" +#include "util/numeric.h" +#include "util/string.h" +#include "settings.h" +#include "profiler.h" + +namespace con +{ + +/******************************************************************************/ +/* defines used for debugging and profiling */ +/******************************************************************************/ +#ifdef NDEBUG + #define PROFILE(a) +#else + #define PROFILE(a) a +#endif + +// TODO: Clean this up. +#define LOG(a) a + +#define PING_TIMEOUT 5.0f + +// exponent base +#define RESEND_SCALE_BASE 1.5f + +// since spacing is exponential the numbers here shouldn't be too high +// (it's okay to start out quick) +#define RESEND_TIMEOUT_MIN 0.1f +#define RESEND_TIMEOUT_MAX 2.0f +#define RESEND_TIMEOUT_FACTOR 2 + +u16 BufferedPacket::getSeqnum() const +{ + if (size() < BASE_HEADER_SIZE + 3) + return 0; // should never happen + + return readU16(&data[BASE_HEADER_SIZE + 1]); +} + +BufferedPacketPtr makePacket(const Address &address, const SharedBuffer &data, + u32 protocol_id, session_t sender_peer_id, u8 channel) +{ + u32 packet_size = data.getSize() + BASE_HEADER_SIZE; + + auto p = std::make_shared(packet_size); + p->address = address; + + writeU32(&p->data[0], protocol_id); + writeU16(&p->data[4], sender_peer_id); + writeU8(&p->data[6], channel); + + memcpy(&p->data[BASE_HEADER_SIZE], *data, data.getSize()); + + return p; +} + +SharedBuffer makeOriginalPacket(const SharedBuffer &data) +{ + u32 header_size = 1; + u32 packet_size = data.getSize() + header_size; + SharedBuffer b(packet_size); + + writeU8(&(b[0]), PACKET_TYPE_ORIGINAL); + if (data.getSize() > 0) { + memcpy(&(b[header_size]), *data, data.getSize()); + } + return b; +} + +// Split data in chunks and add TYPE_SPLIT headers to them +void makeSplitPacket(const SharedBuffer &data, u32 chunksize_max, u16 seqnum, + std::list> *chunks) +{ + // Chunk packets, containing the TYPE_SPLIT header + const u32 chunk_header_size = 7; + const u32 maximum_data_size = chunksize_max - chunk_header_size; + u32 start = 0, end = 0; + u16 chunk_num = 0; + do { + end = start + maximum_data_size - 1; + if (end > data.getSize() - 1) + end = data.getSize() - 1; + + u32 payload_size = end - start + 1; + u32 packet_size = chunk_header_size + payload_size; + + SharedBuffer chunk(packet_size); + + writeU8(&chunk[0], PACKET_TYPE_SPLIT); + writeU16(&chunk[1], seqnum); + // [3] u16 chunk_count is written at next stage + writeU16(&chunk[5], chunk_num); + memcpy(&chunk[chunk_header_size], &data[start], payload_size); + + chunks->push_back(chunk); + + start = end + 1; + sanity_check(chunk_num < 0xFFFF); // overflow + chunk_num++; + } + while (end != data.getSize() - 1); + + for (auto &chunk : *chunks) { + // Write chunk_count + writeU16(&chunk[3], chunk_num); + } +} + +void makeAutoSplitPacket(const SharedBuffer &data, u32 chunksize_max, + u16 &split_seqnum, std::list> *list) +{ + u32 original_header_size = 1; + + if (data.getSize() + original_header_size > chunksize_max) { + makeSplitPacket(data, chunksize_max, split_seqnum, list); + split_seqnum++; + return; + } + + list->push_back(makeOriginalPacket(data)); +} + +SharedBuffer makeReliablePacket(const SharedBuffer &data, u16 seqnum) +{ + u32 header_size = 3; + u32 packet_size = data.getSize() + header_size; + SharedBuffer b(packet_size); + + writeU8(&b[0], PACKET_TYPE_RELIABLE); + writeU16(&b[1], seqnum); + + memcpy(&b[header_size], *data, data.getSize()); + + return b; +} + +/* + ReliablePacketBuffer +*/ + +void ReliablePacketBuffer::print() +{ + MutexAutoLock listlock(m_list_mutex); + LOG(dout_con<<"Dump of ReliablePacketBuffer:" << std::endl); + unsigned int index = 0; + for (BufferedPacketPtr &packet : m_list) { + LOG(dout_con<getSeqnum() << std::endl); + index++; + } +} + +bool ReliablePacketBuffer::empty() +{ + MutexAutoLock listlock(m_list_mutex); + return m_list.empty(); +} + +u32 ReliablePacketBuffer::size() +{ + MutexAutoLock listlock(m_list_mutex); + return m_list.size(); +} + +ReliablePacketBuffer::FindResult ReliablePacketBuffer::findPacketNoLock(u16 seqnum) +{ + for (auto it = m_list.begin(); it != m_list.end(); ++it) { + if ((*it)->getSeqnum() == seqnum) + return it; + } + return m_list.end(); +} + +bool ReliablePacketBuffer::getFirstSeqnum(u16& result) +{ + MutexAutoLock listlock(m_list_mutex); + if (m_list.empty()) + return false; + result = m_list.front()->getSeqnum(); + return true; +} + +BufferedPacketPtr ReliablePacketBuffer::popFirst() +{ + MutexAutoLock listlock(m_list_mutex); + if (m_list.empty()) + throw NotFoundException("Buffer is empty"); + + BufferedPacketPtr p(m_list.front()); + m_list.pop_front(); + + if (m_list.empty()) { + m_oldest_non_answered_ack = 0; + } else { + m_oldest_non_answered_ack = m_list.front()->getSeqnum(); + } + return p; +} + +BufferedPacketPtr ReliablePacketBuffer::popSeqnum(u16 seqnum) +{ + MutexAutoLock listlock(m_list_mutex); + auto r = findPacketNoLock(seqnum); + if (r == m_list.end()) { + LOG(dout_con<<"Sequence number: " << seqnum + << " not found in reliable buffer"<getSeqnum(); + } + return p; +} + +void ReliablePacketBuffer::insert(BufferedPacketPtr &p_ptr, u16 next_expected) +{ + MutexAutoLock listlock(m_list_mutex); + const BufferedPacket &p = *p_ptr; + + if (p.size() < BASE_HEADER_SIZE + 3) { + errorstream << "ReliablePacketBuffer::insert(): Invalid data size for " + "reliable packet" << std::endl; + return; + } + u8 type = readU8(&p.data[BASE_HEADER_SIZE + 0]); + if (type != PACKET_TYPE_RELIABLE) { + errorstream << "ReliablePacketBuffer::insert(): type is not reliable" + << std::endl; + return; + } + const u16 seqnum = p.getSeqnum(); + + if (!seqnum_in_window(seqnum, next_expected, MAX_RELIABLE_WINDOW_SIZE)) { + errorstream << "ReliablePacketBuffer::insert(): seqnum is outside of " + "expected window " << std::endl; + return; + } + if (seqnum == next_expected) { + errorstream << "ReliablePacketBuffer::insert(): seqnum is next expected" + << std::endl; + return; + } + + sanity_check(m_list.size() <= SEQNUM_MAX); // FIXME: Handle the error? + + // Find the right place for the packet and insert it there + // If list is empty, just add it + if (m_list.empty()) { + m_list.push_back(p_ptr); + m_oldest_non_answered_ack = seqnum; + // Done. + return; + } + + // Otherwise find the right place + auto it = m_list.begin(); + // Find the first packet in the list which has a higher seqnum + u16 s = (*it)->getSeqnum(); + + /* case seqnum is smaller then next_expected seqnum */ + /* this is true e.g. on wrap around */ + if (seqnum < next_expected) { + while(((s < seqnum) || (s >= next_expected)) && (it != m_list.end())) { + ++it; + if (it != m_list.end()) + s = (*it)->getSeqnum(); + } + } + /* non wrap around case (at least for incoming and next_expected */ + else + { + while(((s < seqnum) && (s >= next_expected)) && (it != m_list.end())) { + ++it; + if (it != m_list.end()) + s = (*it)->getSeqnum(); + } + } + + if (s == seqnum) { + /* nothing to do this seems to be a resent packet */ + /* for paranoia reason data should be compared */ + auto &i = *it; + if ( + (i->getSeqnum() != seqnum) || + (i->size() != p.size()) || + (i->address != p.address) + ) + { + /* if this happens your maximum transfer window may be to big */ + char buf[200]; + snprintf(buf, sizeof(buf), + "Duplicated seqnum %d non matching packet detected:\n", + seqnum); + warningstream << buf; + snprintf(buf, sizeof(buf), + "Old: seqnum: %05d size: %04zu, address: %s\n", + i->getSeqnum(), i->size(), + i->address.serializeString().c_str()); + warningstream << buf; + snprintf(buf, sizeof(buf), + "New: seqnum: %05d size: %04zu, address: %s\n", + p.getSeqnum(), p.size(), + p.address.serializeString().c_str()); + warningstream << buf << std::flush; + throw IncomingDataCorruption("duplicated packet isn't same as original one"); + } + } + /* insert or push back */ + else if (it != m_list.end()) { + m_list.insert(it, p_ptr); + } else { + m_list.push_back(p_ptr); + } + + /* update last packet number */ + m_oldest_non_answered_ack = m_list.front()->getSeqnum(); +} + +void ReliablePacketBuffer::incrementTimeouts(float dtime) +{ + MutexAutoLock listlock(m_list_mutex); + for (auto &packet : m_list) { + packet->time += dtime; + packet->totaltime += dtime; + } +} + +u32 ReliablePacketBuffer::getTimedOuts(float timeout) +{ + MutexAutoLock listlock(m_list_mutex); + u32 count = 0; + for (auto &packet : m_list) { + if (packet->totaltime >= timeout) + count++; + } + return count; +} + +std::vector> + ReliablePacketBuffer::getResend(float timeout, u32 max_packets) +{ + MutexAutoLock listlock(m_list_mutex); + std::vector> timed_outs; + for (auto &packet : m_list) { + // resend time scales exponentially with each cycle + const float pkt_timeout = timeout * powf(RESEND_SCALE_BASE, packet->resend_count); + + if (packet->time < pkt_timeout) + continue; + + // caller will resend packet so reset time and increase counter + packet->time = 0.0f; + packet->resend_count++; + + timed_outs.emplace_back(packet); + + if (timed_outs.size() >= max_packets) + break; + } + return timed_outs; +} + +/* + IncomingSplitPacket +*/ + +bool IncomingSplitPacket::insert(u32 chunk_num, SharedBuffer &chunkdata) +{ + sanity_check(chunk_num < chunk_count); + + // If chunk already exists, ignore it. + // Sometimes two identical packets may arrive when there is network + // lag and the server re-sends stuff. + if (chunks.find(chunk_num) != chunks.end()) + return false; + + // Set chunk data in buffer + chunks[chunk_num] = chunkdata; + + return true; +} + +SharedBuffer IncomingSplitPacket::reassemble() +{ + sanity_check(allReceived()); + + // Calculate total size + u32 totalsize = 0; + for (const auto &chunk : chunks) + totalsize += chunk.second.getSize(); + + SharedBuffer fulldata(totalsize); + + // Copy chunks to data buffer + u32 start = 0; + for (u32 chunk_i = 0; chunk_i < chunk_count; chunk_i++) { + const SharedBuffer &buf = chunks[chunk_i]; + memcpy(&fulldata[start], *buf, buf.getSize()); + start += buf.getSize(); + } + + return fulldata; +} + +/* + IncomingSplitBuffer +*/ + +IncomingSplitBuffer::~IncomingSplitBuffer() +{ + MutexAutoLock listlock(m_map_mutex); + for (auto &i : m_buf) { + delete i.second; + } +} + +SharedBuffer IncomingSplitBuffer::insert(BufferedPacketPtr &p_ptr, bool reliable) +{ + MutexAutoLock listlock(m_map_mutex); + const BufferedPacket &p = *p_ptr; + + u32 headersize = BASE_HEADER_SIZE + 7; + if (p.size() < headersize) { + errorstream << "Invalid data size for split packet" << std::endl; + return SharedBuffer(); + } + u8 type = readU8(&p.data[BASE_HEADER_SIZE+0]); + u16 seqnum = readU16(&p.data[BASE_HEADER_SIZE+1]); + u16 chunk_count = readU16(&p.data[BASE_HEADER_SIZE+3]); + u16 chunk_num = readU16(&p.data[BASE_HEADER_SIZE+5]); + + if (type != PACKET_TYPE_SPLIT) { + errorstream << "IncomingSplitBuffer::insert(): type is not split" + << std::endl; + return SharedBuffer(); + } + if (chunk_num >= chunk_count) { + errorstream << "IncomingSplitBuffer::insert(): chunk_num=" << chunk_num + << " >= chunk_count=" << chunk_count << std::endl; + return SharedBuffer(); + } + + // Add if doesn't exist + IncomingSplitPacket *sp; + if (m_buf.find(seqnum) == m_buf.end()) { + sp = new IncomingSplitPacket(chunk_count, reliable); + m_buf[seqnum] = sp; + } else { + sp = m_buf[seqnum]; + } + + if (chunk_count != sp->chunk_count) { + errorstream << "IncomingSplitBuffer::insert(): chunk_count=" + << chunk_count << " != sp->chunk_count=" << sp->chunk_count + << std::endl; + return SharedBuffer(); + } + if (reliable != sp->reliable) + LOG(derr_con<<"Connection: WARNING: reliable="<reliable="<reliable + < chunkdata(chunkdatasize); + memcpy(*chunkdata, &(p.data[headersize]), chunkdatasize); + + if (!sp->insert(chunk_num, chunkdata)) + return SharedBuffer(); + + // If not all chunks are received, return empty buffer + if (!sp->allReceived()) + return SharedBuffer(); + + SharedBuffer fulldata = sp->reassemble(); + + // Remove sp from buffer + m_buf.erase(seqnum); + delete sp; + + return fulldata; +} + +void IncomingSplitBuffer::removeUnreliableTimedOuts(float dtime, float timeout) +{ + MutexAutoLock listlock(m_map_mutex); + std::vector remove_queue; + { + for (const auto &i : m_buf) { + IncomingSplitPacket *p = i.second; + // Reliable ones are not removed by timeout + if (p->reliable) + continue; + p->time += dtime; + if (p->time >= timeout) + remove_queue.push_back(i.first); + } + } + for (u16 j : remove_queue) { + LOG(dout_con<<"NOTE: Removing timed out unreliable split packet"<second; + m_buf.erase(it); + } +} + +/* + ConnectionCommand + */ + +ConnectionCommandPtr ConnectionCommand::create(ConnectionCommandType type) +{ + return ConnectionCommandPtr(new ConnectionCommand(type)); +} + +ConnectionCommandPtr ConnectionCommand::serve(Address address) +{ + auto c = create(CONNCMD_SERVE); + c->address = address; + return c; +} + +ConnectionCommandPtr ConnectionCommand::connect(Address address) +{ + auto c = create(CONNCMD_CONNECT); + c->address = address; + return c; +} + +ConnectionCommandPtr ConnectionCommand::disconnect() +{ + return create(CONNCMD_DISCONNECT); +} + +ConnectionCommandPtr ConnectionCommand::disconnect_peer(session_t peer_id) +{ + auto c = create(CONNCMD_DISCONNECT_PEER); + c->peer_id = peer_id; + return c; +} + +ConnectionCommandPtr ConnectionCommand::resend_one(session_t peer_id) +{ + auto c = create(CONNCMD_RESEND_ONE); + c->peer_id = peer_id; + c->channelnum = 0; // must be same as createPeer + c->reliable = true; + return c; +} + +ConnectionCommandPtr ConnectionCommand::send(session_t peer_id, u8 channelnum, + NetworkPacket *pkt, bool reliable) +{ + auto c = create(CONNCMD_SEND); + c->peer_id = peer_id; + c->channelnum = channelnum; + c->reliable = reliable; + c->data = pkt->oldForgePacket(); + return c; +} + +ConnectionCommandPtr ConnectionCommand::ack(session_t peer_id, u8 channelnum, const Buffer &data) +{ + auto c = create(CONCMD_ACK); + c->peer_id = peer_id; + c->channelnum = channelnum; + c->reliable = false; + data.copyTo(c->data); + return c; +} + +ConnectionCommandPtr ConnectionCommand::createPeer(session_t peer_id, const Buffer &data) +{ + auto c = create(CONCMD_CREATE_PEER); + c->peer_id = peer_id; + c->channelnum = 0; + c->reliable = true; + c->raw = true; + data.copyTo(c->data); + return c; +} + +/* + Channel +*/ + +u16 Channel::readNextIncomingSeqNum() +{ + MutexAutoLock internal(m_internal_mutex); + return next_incoming_seqnum; +} + +u16 Channel::incNextIncomingSeqNum() +{ + MutexAutoLock internal(m_internal_mutex); + u16 retval = next_incoming_seqnum; + next_incoming_seqnum++; + return retval; +} + +u16 Channel::readNextSplitSeqNum() +{ + MutexAutoLock internal(m_internal_mutex); + return next_outgoing_split_seqnum; +} +void Channel::setNextSplitSeqNum(u16 seqnum) +{ + MutexAutoLock internal(m_internal_mutex); + next_outgoing_split_seqnum = seqnum; +} + +u16 Channel::getOutgoingSequenceNumber(bool& successful) +{ + MutexAutoLock internal(m_internal_mutex); + + u16 retval = next_outgoing_seqnum; + successful = false; + + /* shortcut if there ain't any packet in outgoing list */ + if (outgoing_reliables_sent.empty()) { + successful = true; + next_outgoing_seqnum++; + return retval; + } + + u16 lowest_unacked_seqnumber; + if (outgoing_reliables_sent.getFirstSeqnum(lowest_unacked_seqnumber)) { + if (lowest_unacked_seqnumber < next_outgoing_seqnum) { + // ugly cast but this one is required in order to tell compiler we + // know about difference of two unsigned may be negative in general + // but we already made sure it won't happen in this case + if (((u16)(next_outgoing_seqnum - lowest_unacked_seqnumber)) > m_window_size) { + return 0; + } + } else { + // ugly cast but this one is required in order to tell compiler we + // know about difference of two unsigned may be negative in general + // but we already made sure it won't happen in this case + if ((next_outgoing_seqnum + (u16)(SEQNUM_MAX - lowest_unacked_seqnumber)) > + m_window_size) { + return 0; + } + } + } + + successful = true; + next_outgoing_seqnum++; + return retval; +} + +u16 Channel::readOutgoingSequenceNumber() +{ + MutexAutoLock internal(m_internal_mutex); + return next_outgoing_seqnum; +} + +bool Channel::putBackSequenceNumber(u16 seqnum) +{ + if (((seqnum + 1) % (SEQNUM_MAX+1)) == next_outgoing_seqnum) { + + next_outgoing_seqnum = seqnum; + return true; + } + return false; +} + +void Channel::UpdateBytesSent(unsigned int bytes, unsigned int packets) +{ + MutexAutoLock internal(m_internal_mutex); + current_bytes_transfered += bytes; + current_packet_successful += packets; +} + +void Channel::UpdateBytesReceived(unsigned int bytes) { + MutexAutoLock internal(m_internal_mutex); + current_bytes_received += bytes; +} + +void Channel::UpdateBytesLost(unsigned int bytes) +{ + MutexAutoLock internal(m_internal_mutex); + current_bytes_lost += bytes; +} + + +void Channel::UpdatePacketLossCounter(unsigned int count) +{ + MutexAutoLock internal(m_internal_mutex); + current_packet_loss += count; +} + +void Channel::UpdatePacketTooLateCounter() +{ + MutexAutoLock internal(m_internal_mutex); + current_packet_too_late++; +} + +void Channel::UpdateTimers(float dtime) +{ + bpm_counter += dtime; + packet_loss_counter += dtime; + + if (packet_loss_counter > 1.0f) { + packet_loss_counter -= 1.0f; + + unsigned int packet_loss; + unsigned int packets_successful; + unsigned int packet_too_late; + + bool reasonable_amount_of_data_transmitted = false; + + { + MutexAutoLock internal(m_internal_mutex); + packet_loss = current_packet_loss; + packet_too_late = current_packet_too_late; + packets_successful = current_packet_successful; + + // has half the window even been used? + if (current_bytes_transfered > (unsigned int) (m_window_size*512/2)) { + reasonable_amount_of_data_transmitted = true; + } + current_packet_loss = 0; + current_packet_too_late = 0; + current_packet_successful = 0; + } + + // Packets too late means either packet duplication along the way + // or we were too fast in resending it (which should be self-regulating). + // Count this a signal of congestion, like packet loss. + packet_loss = std::min(packet_loss + packet_too_late, packets_successful); + + /* dynamic window size */ + float successful_to_lost_ratio = 0.0f; + bool done = false; + + if (packets_successful > 0) { + successful_to_lost_ratio = packet_loss/packets_successful; + } else if (packet_loss > 0) { + setWindowSize(m_window_size - 10); + done = true; + } + + if (!done) { + if (successful_to_lost_ratio < 0.01f) { + /* don't even think about increasing if we didn't even + * use major parts of our window */ + if (reasonable_amount_of_data_transmitted) + setWindowSize(m_window_size + 100); + } else if (successful_to_lost_ratio < 0.05f) { + /* don't even think about increasing if we didn't even + * use major parts of our window */ + if (reasonable_amount_of_data_transmitted) + setWindowSize(m_window_size + 50); + } else if (successful_to_lost_ratio > 0.15f) { + setWindowSize(m_window_size - 100); + } else if (successful_to_lost_ratio > 0.1f) { + setWindowSize(m_window_size - 50); + } + } + } + + if (bpm_counter > 10.0f) { + { + MutexAutoLock internal(m_internal_mutex); + cur_kbps = + (((float) current_bytes_transfered)/bpm_counter)/1024.0f; + current_bytes_transfered = 0; + cur_kbps_lost = + (((float) current_bytes_lost)/bpm_counter)/1024.0f; + current_bytes_lost = 0; + cur_incoming_kbps = + (((float) current_bytes_received)/bpm_counter)/1024.0f; + current_bytes_received = 0; + bpm_counter = 0.0f; + } + + if (cur_kbps > max_kbps) { + max_kbps = cur_kbps; + } + + if (cur_kbps_lost > max_kbps_lost) { + max_kbps_lost = cur_kbps_lost; + } + + if (cur_incoming_kbps > max_incoming_kbps) { + max_incoming_kbps = cur_incoming_kbps; + } + + rate_samples = MYMIN(rate_samples+1,10); + float old_fraction = ((float) (rate_samples-1) )/( (float) rate_samples); + avg_kbps = avg_kbps * old_fraction + + cur_kbps * (1.0 - old_fraction); + avg_kbps_lost = avg_kbps_lost * old_fraction + + cur_kbps_lost * (1.0 - old_fraction); + avg_incoming_kbps = avg_incoming_kbps * old_fraction + + cur_incoming_kbps * (1.0 - old_fraction); + } +} + + +/* + Peer +*/ + +PeerHelper::~PeerHelper() +{ + if (m_peer) + m_peer->DecUseCount(); + + m_peer = nullptr; +} + +PeerHelper& PeerHelper::operator=(Peer* peer) +{ + if (m_peer) + m_peer->DecUseCount(); + m_peer = peer; + if (peer && !peer->IncUseCount()) + m_peer = nullptr; + return *this; +} + +bool Peer::IncUseCount() +{ + MutexAutoLock lock(m_exclusive_access_mutex); + + if (!m_pending_deletion) { + this->m_usage++; + return true; + } + + return false; +} + +void Peer::DecUseCount() +{ + { + MutexAutoLock lock(m_exclusive_access_mutex); + sanity_check(m_usage > 0); + m_usage--; + + if (!((m_pending_deletion) && (m_usage == 0))) + return; + } + delete this; +} + +void Peer::RTTStatistics(float rtt, const std::string &profiler_id, + unsigned int num_samples) { + + if (m_last_rtt > 0) { + /* set min max values */ + if (rtt < m_rtt.min_rtt) + m_rtt.min_rtt = rtt; + if (rtt >= m_rtt.max_rtt) + m_rtt.max_rtt = rtt; + + /* do average calculation */ + if (m_rtt.avg_rtt < 0.0) + m_rtt.avg_rtt = rtt; + else + m_rtt.avg_rtt = m_rtt.avg_rtt * (num_samples/(num_samples-1)) + + rtt * (1/num_samples); + + /* do jitter calculation */ + + //just use some neutral value at beginning + float jitter = m_rtt.jitter_min; + + if (rtt > m_last_rtt) + jitter = rtt-m_last_rtt; + + if (rtt <= m_last_rtt) + jitter = m_last_rtt - rtt; + + if (jitter < m_rtt.jitter_min) + m_rtt.jitter_min = jitter; + if (jitter >= m_rtt.jitter_max) + m_rtt.jitter_max = jitter; + + if (m_rtt.jitter_avg < 0.0) + m_rtt.jitter_avg = jitter; + else + m_rtt.jitter_avg = m_rtt.jitter_avg * (num_samples/(num_samples-1)) + + jitter * (1/num_samples); + + if (!profiler_id.empty()) { + g_profiler->graphAdd(profiler_id + " RTT [ms]", rtt * 1000.f); + g_profiler->graphAdd(profiler_id + " jitter [ms]", jitter * 1000.f); + } + } + /* save values required for next loop */ + m_last_rtt = rtt; +} + +bool Peer::isTimedOut(float timeout, std::string &reason) +{ + MutexAutoLock lock(m_exclusive_access_mutex); + + { + u64 current_time = porting::getTimeMs(); + float dtime = CALC_DTIME(m_last_timeout_check, current_time); + m_last_timeout_check = current_time; + m_timeout_counter += dtime; + } + if (m_timeout_counter > timeout) { + reason = "timeout counter"; + return true; + } + + return false; +} + +void Peer::Drop() +{ + { + MutexAutoLock usage_lock(m_exclusive_access_mutex); + m_pending_deletion = true; + if (m_usage != 0) + return; + } + + PROFILE(std::stringstream peerIdentifier1); + PROFILE(peerIdentifier1 << "runTimeouts[" << m_connection->getDesc() + << ";" << id << ";RELIABLE]"); + PROFILE(g_profiler->remove(peerIdentifier1.str())); + PROFILE(std::stringstream peerIdentifier2); + PROFILE(peerIdentifier2 << "sendPackets[" << m_connection->getDesc() + << ";" << id << ";RELIABLE]"); + PROFILE(ScopeProfiler peerprofiler(g_profiler, peerIdentifier2.str(), SPT_AVG)); + + delete this; +} + +UDPPeer::UDPPeer(session_t id, const Address &address, Connection *connection) : + Peer(id, address, connection) +{ + for (Channel &channel : channels) + channel.setWindowSize(START_RELIABLE_WINDOW_SIZE); +} + +bool UDPPeer::isTimedOut(float timeout, std::string &reason) +{ + if (Peer::isTimedOut(timeout, reason)) + return true; + + MutexAutoLock lock(m_exclusive_access_mutex); + + for (int i = 0; i < CHANNEL_COUNT; i++) { + Channel &channel = channels[i]; + if (channel.outgoing_reliables_sent.getTimedOuts(timeout) > 0) { + reason = "outgoing reliables channel=" + itos(i); + return true; + } + } + + return false; +} + +void UDPPeer::reportRTT(float rtt) +{ + if (rtt < 0) + return; + RTTStatistics(rtt,"rudp",MAX_RELIABLE_WINDOW_SIZE*10); + + // use this value to decide the resend timeout + const float rtt_stat = getStat(AVG_RTT); + if (rtt_stat < 0) + return; + float timeout = rtt_stat * RESEND_TIMEOUT_FACTOR; + if (timeout < RESEND_TIMEOUT_MIN) + timeout = RESEND_TIMEOUT_MIN; + if (timeout > RESEND_TIMEOUT_MAX) + timeout = RESEND_TIMEOUT_MAX; + + float timeout_old = getResendTimeout(); + setResendTimeout(timeout); + + if (std::abs(timeout - timeout_old) >= 0.001f) { + dout_con << m_connection->getDesc() << " set resend timeout " << timeout + << " (rtt=" << rtt_stat << ") for peer id: " << id << std::endl; + } +} + +bool UDPPeer::Ping(float dtime,SharedBuffer& data) +{ + m_ping_timer += dtime; + if (!isHalfOpen() && m_ping_timer >= PING_TIMEOUT) + { + // Create and send PING packet + writeU8(&data[0], PACKET_TYPE_CONTROL); + writeU8(&data[1], CONTROLTYPE_PING); + m_ping_timer = 0.0f; + return true; + } + return false; +} + +void UDPPeer::PutReliableSendCommand(ConnectionCommandPtr &c, + unsigned int max_packet_size) +{ + if (m_pending_disconnect) + return; + + Channel &chan = channels[c->channelnum]; + + if (chan.queued_commands.empty() && + /* don't queue more packets then window size */ + (chan.queued_reliables.size() + 1 < chan.getWindowSize() / 2)) { + LOG(dout_con<getDesc() + <<" processing reliable command for peer id: " << c->peer_id + <<" data size: " << c->data.getSize() << std::endl); + if (processReliableSendCommand(c, max_packet_size)) + return; + } else { + LOG(dout_con<getDesc() + <<" Queueing reliable command for peer id: " << c->peer_id + <<" data size: " << c->data.getSize() <= chan.getWindowSize() / 2) { + LOG(derr_con << m_connection->getDesc() + << "Possible packet stall to peer id: " << c->peer_id + << " queued_commands=" << chan.queued_commands.size() + << std::endl); + } + } + chan.queued_commands.push_back(c); +} + +bool UDPPeer::processReliableSendCommand( + ConnectionCommandPtr &c_ptr, + unsigned int max_packet_size) +{ + if (m_pending_disconnect) + return true; + + const auto &c = *c_ptr; + Channel &chan = channels[c.channelnum]; + + const u32 chunksize_max = max_packet_size + - BASE_HEADER_SIZE + - RELIABLE_HEADER_SIZE; + + std::list> originals; + + if (c.raw) { + originals.emplace_back(c.data); + } else { + u16 split_seqnum = chan.readNextSplitSeqNum(); + makeAutoSplitPacket(c.data, chunksize_max, split_seqnum, &originals); + chan.setNextSplitSeqNum(split_seqnum); + } + + sanity_check(originals.size() < MAX_RELIABLE_WINDOW_SIZE); + + bool have_sequence_number = false; + bool have_initial_sequence_number = false; + std::queue toadd; + u16 initial_sequence_number = 0; + + for (SharedBuffer &original : originals) { + u16 seqnum = chan.getOutgoingSequenceNumber(have_sequence_number); + + /* oops, we don't have enough sequence numbers to send this packet */ + if (!have_sequence_number) + break; + + if (!have_initial_sequence_number) + { + initial_sequence_number = seqnum; + have_initial_sequence_number = true; + } + + SharedBuffer reliable = makeReliablePacket(original, seqnum); + + // Add base headers and make a packet + BufferedPacketPtr p = con::makePacket(address, reliable, + m_connection->GetProtocolID(), m_connection->GetPeerID(), + c.channelnum); + + toadd.push(p); + } + + if (have_sequence_number) { + while (!toadd.empty()) { + BufferedPacketPtr p = toadd.front(); + toadd.pop(); +// LOG(dout_con<getDesc() +// << " queuing reliable packet for peer_id: " << c.peer_id +// << " channel: " << (c.channelnum&0xFF) +// << " seqnum: " << readU16(&p.data[BASE_HEADER_SIZE+1]) +// << std::endl) + chan.queued_reliables.push(p); + } + sanity_check(chan.queued_reliables.size() < 0xFFFF); + return true; + } + + u16 packets_available = toadd.size(); + /* we didn't get a single sequence number no need to fill queue */ + if (!have_initial_sequence_number) { + dout_con << m_connection->getDesc() << " No sequence numbers available!" << std::endl; + return false; + } + + while (!toadd.empty()) { + /* remove packet */ + toadd.pop(); + + bool successfully_put_back_sequence_number + = chan.putBackSequenceNumber( + (initial_sequence_number+toadd.size() % (SEQNUM_MAX+1))); + + FATAL_ERROR_IF(!successfully_put_back_sequence_number, "error"); + } + + u32 n_queued = chan.outgoing_reliables_sent.size(); + + LOG(dout_con<getDesc() + << " Windowsize exceeded on reliable sending " + << c.data.getSize() << " bytes" + << std::endl << "\t\tinitial_sequence_number: " + << initial_sequence_number + << std::endl << "\t\tgot at most : " + << packets_available << " packets" + << std::endl << "\t\tpackets queued : " + << n_queued + << std::endl); + + return false; +} + +void UDPPeer::RunCommandQueues( + unsigned int max_packet_size, + unsigned int maxtransfer) +{ + + for (Channel &channel : channels) { + + if ((!channel.queued_commands.empty()) && + (channel.queued_reliables.size() < maxtransfer)) { + try { + ConnectionCommandPtr c = channel.queued_commands.front(); + + LOG(dout_con << m_connection->getDesc() + << " processing queued reliable command " << std::endl); + + // Packet is processed, remove it from queue + if (processReliableSendCommand(c, max_packet_size)) { + channel.queued_commands.pop_front(); + } else { + LOG(dout_con << m_connection->getDesc() + << " Failed to queue packets for peer_id: " << c->peer_id + << ", delaying sending of " << c->data.getSize() + << " bytes" << std::endl); + } + } + catch (ItemNotFoundException &e) { + // intentionally empty + } + } + } +} + +u16 UDPPeer::getNextSplitSequenceNumber(u8 channel) +{ + assert(channel < CHANNEL_COUNT); // Pre-condition + return channels[channel].readNextSplitSeqNum(); +} + +void UDPPeer::setNextSplitSequenceNumber(u8 channel, u16 seqnum) +{ + assert(channel < CHANNEL_COUNT); // Pre-condition + channels[channel].setNextSplitSeqNum(seqnum); +} + +SharedBuffer UDPPeer::addSplitPacket(u8 channel, BufferedPacketPtr &toadd, + bool reliable) +{ + assert(channel < CHANNEL_COUNT); // Pre-condition + return channels[channel].incoming_splits.insert(toadd, reliable); +} + +/* + ConnectionEvent +*/ + +const char *ConnectionEvent::describe() const +{ + switch(type) { + case CONNEVENT_NONE: + return "CONNEVENT_NONE"; + case CONNEVENT_DATA_RECEIVED: + return "CONNEVENT_DATA_RECEIVED"; + case CONNEVENT_PEER_ADDED: + return "CONNEVENT_PEER_ADDED"; + case CONNEVENT_PEER_REMOVED: + return "CONNEVENT_PEER_REMOVED"; + case CONNEVENT_BIND_FAILED: + return "CONNEVENT_BIND_FAILED"; + } + return "Invalid ConnectionEvent"; +} + + +ConnectionEventPtr ConnectionEvent::create(ConnectionEventType type) +{ + return std::shared_ptr(new ConnectionEvent(type)); +} + +ConnectionEventPtr ConnectionEvent::dataReceived(session_t peer_id, const Buffer &data) +{ + auto e = create(CONNEVENT_DATA_RECEIVED); + e->peer_id = peer_id; + data.copyTo(e->data); + return e; +} + +ConnectionEventPtr ConnectionEvent::peerAdded(session_t peer_id, Address address) +{ + auto e = create(CONNEVENT_PEER_ADDED); + e->peer_id = peer_id; + e->address = address; + return e; +} + +ConnectionEventPtr ConnectionEvent::peerRemoved(session_t peer_id, bool is_timeout, Address address) +{ + auto e = create(CONNEVENT_PEER_REMOVED); + e->peer_id = peer_id; + e->timeout = is_timeout; + e->address = address; + return e; +} + +ConnectionEventPtr ConnectionEvent::bindFailed() +{ + return create(CONNEVENT_BIND_FAILED); +} + +/* + Connection +*/ + +Connection::Connection(u32 max_packet_size, float timeout, + bool ipv6, PeerHandler *peerhandler) : + m_udpSocket(ipv6), + m_protocol_id(PROTOCOL_ID), + m_sendThread(new ConnectionSendThread(max_packet_size, timeout)), + m_receiveThread(new ConnectionReceiveThread()), + m_bc_peerhandler(peerhandler) + +{ + /* Amount of time Receive() will wait for data, this is entirely different + * from the connection timeout */ + m_udpSocket.setTimeoutMs(500); + + m_sendThread->setParent(this); + m_receiveThread->setParent(this); + + m_sendThread->start(); + m_receiveThread->start(); +} + + +Connection::~Connection() +{ + m_shutting_down = true; + // request threads to stop + m_sendThread->stop(); + m_receiveThread->stop(); + + //TODO for some unkonwn reason send/receive threads do not exit as they're + // supposed to be but wait on peer timeout. To speed up shutdown we reduce + // timeout to half a second. + m_sendThread->setPeerTimeout(0.5); + + // wait for threads to finish + m_sendThread->wait(); + m_receiveThread->wait(); + + // Delete peers + for (auto &peer : m_peers) { + delete peer.second; + } +} + +/* Internal stuff */ + +void Connection::putEvent(ConnectionEventPtr e) +{ + assert(e->type != CONNEVENT_NONE); // Pre-condition + m_event_queue.push_back(e); +} + +void Connection::TriggerSend() +{ + m_sendThread->Trigger(); +} + +PeerHelper Connection::getPeerNoEx(session_t peer_id) +{ + MutexAutoLock peerlock(m_peers_mutex); + std::map::iterator node = m_peers.find(peer_id); + + if (node == m_peers.end()) { + return PeerHelper(NULL); + } + + // Error checking + FATAL_ERROR_IF(node->second->id != peer_id, "Invalid peer id"); + + return PeerHelper(node->second); +} + +/* find peer_id for address */ +session_t Connection::lookupPeer(const Address& sender) +{ + MutexAutoLock peerlock(m_peers_mutex); + for (auto &it: m_peers) { + Peer *peer = it.second; + if (peer->isPendingDeletion()) + continue; + + if (peer->getAddress() == sender) + return peer->id; + } + + return PEER_ID_INEXISTENT; +} + +u32 Connection::getActiveCount() +{ + MutexAutoLock peerlock(m_peers_mutex); + u32 count = 0; + for (auto &it : m_peers) { + Peer *peer = it.second; + if (peer->isPendingDeletion()) + continue; + if (peer->isHalfOpen()) + continue; + count++; + } + return count; +} + +bool Connection::deletePeer(session_t peer_id, bool timeout) +{ + Peer *peer = 0; + + /* lock list as short as possible */ + { + MutexAutoLock peerlock(m_peers_mutex); + if (m_peers.find(peer_id) == m_peers.end()) + return false; + peer = m_peers[peer_id]; + m_peers.erase(peer_id); + auto it = std::find(m_peer_ids.begin(), m_peer_ids.end(), peer_id); + m_peer_ids.erase(it); + } + + // Create event + putEvent(ConnectionEvent::peerRemoved(peer_id, timeout, peer->getAddress())); + + peer->Drop(); + return true; +} + +/* Interface */ + +ConnectionEventPtr Connection::waitEvent(u32 timeout_ms) +{ + try { + return m_event_queue.pop_front(timeout_ms); + } catch(ItemNotFoundException &ex) { + return ConnectionEvent::create(CONNEVENT_NONE); + } +} + +void Connection::putCommand(ConnectionCommandPtr c) +{ + if (!m_shutting_down) { + m_command_queue.push_back(c); + m_sendThread->Trigger(); + } +} + +void Connection::Serve(Address bind_addr) +{ + putCommand(ConnectionCommand::serve(bind_addr)); +} + +void Connection::Connect(Address address) +{ + putCommand(ConnectionCommand::connect(address)); +} + +bool Connection::Connected() +{ + MutexAutoLock peerlock(m_peers_mutex); + + if (m_peers.size() != 1) + return false; + + std::map::iterator node = m_peers.find(PEER_ID_SERVER); + if (node == m_peers.end()) + return false; + + if (m_peer_id == PEER_ID_INEXISTENT) + return false; + + return true; +} + +void Connection::Disconnect() +{ + putCommand(ConnectionCommand::disconnect()); +} + +bool Connection::ReceiveTimeoutMs(NetworkPacket *pkt, u32 timeout_ms) +{ + /* + Note that this function can potentially wait infinitely if non-data + events keep happening before the timeout expires. + This is not considered to be a problem (is it?) + */ + for(;;) { + ConnectionEventPtr e_ptr = waitEvent(timeout_ms); + const ConnectionEvent &e = *e_ptr; + + if (e.type != CONNEVENT_NONE) { + LOG(dout_con << getDesc() << ": Receive: got event: " + << e.describe() << std::endl); + } + + switch (e.type) { + case CONNEVENT_NONE: + return false; + case CONNEVENT_DATA_RECEIVED: + // Data size is lesser than command size, ignoring packet + if (e.data.getSize() < 2) { + continue; + } + + pkt->putRawPacket(*e.data, e.data.getSize(), e.peer_id); + return true; + case CONNEVENT_PEER_ADDED: { + UDPPeer tmp(e.peer_id, e.address, this); + if (m_bc_peerhandler) + m_bc_peerhandler->peerAdded(&tmp); + continue; + } + case CONNEVENT_PEER_REMOVED: { + UDPPeer tmp(e.peer_id, e.address, this); + if (m_bc_peerhandler) + m_bc_peerhandler->deletingPeer(&tmp, e.timeout); + continue; + } + case CONNEVENT_BIND_FAILED: + throw ConnectionBindFailed("Failed to bind socket " + "(port already in use?)"); + } + } + return false; +} + +void Connection::Send(session_t peer_id, u8 channelnum, + NetworkPacket *pkt, bool reliable) +{ + assert(channelnum < CHANNEL_COUNT); // Pre-condition + + // approximate check similar to UDPPeer::processReliableSendCommand() + // to get nicer errors / backtraces if this happens. + if (reliable && pkt->getSize() > MAX_RELIABLE_WINDOW_SIZE*512) { + std::ostringstream oss; + oss << "Packet too big for window, peer_id=" << peer_id + << " command=" << pkt->getCommand() << " size=" << pkt->getSize(); + FATAL_ERROR(oss.str().c_str()); + } + + putCommand(ConnectionCommand::send(peer_id, channelnum, pkt, reliable)); +} + +Address Connection::GetPeerAddress(session_t peer_id) +{ + PeerHelper peer = getPeerNoEx(peer_id); + + if (!peer) + throw PeerNotFoundException("No address for peer found!"); + return peer->getAddress(); +} + +float Connection::getPeerStat(session_t peer_id, rtt_stat_type type) +{ + PeerHelper peer = getPeerNoEx(peer_id); + if (!peer) + return -1; + return peer->getStat(type); +} + +float Connection::getLocalStat(rate_stat_type type) +{ + PeerHelper peer = getPeerNoEx(PEER_ID_SERVER); + + FATAL_ERROR_IF(!peer, "Connection::getLocalStat we couldn't get our own peer? are you serious???"); + + float retval = 0; + + for (Channel &channel : dynamic_cast(&peer)->channels) { + switch(type) { + case CUR_DL_RATE: + retval += channel.getCurrentDownloadRateKB(); + break; + case AVG_DL_RATE: + retval += channel.getAvgDownloadRateKB(); + break; + case CUR_INC_RATE: + retval += channel.getCurrentIncomingRateKB(); + break; + case AVG_INC_RATE: + retval += channel.getAvgIncomingRateKB(); + break; + case AVG_LOSS_RATE: + retval += channel.getAvgLossRateKB(); + break; + case CUR_LOSS_RATE: + retval += channel.getCurrentLossRateKB(); + break; + default: + FATAL_ERROR("Connection::getLocalStat Invalid stat type"); + } + } + return retval; +} + +session_t Connection::createPeer(const Address &sender, int fd) +{ + // Somebody wants to make a new connection + + // Get a unique peer id + const session_t minimum = 2; + const session_t overflow = MAX_UDP_PEERS; + + /* + Find an unused peer id + */ + + MutexAutoLock lock(m_peers_mutex); + session_t peer_id_new; + for (int tries = 0; tries < 100; tries++) { + peer_id_new = myrand_range(minimum, overflow - 1); + if (m_peers.find(peer_id_new) == m_peers.end()) + break; + } + if (m_peers.find(peer_id_new) != m_peers.end()) { + errorstream << getDesc() << " ran out of peer ids" << std::endl; + return PEER_ID_INEXISTENT; + } + + // Create a peer + Peer *peer = 0; + peer = new UDPPeer(peer_id_new, sender, this); + + m_peers[peer->id] = peer; + m_peer_ids.push_back(peer->id); + + LOG(dout_con << getDesc() + << "createPeer(): giving peer_id=" << peer_id_new << std::endl); + + { + Buffer reply(4); + writeU8(&reply[0], PACKET_TYPE_CONTROL); + writeU8(&reply[1], CONTROLTYPE_SET_PEER_ID); + writeU16(&reply[2], peer_id_new); + putCommand(ConnectionCommand::createPeer(peer_id_new, reply)); + } + + // Create peer addition event + putEvent(ConnectionEvent::peerAdded(peer_id_new, sender)); + + // We're now talking to a valid peer_id + return peer_id_new; +} + +const std::string Connection::getDesc() +{ + MutexAutoLock _(m_info_mutex); + return std::string("con(")+ + itos(m_udpSocket.GetHandle())+"/"+itos(m_peer_id)+")"; +} + +void Connection::DisconnectPeer(session_t peer_id) +{ + putCommand(ConnectionCommand::disconnect_peer(peer_id)); +} + +void Connection::doResendOne(session_t peer_id) +{ + assert(peer_id != PEER_ID_INEXISTENT); + putCommand(ConnectionCommand::resend_one(peer_id)); +} + +void Connection::sendAck(session_t peer_id, u8 channelnum, u16 seqnum) +{ + assert(channelnum < CHANNEL_COUNT); // Pre-condition + + LOG(dout_con< ack(4); + writeU8(&ack[0], PACKET_TYPE_CONTROL); + writeU8(&ack[1], CONTROLTYPE_ACK); + writeU16(&ack[2], seqnum); + + putCommand(ConnectionCommand::ack(peer_id, channelnum, ack)); + m_sendThread->Trigger(); +} + +UDPPeer* Connection::createServerPeer(const Address &address) +{ + if (ConnectedToServer()) + throw ConnectionException("Already connected to a server"); + + UDPPeer *peer = new UDPPeer(PEER_ID_SERVER, address, this); + peer->SetFullyOpen(); + + { + MutexAutoLock lock(m_peers_mutex); + m_peers[peer->id] = peer; + m_peer_ids.push_back(peer->id); + } + + return peer; +} + +} // namespace diff --git a/src/network/mtp/impl.h b/src/network/mtp/impl.h new file mode 100644 index 000000000..7105bac6d --- /dev/null +++ b/src/network/mtp/impl.h @@ -0,0 +1,322 @@ +/* +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. +*/ + +#pragma once + +#include "network/connection.h" +#include "network/socket.h" +#include "constants.h" +#include "util/pointer.h" +#include "util/container.h" +#include "util/numeric.h" +#include "porting.h" +#include "network/networkprotocol.h" +#include +#include +#include + +namespace con +{ + +class ConnectionReceiveThread; +class ConnectionSendThread; + +class Peer; + +// FIXME: Peer refcounting should generally be replaced by std::shared_ptr +class PeerHelper +{ +public: + PeerHelper() = default; + inline PeerHelper(Peer *peer) { *this = peer; } + ~PeerHelper(); + + PeerHelper& operator=(Peer *peer); + inline Peer* operator->() const { return m_peer; } + inline Peer* operator&() const { return m_peer; } + + inline bool operator!() { return !m_peer; } + inline bool operator!=(std::nullptr_t) { return !!m_peer; } + +private: + Peer *m_peer = nullptr; +}; + +/* + Connection +*/ + +enum ConnectionEventType { + CONNEVENT_NONE, + CONNEVENT_DATA_RECEIVED, + CONNEVENT_PEER_ADDED, + CONNEVENT_PEER_REMOVED, + CONNEVENT_BIND_FAILED, +}; + +struct ConnectionEvent; +typedef std::shared_ptr ConnectionEventPtr; + +// This is very similar to ConnectionCommand +struct ConnectionEvent +{ + const ConnectionEventType type; + session_t peer_id = 0; + Buffer data; + bool timeout = false; + Address address; + + // We don't want to copy "data" + DISABLE_CLASS_COPY(ConnectionEvent); + + static ConnectionEventPtr create(ConnectionEventType type); + static ConnectionEventPtr dataReceived(session_t peer_id, const Buffer &data); + static ConnectionEventPtr peerAdded(session_t peer_id, Address address); + static ConnectionEventPtr peerRemoved(session_t peer_id, bool is_timeout, Address address); + static ConnectionEventPtr bindFailed(); + + const char *describe() const; + +private: + ConnectionEvent(ConnectionEventType type_) : + type(type_) {} +}; + +struct ConnectionCommand; +typedef std::shared_ptr ConnectionCommandPtr; + +struct BufferedPacket; +typedef std::shared_ptr BufferedPacketPtr; + +class Connection; +class PeerHandler; + +class Peer : public IPeer { + public: + friend class PeerHelper; + + virtual ~Peer() { + MutexAutoLock usage_lock(m_exclusive_access_mutex); + FATAL_ERROR_IF(m_usage != 0, "Reference counting failure"); + } + + void Drop(); + + virtual void PutReliableSendCommand(ConnectionCommandPtr &c, + unsigned int max_packet_size) {}; + + bool isPendingDeletion() const { + MutexAutoLock lock(m_exclusive_access_mutex); + return m_pending_deletion; + } + void ResetTimeout() { + MutexAutoLock lock(m_exclusive_access_mutex); + m_timeout_counter = 0; + } + + bool isHalfOpen() const { + MutexAutoLock lock(m_exclusive_access_mutex); + return m_half_open; + } + void SetFullyOpen() { + MutexAutoLock lock(m_exclusive_access_mutex); + m_half_open = false; + } + + virtual bool isTimedOut(float timeout, std::string &reason); + + unsigned int m_increment_packets_remaining = 0; + + virtual u16 getNextSplitSequenceNumber(u8 channel) { return 0; }; + virtual void setNextSplitSequenceNumber(u8 channel, u16 seqnum) {}; + virtual SharedBuffer addSplitPacket(u8 channel, BufferedPacketPtr &toadd, + bool reliable) + { + FATAL_ERROR("unimplemented in abstract class"); + } + + virtual bool Ping(float dtime, SharedBuffer& data) { return false; }; + + virtual float getStat(rtt_stat_type type) const { + switch (type) { + case MIN_RTT: + return m_rtt.min_rtt; + case MAX_RTT: + return m_rtt.max_rtt; + case AVG_RTT: + return m_rtt.avg_rtt; + case MIN_JITTER: + return m_rtt.jitter_min; + case MAX_JITTER: + return m_rtt.jitter_max; + case AVG_JITTER: + return m_rtt.jitter_avg; + } + return -1; + } + + protected: + Peer(session_t id, const Address &address, Connection *connection) : + IPeer(id), + m_connection(connection), + address(address), + m_last_timeout_check(porting::getTimeMs()) + { + } + + virtual void reportRTT(float rtt) {}; + + void RTTStatistics(float rtt, + const std::string &profiler_id = "", + unsigned int num_samples = 1000); + + bool IncUseCount(); + void DecUseCount(); + + mutable std::mutex m_exclusive_access_mutex; + + bool m_pending_deletion = false; + + Connection *m_connection; + + // Address of the peer + Address address; + + // Ping timer + float m_ping_timer = 0.0f; + + private: + struct rttstats { + float jitter_min = FLT_MAX; + float jitter_max = 0.0f; + float jitter_avg = -1.0f; + float min_rtt = FLT_MAX; + float max_rtt = 0.0f; + float avg_rtt = -1.0f; + }; + + rttstats m_rtt; + float m_last_rtt = -1.0f; + + /* + Until the peer has communicated with us using their assigned peer id + the connection is considered half-open. + During this time we inhibit re-sending any reliables or pings. This + is to avoid spending too many resources on a potential DoS attack + and to make sure Minetest servers are not useful for UDP amplificiation. + */ + bool m_half_open = true; + + // current usage count + unsigned int m_usage = 0; + + // Seconds from last receive + float m_timeout_counter = 0.0f; + + u64 m_last_timeout_check; +}; + +class UDPPeer; + +class Connection final : public IConnection +{ +public: + friend class ConnectionSendThread; + friend class ConnectionReceiveThread; + + Connection(u32 max_packet_size, float timeout, bool ipv6, + PeerHandler *peerhandler); + ~Connection(); + + /* Interface */ + ConnectionEventPtr waitEvent(u32 timeout_ms); + + void putCommand(ConnectionCommandPtr c); + + void Serve(Address bind_addr); + void Connect(Address address); + bool Connected(); + void Disconnect(); + bool ReceiveTimeoutMs(NetworkPacket *pkt, u32 timeout_ms); + void Send(session_t peer_id, u8 channelnum, NetworkPacket *pkt, bool reliable); + session_t GetPeerID() const { return m_peer_id; } + Address GetPeerAddress(session_t peer_id); + float getPeerStat(session_t peer_id, rtt_stat_type type); + float getLocalStat(rate_stat_type type); + u32 GetProtocolID() const { return m_protocol_id; }; + const std::string getDesc(); + void DisconnectPeer(session_t peer_id); + +protected: + PeerHelper getPeerNoEx(session_t peer_id); + session_t lookupPeer(const Address& sender); + + session_t createPeer(const Address& sender, int fd); + UDPPeer* createServerPeer(const Address& sender); + bool deletePeer(session_t peer_id, bool timeout); + + void SetPeerID(session_t id) { m_peer_id = id; } + + void doResendOne(session_t peer_id); + + void sendAck(session_t peer_id, u8 channelnum, u16 seqnum); + + std::vector getPeerIDs() + { + MutexAutoLock peerlock(m_peers_mutex); + return m_peer_ids; + } + + u32 getActiveCount(); + + UDPSocket m_udpSocket; + // Command queue: user -> SendThread + MutexedQueue m_command_queue; + + void putEvent(ConnectionEventPtr e); + + void TriggerSend(); + + bool ConnectedToServer() + { + return getPeerNoEx(PEER_ID_SERVER) != nullptr; + } +private: + // Event queue: ReceiveThread -> user + MutexedQueue m_event_queue; + + session_t m_peer_id = 0; + u32 m_protocol_id; + + std::map m_peers; + std::vector m_peer_ids; + std::mutex m_peers_mutex; + + std::unique_ptr m_sendThread; + std::unique_ptr m_receiveThread; + + mutable std::mutex m_info_mutex; + + // Backwards compatibility + PeerHandler *m_bc_peerhandler; + + bool m_shutting_down = false; +}; + +} // namespace diff --git a/src/network/connection_internal.h b/src/network/mtp/internal.h similarity index 91% rename from src/network/connection_internal.h rename to src/network/mtp/internal.h index a528f3fef..4cf6cb57a 100644 --- a/src/network/connection_internal.h +++ b/src/network/mtp/internal.h @@ -19,11 +19,10 @@ with this program; if not, write to the Free Software Foundation, Inc., #pragma once -/********************************************/ -/* may only be included from in src/network */ -/********************************************/ +#include "network/mtp/impl.h" -#include "connection.h" +// Constant that differentiates the protocol from random data and other protocols +#define PROTOCOL_ID 0x4f457403 #define MAX_UDP_PEERS 65535 @@ -161,6 +160,32 @@ inline float CALC_DTIME(u64 lasttime, u64 curtime) return MYMAX(MYMIN(value, 0.1f), 0.0f); } +/* Exceptions */ + +class NotFoundException : public BaseException +{ +public: + NotFoundException(const char *s) : BaseException(s) {} +}; + +class ProcessedSilentlyException : public BaseException +{ +public: + ProcessedSilentlyException(const char *s) : BaseException(s) {} +}; + +class ProcessedQueued : public BaseException +{ +public: + ProcessedQueued(const char *s) : BaseException(s) {} +}; + +class IncomingDataCorruption : public BaseException +{ +public: + IncomingDataCorruption(const char *s) : BaseException(s) {} +}; + /* Struct for all kinds of packets. Includes following data: @@ -329,15 +354,24 @@ private: static ConnectionCommandPtr create(ConnectionCommandType type); }; -/* maximum window size to use, 0xFFFF is theoretical maximum. don't think about +/* + * Window sizes to use, in packets (not bytes!). + * 0xFFFF is theoretical maximum. don't think about * touching it, the less you're away from it the more likely data corruption * will occur + * + * Note: window sizes directly translate to maximum possible throughput, e.g. + * (2048 * 512 bytes) / 33ms = 15 MiB/s */ + +// Due to backwards compatibility we have different window sizes for what we'll +// accept from peers vs. what we use for sending. #define MAX_RELIABLE_WINDOW_SIZE 0x8000 +#define MAX_RELIABLE_WINDOW_SIZE_SEND 2048 /* starting value for window size */ -#define START_RELIABLE_WINDOW_SIZE 0x400 +#define START_RELIABLE_WINDOW_SIZE 64 /* minimum value for window size */ -#define MIN_RELIABLE_WINDOW_SIZE 0x40 +#define MIN_RELIABLE_WINDOW_SIZE 32 class Channel { @@ -405,7 +439,7 @@ public: void setWindowSize(long size) { - m_window_size = (u16)rangelim(size, MIN_RELIABLE_WINDOW_SIZE, MAX_RELIABLE_WINDOW_SIZE); + m_window_size = (u16)rangelim(size, MIN_RELIABLE_WINDOW_SIZE, MAX_RELIABLE_WINDOW_SIZE_SEND); } private: diff --git a/src/network/connectionthreads.cpp b/src/network/mtp/threads.cpp similarity index 96% rename from src/network/connectionthreads.cpp rename to src/network/mtp/threads.cpp index d5c9a39ed..50b7fa1e3 100644 --- a/src/network/connectionthreads.cpp +++ b/src/network/mtp/threads.cpp @@ -18,7 +18,7 @@ with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#include "connectionthreads.h" +#include "network/mtp/threads.h" #include "log.h" #include "profiler.h" #include "settings.h" @@ -35,7 +35,6 @@ namespace con #define PROFILE(a) #undef DEBUG_CONNECTION_KBPS #else -/* this mutex is used to achieve log message consistency */ #define PROFILE(a) a //#define DEBUG_CONNECTION_KBPS #undef DEBUG_CONNECTION_KBPS @@ -59,14 +58,24 @@ static inline u8 readChannel(const u8 *packetdata) /* Connection Threads */ /******************************************************************************/ +#define MPPI_SETTING "max_packets_per_iteration" + ConnectionSendThread::ConnectionSendThread(unsigned int max_packet_size, float timeout) : Thread("ConnectionSend"), m_max_packet_size(max_packet_size), m_timeout(timeout), - m_max_data_packets_per_iteration(g_settings->getU16("max_packets_per_iteration")) + m_max_data_packets_per_iteration(g_settings->getU16(MPPI_SETTING)) { - SANITY_CHECK(m_max_data_packets_per_iteration > 1); + auto &mppi = m_max_data_packets_per_iteration; + mppi = MYMAX(mppi, 1); + + const auto mppi_default = Settings::getLayer(SL_DEFAULTS)->getU16(MPPI_SETTING); + if (mppi < mppi_default) { + warningstream << "You are running the network code with a non-default " + "configuration (" MPPI_SETTING "=" << mppi << "). " + "This is not recommended in production." << std::endl; + } } void *ConnectionSendThread::run() @@ -211,7 +220,8 @@ void ConnectionSendThread::runTimeouts(float dtime, u32 peer_packet_quota) } float resend_timeout = udpPeer->getResendTimeout(); - for (Channel &channel : udpPeer->channels) { + for (int ch = 0; ch < CHANNEL_COUNT; ch++) { + auto &channel = udpPeer->channels[ch]; // Remove timed out incomplete unreliable split packets channel.incoming_splits.removeUnreliableTimedOuts(dtime, peer_timeout); @@ -232,8 +242,8 @@ void ConnectionSendThread::runTimeouts(float dtime, u32 peer_packet_quota) if (!timed_outs.empty()) { dout_con << m_connection->getDesc() << "Skipping re-send of " << timed_outs.size() << - " timed-out reliables to peer_id " << udpPeer->id - << " (half-open)." << std::endl; + " timed-out reliables to peer_id=" << udpPeer->id + << " channel=" << ch << " (half-open)." << std::endl; } continue; } @@ -246,7 +256,14 @@ void ConnectionSendThread::runTimeouts(float dtime, u32 peer_packet_quota) for (const auto &k : timed_outs) resendReliable(channel, k.get(), resend_timeout); + auto ws_old = channel.getWindowSize(); channel.UpdateTimers(dtime); + auto ws_new = channel.getWindowSize(); + if (ws_old != ws_new) { + dout_con << m_connection->getDesc() << + "Window size adjusted to " << ws_new << " for peer_id=" + << udpPeer->id << " channel=" << ch << std::endl; + } } /* send ping if necessary */ @@ -299,12 +316,12 @@ void ConnectionSendThread::rawSend(const BufferedPacket *p) assert(p); try { m_connection->m_udpSocket.Send(p->address, p->data, p->size()); - LOG(dout_con << m_connection->getDesc() - << " rawSend: " << p->size() - << " bytes sent" << std::endl); + //LOG(dout_con << m_connection->getDesc() + // << " rawSend: " << p->size() + // << " bytes sent" << std::endl); } catch (SendFailedException &e) { LOG(derr_con << m_connection->getDesc() - << "Connection::rawSend(): SendFailedException: " + << "SendFailedException: " << e.what() << " to " << p->address.serializeString() << std::endl); } } @@ -317,6 +334,7 @@ void ConnectionSendThread::sendAsPacketReliable(BufferedPacketPtr &p, Channel *c channel->outgoing_reliables_sent.insert(p, (channel->readOutgoingSequenceNumber() - MAX_RELIABLE_WINDOW_SIZE) % (MAX_RELIABLE_WINDOW_SIZE + 1)); + // wtf is this calculation?? ^ } catch (AlreadyExistsException &e) { LOG(derr_con << m_connection->getDesc() @@ -675,9 +693,9 @@ void ConnectionSendThread::sendPackets(float dtime, u32 peer_packet_quota) PROFILE(ScopeProfiler peerprofiler(g_profiler, peerIdentifier.str(), SPT_AVG)); - LOG(dout_con << m_connection->getDesc() - << " Handle per peer queues: peer_id=" << peerId - << " packet quota: " << peer->m_increment_packets_remaining << std::endl); + //LOG(dout_con << m_connection->getDesc() + // << " Handle per peer queues: peer_id=" << peerId + // << " packet quota: " << peer->m_increment_packets_remaining << std::endl); // first send queued reliable packets for all peers (if possible) for (unsigned int i = 0; i < CHANNEL_COUNT; i++) { @@ -769,7 +787,7 @@ void ConnectionSendThread::sendPackets(float dtime, u32 peer_packet_quota) } } - if (peer_packet_quota > 0) { + if (peer_packet_quota > 0 && !stopRequested()) { for (session_t peerId : peerIds) { PeerHelper peer = m_connection->getPeerNoEx(peerId); if (!peer) @@ -1180,7 +1198,7 @@ SharedBuffer ConnectionReceiveThread::handlePacketType_Control(Channel *chan // an overflow is quite unlikely but as it'd result in major // rtt miscalculation we handle it here if (current_time > p->absolute_send_time) { - float rtt = (current_time - p->absolute_send_time) / 1000.0; + float rtt = (current_time - p->absolute_send_time) / 1000.0f; // Let peer calculate stuff according to it // (avg_rtt and resend_timeout) @@ -1325,12 +1343,6 @@ SharedBuffer ConnectionReceiveThread::handlePacketType_Reliable(Channel *cha << ", seqnum: " << seqnum << std::endl;) m_connection->sendAck(peer->id, channelnum, seqnum); - // we already have this packet so this one was on wire at least - // the current timeout - // we don't know how long this packet was on wire don't do silly guessing - // dynamic_cast(&peer)-> - // reportRTT(dynamic_cast(&peer)->getResendTimeout()); - throw ProcessedSilentlyException("Retransmitting ack for old packet"); } } diff --git a/src/network/connectionthreads.h b/src/network/mtp/threads.h similarity index 99% rename from src/network/connectionthreads.h rename to src/network/mtp/threads.h index fff71f657..b41307fa6 100644 --- a/src/network/connectionthreads.h +++ b/src/network/mtp/threads.h @@ -26,7 +26,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include "threading/thread.h" -#include "connection_internal.h" +#include "network/mtp/internal.h" namespace con { diff --git a/src/network/networkexceptions.h b/src/network/networkexceptions.h index 58a3bb490..1810106e5 100644 --- a/src/network/networkexceptions.h +++ b/src/network/networkexceptions.h @@ -26,11 +26,6 @@ namespace con /* Exceptions */ -class NotFoundException : public BaseException -{ -public: - NotFoundException(const char *s) : BaseException(s) {} -}; class PeerNotFoundException : public BaseException { @@ -56,29 +51,6 @@ public: InvalidIncomingDataException(const char *s) : BaseException(s) {} }; -class NoIncomingDataException : public BaseException -{ -public: - NoIncomingDataException(const char *s) : BaseException(s) {} -}; - -class ProcessedSilentlyException : public BaseException -{ -public: - ProcessedSilentlyException(const char *s) : BaseException(s) {} -}; - -class ProcessedQueued : public BaseException -{ -public: - ProcessedQueued(const char *s) : BaseException(s) {} -}; - -class IncomingDataCorruption : public BaseException -{ -public: - IncomingDataCorruption(const char *s) : BaseException(s) {} -}; } class SocketException : public BaseException diff --git a/src/network/networkprotocol.h b/src/network/networkprotocol.h index fbe8eb8be..0bbacd584 100644 --- a/src/network/networkprotocol.h +++ b/src/network/networkprotocol.h @@ -224,10 +224,26 @@ with this program; if not, write to the Free Software Foundation, Inc., Add TOCLIENT_MOVE_PLAYER_REL Move default minimap from client-side C++ to server-side builtin Lua [scheduled bump for 5.9.0] + PROTOCOL VERSION 45: + Minimap HUD element supports negative size values as percentages + [bump for 5.9.1] + PROTOCOL VERSION 46: + Move default hotbar from client-side C++ to server-side builtin Lua + Add shadow tint to Lighting packets + Add shadow color to CloudParam packets + Move death screen to server and make it a regular formspec + The server no longer triggers the hardcoded client-side death + formspec, but the client still supports it for compatibility with + old servers. + Rename TOCLIENT_DEATHSCREEN to TOCLIENT_DEATHSCREEN_LEGACY + Rename TOSERVER_RESPAWN to TOSERVER_RESPAWN_LEGACY + [scheduled bump for 5.10.0] + PROTOCOL VERSION 47: Add artificial light color packet */ -#define LATEST_PROTOCOL_VERSION 44 +#define LATEST_PROTOCOL_VERSION 46 + #define LATEST_PROTOCOL_VERSION_STRING TOSTRING(LATEST_PROTOCOL_VERSION) // Server's supported network protocol range @@ -238,12 +254,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #define CLIENT_PROTOCOL_VERSION_MIN 37 #define CLIENT_PROTOCOL_VERSION_MAX LATEST_PROTOCOL_VERSION -// Constant that differentiates the protocol from random data and other protocols -#define PROTOCOL_ID 0x4f457403 - -#define PASSWORD_SIZE 28 // Maximum password length. Allows for - // base64-encoded SHA-1 (27+\0). - // See also formspec [Version History] in doc/lua_api.md #define FORMSPEC_API_VERSION 7 @@ -258,10 +268,10 @@ enum ToClientCommand : u16 Sent after TOSERVER_INIT. u8 deployed serialization version - u16 deployed network compression mode + u16 unused (network compression, never implemeneted) u16 deployed protocol version u32 supported auth methods - std::string username that should be used for legacy hash (for proper casing) + std::string unused (used to be username) */ TOCLIENT_AUTH_ACCEPT = 0x03, /* @@ -389,10 +399,10 @@ enum ToClientCommand : u16 f32 transition_time */ - TOCLIENT_DEATHSCREEN = 0x37, + TOCLIENT_DEATHSCREEN_LEGACY = 0x37, /* - u8 bool set camera point target - v3f1000 camera point target (to point the death cause or whatever) + u8 bool unused + v3f1000 unused */ TOCLIENT_MEDIA = 0x38, @@ -503,22 +513,50 @@ enum ToClientCommand : u16 TOCLIENT_SPAWN_PARTICLE = 0x46, /* - -- struct range { T min, T max, f32 bias }; + using range = RangedParameter { + T min, max + f32 bias + } + using tween = TweenedParameter { + u8 style + u16 reps + f32 beginning + T start, end + } + v3f pos v3f velocity v3f acceleration f32 expirationtime f32 size u8 bool collisiondetection + u32 len u8[len] texture + u8 bool vertical - u8 collision_removal + u8 bool collision_removal + TileAnimation animation + u8 glow - u8 object_collision + u8 bool object_collision + + u16 node_param0 + u8 node_param2 + u8 node_tile + v3f drag - range bounce + range jitter + range bounce + + texture { + u8 flags (ParticleTextureFlags) + -- bit 0: animated + -- next bits: blend mode (BlendMode) + tween alpha + tween scale + } */ TOCLIENT_ADD_PARTICLESPAWNER = 0x47, @@ -537,7 +575,7 @@ enum ToClientCommand : u16 u16 amount f32 spawntime if PROTOCOL_VERSION >= 42 { - tween pos, vel, acc, exptime, size + tween> pos, vel, acc, exptime, size } else { v3f minpos v3f maxpos @@ -551,14 +589,23 @@ enum ToClientCommand : u16 f32 maxsize } u8 bool collisiondetection + u32 len u8[len] texture + + u32 spawner_id u8 bool vertical - u8 collision_removal - u32 id + u8 bool collision_removal + u32 attached_id + TileAnimation animation + u8 glow - u8 object_collision + u8 bool object_collision + + u16 node_param0 + u8 node_param2 + u8 node_tile if PROTOCOL_VERSION < 42 { f32 pos_start_bias @@ -573,6 +620,19 @@ enum ToClientCommand : u16 -- f32 pos_end_bias range vel_end range acc_end + range exptime_end + range size_end + } + + texture { + u8 flags (ParticleTextureFlags) + -- bit 0: animated + -- next bits: blend mode (BlendMode) + tween alpha + tween scale + + if (flags.animated) + TileAnimation animation } tween> drag @@ -598,24 +658,26 @@ enum ToClientCommand : u16 u8 spawner_flags bit 1: attractor_kill (particles dies on contact) if attraction_mode > point { - tween attractor_angle - u16 attractor_origin_attachment_object_id + tween attractor_direction + u16 attractor_direction_attachment_object_id } } tween> radius - tween> drag - u16 texpool_sz - texpool_sz.times { - u8 flags + u16 texpool_size + texpool_size.times { + u8 flags (ParticleTextureFlags) -- bit 0: animated - -- other bits free & ignored as of proto v40 + -- next bits: blend mode (BlendMode) tween alpha tween scale - if flags.animated { + + u32 len + u8[len] texture + + if (flags.animated) TileAnimation animation - } } */ @@ -860,7 +922,7 @@ enum ToServerCommand : u16 Sent first after connected. u8 serialization version (=SER_FMT_VER_HIGHEST_READ) - u16 supported network compression modes + u16 unused (supported network compression modes, never implemeneted) u16 minimum supported network protocol version u16 maximum supported network protocol version std::string player name @@ -948,10 +1010,7 @@ enum ToServerCommand : u16 [2] u16 item */ - TOSERVER_RESPAWN = 0x38, - /* - u16 TOSERVER_RESPAWN - */ + TOSERVER_RESPAWN_LEGACY = 0x38, TOSERVER_INTERACT = 0x39, /* @@ -1095,26 +1154,6 @@ enum AccessDeniedCode : u8 { SERVER_ACCESSDENIED_MAX, }; -enum NetProtoCompressionMode { - NETPROTO_COMPRESSION_NONE = 0, -}; - -constexpr const char *accessDeniedStrings[SERVER_ACCESSDENIED_MAX] = { - "Invalid password", - "Your client sent something the server didn't expect. Try reconnecting or updating your client.", - "The server is running in simple singleplayer mode. You cannot connect.", - "Your client's version is not supported.\nPlease contact the server administrator.", - "Player name contains disallowed characters", - "Player name not allowed", - "Too many users", - "Empty passwords are disallowed. Set a password and try again.", - "Another client is connected with this name. If your client closed unexpectedly, try again in a minute.", - "Internal server error", - "", - "Server shutting down", - "The server has experienced an internal error. You will now be disconnected." -}; - enum PlayerListModifer : u8 { PLAYER_LIST_INIT, @@ -1145,4 +1184,4 @@ enum InteractAction : u8 INTERACT_PLACE, // 3: place block or item (to abovesurface) INTERACT_USE, // 4: use item INTERACT_ACTIVATE // 5: rightclick air ("activate") -}; +}; \ No newline at end of file diff --git a/src/network/peerhandler.h b/src/network/peerhandler.h index da65483ef..adda995b3 100644 --- a/src/network/peerhandler.h +++ b/src/network/peerhandler.h @@ -19,59 +19,30 @@ with this program; if not, write to the Free Software Foundation, Inc., #pragma once -#include "networkprotocol.h" - namespace con { -typedef enum -{ - MIN_RTT, - MAX_RTT, - AVG_RTT, - MIN_JITTER, - MAX_JITTER, - AVG_JITTER -} rtt_stat_type; - -class Peer; +class IPeer; class PeerHandler { public: PeerHandler() = default; - virtual ~PeerHandler() = default; + // Note: all functions are called from within a Receive() call on the same thread. + /* This is called after the Peer has been inserted into the Connection's peer container. */ - virtual void peerAdded(Peer *peer) = 0; + virtual void peerAdded(IPeer *peer) = 0; /* This is called before the Peer has been removed from the Connection's peer container. */ - virtual void deletingPeer(Peer *peer, bool timeout) = 0; + virtual void deletingPeer(IPeer *peer, bool timeout) = 0; }; -enum PeerChangeType : u8 -{ - PEER_ADDED, - PEER_REMOVED -}; - -struct PeerChange -{ - PeerChange(PeerChangeType t, session_t _peer_id, bool _timeout) : - type(t), peer_id(_peer_id), timeout(_timeout) - { - } - PeerChange() = delete; - - PeerChangeType type; - session_t peer_id; - bool timeout; -}; } diff --git a/src/network/serveropcodes.cpp b/src/network/serveropcodes.cpp index 1cb413492..4b87c3fbe 100644 --- a/src/network/serveropcodes.cpp +++ b/src/network/serveropcodes.cpp @@ -82,7 +82,7 @@ const ToServerCommandHandler toServerCommandTable[TOSERVER_NUM_MSG_TYPES] = { "TOSERVER_DAMAGE", TOSERVER_STATE_INGAME, &Server::handleCommand_Damage }, // 0x35 null_command_handler, // 0x36 { "TOSERVER_PLAYERITEM", TOSERVER_STATE_INGAME, &Server::handleCommand_PlayerItem }, // 0x37 - { "TOSERVER_RESPAWN", TOSERVER_STATE_INGAME, &Server::handleCommand_Respawn }, // 0x38 + null_command_handler, // 0x38 { "TOSERVER_INTERACT", TOSERVER_STATE_INGAME, &Server::handleCommand_Interact }, // 0x39 { "TOSERVER_REMOVED_SOUNDS", TOSERVER_STATE_INGAME, &Server::handleCommand_RemovedSounds }, // 0x3a { "TOSERVER_NODEMETA_FIELDS", TOSERVER_STATE_INGAME, &Server::handleCommand_NodeMetaFields }, // 0x3b @@ -181,7 +181,7 @@ const ClientCommandFactory clientCommandFactoryTable[TOCLIENT_NUM_MSG_TYPES] = { "TOCLIENT_MOVE_PLAYER", 0, true }, // 0x34 null_command_factory, // 0x35 { "TOCLIENT_FOV", 0, true }, // 0x36 - { "TOCLIENT_DEATHSCREEN", 0, true }, // 0x37 + null_command_factory, // 0x37 { "TOCLIENT_MEDIA", 2, true }, // 0x38 null_command_factory, // 0x39 { "TOCLIENT_NODEDEF", 0, true }, // 0x3A diff --git a/src/network/serveropcodes.h b/src/network/serveropcodes.h index 275270ab9..509d2b4b2 100644 --- a/src/network/serveropcodes.h +++ b/src/network/serveropcodes.h @@ -21,7 +21,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #pragma once #include "server.h" -#include "networkprotocol.h" class NetworkPacket; // Note: don't forward-declare Server here (#14324) diff --git a/src/network/serverpackethandler.cpp b/src/network/serverpackethandler.cpp index 2c6f024ee..c17d32e41 100644 --- a/src/network/serverpackethandler.cpp +++ b/src/network/serverpackethandler.cpp @@ -101,12 +101,12 @@ void Server::handleCommand_Init(NetworkPacket* pkt) // First byte after command is maximum supported // serialization version u8 client_max; - u16 supp_compr_modes; + u16 unused; u16 min_net_proto_version = 0; u16 max_net_proto_version; std::string playerName; - *pkt >> client_max >> supp_compr_modes >> min_net_proto_version + *pkt >> client_max >> unused >> min_net_proto_version >> max_net_proto_version >> playerName; u8 our_max = SER_FMT_VER_HIGHEST_READ; @@ -190,9 +190,6 @@ void Server::handleCommand_Init(NetworkPacket* pkt) } m_clients.setPlayerName(peer_id, playername); - //TODO (later) case insensitivity - - std::string legacyPlayerNameCasing = playerName; if (!isSingleplayer() && strcasecmp(playername, "singleplayer") == 0) { actionstream << "Server: Player with the name \"singleplayer\" tried " @@ -279,17 +276,14 @@ void Server::handleCommand_Init(NetworkPacket* pkt) verbosestream << "Sending TOCLIENT_HELLO with auth method field: " << auth_mechs << std::endl; - NetworkPacket resp_pkt(TOCLIENT_HELLO, - 1 + 4 + legacyPlayerNameCasing.size(), peer_id); + NetworkPacket resp_pkt(TOCLIENT_HELLO, 0, peer_id); - u16 depl_compress_mode = NETPROTO_COMPRESSION_NONE; - resp_pkt << depl_serial_v << depl_compress_mode << net_proto_version - << auth_mechs << legacyPlayerNameCasing; + resp_pkt << depl_serial_v << u16(0) << net_proto_version + << auth_mechs << std::string_view(); Send(&resp_pkt); client->allowed_auth_mechs = auth_mechs; - client->setDeployedCompressionMode(depl_compress_mode); m_clients.event(peer_id, CSE_Hello); } @@ -615,7 +609,7 @@ void Server::handleCommand_InventoryAction(NetworkPacket* pkt) // If something goes wrong, this player is to blame RollbackScopeActor rollback_scope(m_rollback, - std::string("player:")+player->getName()); + "player:" + player->getName()); /* Note: Always set inventory not sent, to repair cases @@ -852,11 +846,11 @@ void Server::handleCommand_PlayerItem(NetworkPacket* pkt) *pkt >> item; - if (item >= player->getHotbarItemcount()) { + if (item >= player->getMaxHotbarItemcount()) { actionstream << "Player: " << player->getName() << " tried to access item=" << item << " out of hotbar_itemcount=" - << player->getHotbarItemcount() + << player->getMaxHotbarItemcount() << "; ignoring." << std::endl; return; } @@ -864,33 +858,6 @@ void Server::handleCommand_PlayerItem(NetworkPacket* pkt) playersao->getPlayer()->setWieldIndex(item); } -void Server::handleCommand_Respawn(NetworkPacket* pkt) -{ - session_t peer_id = pkt->getPeerId(); - RemotePlayer *player = m_env->getPlayer(peer_id); - if (player == NULL) { - errorstream << - "Server::ProcessData(): Canceling: No player for peer_id=" << - peer_id << " disconnecting peer!" << std::endl; - DisconnectPeer(peer_id); - return; - } - - PlayerSAO *playersao = player->getPlayerSAO(); - assert(playersao); - - if (!playersao->isDead()) - return; - - RespawnPlayer(peer_id); - - actionstream << player->getName() << " respawns at " - << (playersao->getBasePosition() / BS) << std::endl; - - // ActiveObject is added to environment in AsyncRunStep after - // the previous addition has been successfully removed -} - bool Server::checkInteractDistance(RemotePlayer *player, const f32 d, const std::string &what) { ItemStack selected_item, hand_item; @@ -983,11 +950,11 @@ void Server::handleCommand_Interact(NetworkPacket *pkt) // Update wielded item - if (item_i >= player->getHotbarItemcount()) { + if (item_i >= player->getMaxHotbarItemcount()) { actionstream << "Player: " << player->getName() << " tried to access item=" << item_i << " out of hotbar_itemcount=" - << player->getHotbarItemcount() + << player->getMaxHotbarItemcount() << "; ignoring." << std::endl; return; } @@ -1069,7 +1036,7 @@ void Server::handleCommand_Interact(NetworkPacket *pkt) If something goes wrong, this player is to blame */ RollbackScopeActor rollback_scope(m_rollback, - std::string("player:")+player->getName()); + "player:" + player->getName()); switch (action) { // Start digging or punch object @@ -1351,15 +1318,22 @@ static bool pkt_read_formspec_fields(NetworkPacket *pkt, StringMap &fields) u16 field_count; *pkt >> field_count; - u64 length = 0; + size_t length = 0; for (u16 k = 0; k < field_count; k++) { - std::string fieldname; + std::string fieldname, fieldvalue; *pkt >> fieldname; - fields[fieldname] = pkt->readLongString(); + fieldvalue = pkt->readLongString(); - length += fieldname.size(); - length += fields[fieldname].size(); + fieldname = sanitize_untrusted(fieldname, false); + // We'd love to strip escapes here but some formspec elements reflect data + // from the server (e.g. dropdown), which can contain translations. + fieldvalue = sanitize_untrusted(fieldvalue); + + length += fieldname.size() + fieldvalue.size(); + + fields[std::move(fieldname)] = std::move(fieldvalue); } + // 640K ought to be enough for anyone return length < 640 * 1024; } @@ -1400,7 +1374,7 @@ void Server::handleCommand_NodeMetaFields(NetworkPacket* pkt) // If something goes wrong, this player is to blame RollbackScopeActor rollback_scope(m_rollback, - std::string("player:")+player->getName()); + "player:" + player->getName()); // Check the target node for rollback data; leave others unnoticed RollbackNode rn_old(&m_env->getMap(), p, this); diff --git a/src/network/socket.cpp b/src/network/socket.cpp index 9fbbaa34e..17e71d860 100644 --- a/src/network/socket.cpp +++ b/src/network/socket.cpp @@ -50,9 +50,6 @@ typedef int socklen_t; #define SOCKET_ERR_STR(e) strerror(e) #endif -// Set to true to enable verbose debug output -bool socket_enable_debug_output = false; // yuck - static bool g_sockets_initialized = false; // Initialize sockets @@ -104,12 +101,6 @@ bool UDPSocket::init(bool ipv6, bool noExceptions) m_addr_family = ipv6 ? AF_INET6 : AF_INET; m_handle = socket(m_addr_family, SOCK_DGRAM, IPPROTO_UDP); - if (socket_enable_debug_output) { - tracestream << "UDPSocket(" << (int)m_handle - << ")::UDPSocket(): ipv6 = " << (ipv6 ? "true" : "false") - << std::endl; - } - if (m_handle < 0) { if (noExceptions) { return false; @@ -135,11 +126,6 @@ bool UDPSocket::init(bool ipv6, bool noExceptions) UDPSocket::~UDPSocket() { - if (socket_enable_debug_output) { - tracestream << "UDPSocket( " << (int)m_handle << ")::~UDPSocket()" - << std::endl; - } - if (m_handle >= 0) { #ifdef _WIN32 closesocket(m_handle); @@ -151,12 +137,6 @@ UDPSocket::~UDPSocket() void UDPSocket::Bind(Address addr) { - if (socket_enable_debug_output) { - tracestream << "UDPSocket(" << (int)m_handle - << ")::Bind(): " << addr.serializeString() << ":" - << addr.getPort() << std::endl; - } - if (addr.getFamily() != m_addr_family) { const char *errmsg = "Socket and bind address families do not match"; @@ -202,30 +182,6 @@ void UDPSocket::Send(const Address &destination, const void *data, int size) if (INTERNET_SIMULATOR) dumping_packet = myrand() % INTERNET_SIMULATOR_PACKET_LOSS == 0; - if (socket_enable_debug_output) { - // Print packet destination and size - tracestream << (int)m_handle << " -> "; - destination.print(tracestream); - tracestream << ", size=" << size; - - // Print packet contents - tracestream << ", data="; - for (int i = 0; i < size && i < 20; i++) { - if (i % 2 == 0) - tracestream << " "; - unsigned int a = ((const unsigned char *)data)[i]; - tracestream << std::hex << std::setw(2) << std::setfill('0') << a; - } - - if (size > 20) - tracestream << "..."; - - if (dumping_packet) - tracestream << " (DUMPED BY INTERNET_SIMULATOR)"; - - tracestream << std::endl; - } - if (dumping_packet) { // Lol let's forget it tracestream << "UDPSocket::Send(): INTERNET_SIMULATOR: dumping packet." @@ -302,26 +258,6 @@ int UDPSocket::Receive(Address &sender, void *data, int size) sender = Address(address_ip, address_port); } - if (socket_enable_debug_output) { - // Print packet sender and size - tracestream << (int)m_handle << " <- "; - sender.print(tracestream); - tracestream << ", size=" << received; - - // Print packet contents - tracestream << ", data="; - for (int i = 0; i < received && i < 20; i++) { - if (i % 2 == 0) - tracestream << " "; - unsigned int a = ((const unsigned char *)data)[i]; - tracestream << std::hex << std::setw(2) << std::setfill('0') << a; - } - if (received > 20) - tracestream << "..."; - - tracestream << std::endl; - } - return received; } diff --git a/src/network/socket.h b/src/network/socket.h index c3758a9d8..28b69c7b8 100644 --- a/src/network/socket.h +++ b/src/network/socket.h @@ -25,8 +25,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "irrlichttypes.h" #include "networkexceptions.h" -extern bool socket_enable_debug_output; - void sockets_init(); void sockets_cleanup(); diff --git a/src/nodedef.cpp b/src/nodedef.cpp index 2914cc3aa..811753c89 100644 --- a/src/nodedef.cpp +++ b/src/nodedef.cpp @@ -712,8 +712,6 @@ static void fillTileAttribs(ITextureSource *tsrc, TileLayer *layer, if (!tile.world_aligned) layer->scale = 1; - layer->flags_texture = tsrc->getShaderFlagsTexture(layer->normal_texture ? true : false); - // Material flags layer->material_flags = 0; if (backface_culling) @@ -753,18 +751,13 @@ static void fillTileAttribs(ITextureSource *tsrc, TileLayer *layer, std::ostringstream os(std::ios::binary); for (int i = 0; i < frame_count; i++) { - FrameSpec frame; - os.str(""); os << tiledef.name; tiledef.animation.getTextureModifer(os, layer->texture->getOriginalSize(), i); + FrameSpec &frame = (*layer->frames)[i]; frame.texture = tsrc->getTextureForMesh(os.str(), &frame.texture_id); - if (layer->normal_texture) - frame.normal_texture = tsrc->getNormalTexture(os.str()); - frame.flags_texture = layer->flags_texture; - (*layer->frames)[i] = frame; } } } diff --git a/src/object_properties.cpp b/src/object_properties.cpp index 5fb6a7d41..7a70714a2 100644 --- a/src/object_properties.cpp +++ b/src/object_properties.cpp @@ -24,6 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "log.h" #include "util/serialize.h" #include +#include static const video::SColor NULL_BGCOLOR{0, 1, 1, 1}; @@ -85,6 +86,27 @@ std::string ObjectProperties::dump() const return os.str(); } +static auto tie(const ObjectProperties &o) +{ + // Make sure to add new members to this list! + return std::tie( + o.textures, o.colors, o.collisionbox, o.selectionbox, o.visual, o.mesh, + o.damage_texture_modifier, o.nametag, o.infotext, o.wield_item, o.visual_size, + o.nametag_color, o.nametag_bgcolor, o.spritediv, o.initial_sprite_basepos, + o.stepheight, o.automatic_rotate, o.automatic_face_movement_dir_offset, + o.automatic_face_movement_max_rotation_per_sec, o.eye_height, o.zoom_fov, + o.hp_max, o.breath_max, o.glow, o.pointable, o.physical, o.collideWithObjects, + o.rotate_selectionbox, o.is_visible, o.makes_footstep_sound, + o.automatic_face_movement_dir, o.backface_culling, o.static_save, o.use_texture_alpha, + o.shaded, o.show_on_minimap + ); +} + +bool ObjectProperties::operator==(const ObjectProperties &other) const +{ + return tie(*this) == tie(other); +} + bool ObjectProperties::validate() { const char *func = "ObjectProperties::validate(): "; diff --git a/src/object_properties.h b/src/object_properties.h index 1f8384c77..88c2a2678 100644 --- a/src/object_properties.h +++ b/src/object_properties.h @@ -20,11 +20,9 @@ with this program; if not, write to the Free Software Foundation, Inc., #pragma once #include -#include #include #include "irrlichttypes_bloated.h" #include -#include #include #include "util/pointabilities.h" @@ -77,28 +75,10 @@ struct ObjectProperties std::string dump() const; -private: - auto tie() const { - // Make sure to add new members to this list! - return std::tie( - textures, colors, collisionbox, selectionbox, visual, mesh, damage_texture_modifier, - nametag, infotext, wield_item, visual_size, nametag_color, nametag_bgcolor, - spritediv, initial_sprite_basepos, stepheight, automatic_rotate, - automatic_face_movement_dir_offset, automatic_face_movement_max_rotation_per_sec, - eye_height, zoom_fov, hp_max, breath_max, glow, pointable, physical, - collideWithObjects, rotate_selectionbox, is_visible, makes_footstep_sound, - automatic_face_movement_dir, backface_culling, static_save, use_texture_alpha, - shaded, show_on_minimap - ); - } - -public: - bool operator==(const ObjectProperties &other) const { - return tie() == other.tie(); - }; + bool operator==(const ObjectProperties &other) const; bool operator!=(const ObjectProperties &other) const { - return tie() != other.tie(); - }; + return !(*this == other); + } /** * Check limits of some important properties that'd cause exceptions later on. diff --git a/src/particles.cpp b/src/particles.cpp index c67d72711..fdc041c3e 100644 --- a/src/particles.cpp +++ b/src/particles.cpp @@ -197,7 +197,8 @@ enum class ParticleTextureFlags : u8 { * decltype everywhere */ using FlagT = std::underlying_type_t; -void ServerParticleTexture::serialize(std::ostream &os, u16 protocol_ver, bool newPropertiesOnly) const +void ServerParticleTexture::serialize(std::ostream &os, u16 protocol_ver, + bool newPropertiesOnly, bool skipAnimation) const { /* newPropertiesOnly is used to de/serialize parameters of the legacy texture * field, which are encoded separately from the texspec string */ @@ -213,14 +214,19 @@ void ServerParticleTexture::serialize(std::ostream &os, u16 protocol_ver, bool n if (!newPropertiesOnly) os << serializeString32(string); - if (animated) + if (!skipAnimation && animated) animation.serialize(os, protocol_ver); } -void ServerParticleTexture::deSerialize(std::istream &is, u16 protocol_ver, bool newPropertiesOnly) +void ServerParticleTexture::deSerialize(std::istream &is, u16 protocol_ver, + bool newPropertiesOnly, bool skipAnimation) { FlagT flags = 0; deSerializeParameterValue(is, flags); + // new texture properties were missing in ParticleParameters::serialize + // before Minetest 5.9.0 + if (is.eof()) + return; animated = !!(flags & FlagT(ParticleTextureFlags::animated)); blendmode = BlendMode((flags & FlagT(ParticleTextureFlags::blend)) >> 1); @@ -230,7 +236,7 @@ void ServerParticleTexture::deSerialize(std::istream &is, u16 protocol_ver, bool if (!newPropertiesOnly) string = deSerializeString32(is); - if (animated) + if (!skipAnimation && animated) animation.deSerialize(is, protocol_ver); } @@ -254,6 +260,7 @@ void ParticleParameters::serialize(std::ostream &os, u16 protocol_ver) const writeV3F32(os, drag); jitter.serialize(os); bounce.serialize(os); + texture.serialize(os, protocol_ver, true, true); } template @@ -291,4 +298,5 @@ void ParticleParameters::deSerialize(std::istream &is, u16 protocol_ver) return; jitter.deSerialize(is); bounce.deSerialize(is); + texture.deSerialize(is, protocol_ver, true, true); } diff --git a/src/particles.h b/src/particles.h index 4c178f4c4..a8d30390b 100644 --- a/src/particles.h +++ b/src/particles.h @@ -276,8 +276,10 @@ struct ParticleTexture struct ServerParticleTexture : public ParticleTexture { std::string string; - void serialize(std::ostream &os, u16 protocol_ver, bool newPropertiesOnly = false) const; - void deSerialize(std::istream &is, u16 protocol_ver, bool newPropertiesOnly = false); + void serialize(std::ostream &os, u16 protocol_ver, bool newPropertiesOnly = false, + bool skipAnimation = false) const; + void deSerialize(std::istream &is, u16 protocol_ver, bool newPropertiesOnly = false, + bool skipAnimation = false); }; struct CommonParticleParams diff --git a/src/player.cpp b/src/player.cpp index c876b6948..fd25626ca 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -28,12 +28,17 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "settings.h" #include "log.h" #include "porting.h" // strlcpy +#include -Player::Player(const char *name, IItemDefManager *idef): +bool is_valid_player_name(std::string_view name) { + return !name.empty() && name.size() <= PLAYERNAME_SIZE && string_allowed(name, PLAYERNAME_ALLOWED_CHARS); +} + +Player::Player(const std::string &name, IItemDefManager *idef): inventory(idef) { - strlcpy(m_name, name, PLAYERNAME_SIZE); + m_name = name; inventory.clear(); inventory.addList("main", PLAYER_INVENTORY_SIZE); @@ -88,6 +93,11 @@ void Player::setWieldIndex(u16 index) m_wield_index = MYMIN(index, mlist ? mlist->getSize() : 0); } +u16 Player::getWieldIndex() +{ + return std::min(m_wield_index, getMaxHotbarItemcount()); +} + ItemStack &Player::getWieldedItem(ItemStack *selected, ItemStack *hand) const { assert(selected); @@ -157,6 +167,12 @@ void Player::clearHud() } } +u16 Player::getMaxHotbarItemcount() +{ + InventoryList *mainlist = inventory.getList("main"); + return mainlist ? std::min(mainlist->getSize(), (u32) hud_hotbar_itemcount) : 0; +} + #ifndef SERVER u32 PlayerControl::getKeysPressed() const @@ -214,3 +230,19 @@ void PlayerControl::unpackKeysPressed(u32 keypress_bits) place = keypress_bits & (1 << 8); zoom = keypress_bits & (1 << 9); } + +static auto tie(const PlayerPhysicsOverride &o) +{ + // Make sure to add new members to this list! + return std::tie( + o.speed, o.jump, o.gravity, o.sneak, o.sneak_glitch, o.new_move, o.speed_climb, + o.speed_crouch, o.liquid_fluidity, o.liquid_fluidity_smooth, o.liquid_sink, + o.acceleration_default, o.acceleration_air, o.speed_fast, o.acceleration_fast, + o.speed_walk + ); +} + +bool PlayerPhysicsOverride::operator==(const PlayerPhysicsOverride &other) const +{ + return tie(*this) == tie(other); +} diff --git a/src/player.h b/src/player.h index 373c81780..53411fea4 100644 --- a/src/player.h +++ b/src/player.h @@ -22,18 +22,19 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "irrlichttypes_bloated.h" #include "inventory.h" #include "constants.h" -#include "network/networkprotocol.h" #include "util/basic_macros.h" -#include +#include "util/string.h" #include #include -#include +#include #define PLAYERNAME_SIZE 20 #define PLAYERNAME_ALLOWED_CHARS "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_" #define PLAYERNAME_ALLOWED_CHARS_USER_EXPL "'a' to 'z', 'A' to 'Z', '0' to '9', '-', '_'" +bool is_valid_player_name(std::string_view name); + struct PlayerFovSpec { f32 fov; @@ -130,23 +131,10 @@ struct PlayerPhysicsOverride float acceleration_fast = 1.f; float speed_walk = 1.f; -private: - auto tie() const { - // Make sure to add new members to this list! - return std::tie( - speed, jump, gravity, sneak, sneak_glitch, new_move, speed_climb, speed_crouch, - liquid_fluidity, liquid_fluidity_smooth, liquid_sink, acceleration_default, - acceleration_air, speed_fast, acceleration_fast, speed_walk - ); - } - -public: - bool operator==(const PlayerPhysicsOverride &other) const { - return tie() == other.tie(); - }; + bool operator==(const PlayerPhysicsOverride &other) const; bool operator!=(const PlayerPhysicsOverride &other) const { - return tie() != other.tie(); - }; + return !(*this == other); + } }; class Map; @@ -158,7 +146,7 @@ class Player { public: - Player(const char *name, IItemDefManager *idef); + Player(const std::string &name, IItemDefManager *idef); virtual ~Player() = 0; DISABLE_CLASS_COPY(Player); @@ -178,7 +166,7 @@ public: // in BS-space v3f getSpeed() const { return m_speed; } - const char *getName() const { return m_name; } + const std::string& getName() const { return m_name; } u32 getFreeHudID() { @@ -223,7 +211,7 @@ public: // Returns non-empty `selected` ItemStack. `hand` is a fallback, if specified ItemStack &getWieldedItem(ItemStack *selected, ItemStack *hand) const; void setWieldIndex(u16 index); - u16 getWieldIndex() const { return m_wield_index; } + u16 getWieldIndex(); bool setFov(const PlayerFovSpec &spec) { @@ -247,8 +235,11 @@ public: u32 hud_flags; s32 hud_hotbar_itemcount; + // Get actual usable number of hotbar items (clamped to size of "main" list) + u16 getMaxHotbarItemcount(); + protected: - char m_name[PLAYERNAME_SIZE]; + std::string m_name; v3f m_speed; // velocity; in BS-space u16 m_wield_index = 0; PlayerFovSpec m_fov_override_spec = { 0.0f, false, 0.0f }; diff --git a/src/porting.cpp b/src/porting.cpp index 0763e92e1..f6409c56c 100644 --- a/src/porting.cpp +++ b/src/porting.cpp @@ -50,6 +50,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #endif #if defined(__ANDROID__) #include "porting_android.h" + #include #endif #if defined(__APPLE__) #include @@ -72,6 +73,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "filesys.h" #include "log.h" #include "util/string.h" +#include "util/tracy_wrapper.h" #include #include #include @@ -205,7 +207,10 @@ bool detectMSVCBuildDir(const std::string &path) return (!removeStringEnd(path, ends).empty()); } -std::string get_sysinfo() +// Note that the system info is sent in every HTTP request, so keep it reasonably +// privacy-conserving while ideally still being meaningful. + +static std::string detectSystemInfo() { #ifdef _WIN32 std::ostringstream oss; @@ -251,14 +256,34 @@ std::string get_sysinfo() delete[] filePath; return oss.str(); -#else +#elif defined(__ANDROID__) + std::ostringstream oss; struct utsname osinfo; uname(&osinfo); - return std::string(osinfo.sysname) + "/" - + osinfo.release + " " + osinfo.machine; + int api = android_get_device_api_level(); + + oss << "Android/" << api << " " << osinfo.machine; + return oss.str(); +#else /* POSIX */ + struct utsname osinfo; + uname(&osinfo); + + std::string_view release(osinfo.release); + // cut off anything but the primary version number + release = release.substr(0, release.find_first_not_of("0123456789.")); + + std::string ret = osinfo.sysname; + ret.append("/").append(release).append(" ").append(osinfo.machine); + return ret; #endif } +const std::string &get_sysinfo() +{ + static std::string ret = detectSystemInfo(); + return ret; +} + bool getCurrentWorkingDir(char *buf, size_t len) { @@ -920,22 +945,31 @@ double perf_freq = get_perf_freq(); * * As a workaround we track freed memory coarsely and call malloc_trim() once a * certain amount is reached. + * + * Because trimming can take more than 10ms and would cause jitter if done + * uncontrolled we have a separate function, which is called from background threads. */ static std::atomic memory_freed; -constexpr size_t MEMORY_TRIM_THRESHOLD = 128 * 1024 * 1024; +constexpr size_t MEMORY_TRIM_THRESHOLD = 256 * 1024 * 1024; void TrackFreedMemory(size_t amount) { + memory_freed.fetch_add(amount, std::memory_order_relaxed); +} + +void TriggerMemoryTrim() +{ + ZoneScoped; + constexpr auto MO = std::memory_order_relaxed; - memory_freed.fetch_add(amount, MO); if (memory_freed.load(MO) >= MEMORY_TRIM_THRESHOLD) { // Synchronize call if (memory_freed.exchange(0, MO) < MEMORY_TRIM_THRESHOLD) return; // Leave some headroom for future allocations - malloc_trim(1 * 1024 * 1024); + malloc_trim(8 * 1024 * 1024); } } diff --git a/src/porting.h b/src/porting.h index 27fabe7cd..b7a71bce2 100644 --- a/src/porting.h +++ b/src/porting.h @@ -138,7 +138,7 @@ void initializePaths(); Return system information e.g. "Linux/3.12.7 x86_64" */ -std::string get_sysinfo(); +const std::string &get_sysinfo(); // Monotonic timer @@ -290,15 +290,22 @@ void osSpecificInit(); // This attaches to the parents process console, or creates a new one if it doesnt exist. void attachOrCreateConsole(); +#if HAVE_MALLOC_TRIM /** * Call this after freeing bigger blocks of memory. Used on some platforms to * properly give memory back to the OS. * @param amount Number of bytes freed */ -#if HAVE_MALLOC_TRIM void TrackFreedMemory(size_t amount); + +/** + * Call this regularly from background threads. This performs the actual trimming + * and is potentially slow. + */ +void TriggerMemoryTrim(); #else -inline void TrackFreedMemory(size_t amount) { (void)amount; } +static inline void TrackFreedMemory(size_t amount) { (void)amount; } +static inline void TriggerMemoryTrim() { (void)0; } #endif #ifdef _WIN32 diff --git a/src/remoteplayer.cpp b/src/remoteplayer.cpp index 9658dca06..6cffa534f 100644 --- a/src/remoteplayer.cpp +++ b/src/remoteplayer.cpp @@ -37,7 +37,7 @@ bool RemotePlayer::m_setting_cache_loaded = false; float RemotePlayer::m_setting_chat_message_limit_per_10sec = 0.0f; u16 RemotePlayer::m_setting_chat_message_limit_trigger_kick = 0; -RemotePlayer::RemotePlayer(const char *name, IItemDefManager *idef): +RemotePlayer::RemotePlayer(const std::string &name, IItemDefManager *idef): Player(name, idef) { if (!RemotePlayer::m_setting_cache_loaded) { diff --git a/src/remoteplayer.h b/src/remoteplayer.h index a38f31731..4923c307d 100644 --- a/src/remoteplayer.h +++ b/src/remoteplayer.h @@ -23,6 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "player.h" #include "skyparams.h" #include "lighting.h" +#include "network/networkprotocol.h" // session_t class PlayerSAO; @@ -41,7 +42,7 @@ class RemotePlayer : public Player friend class PlayerDatabaseFiles; public: - RemotePlayer(const char *name, IItemDefManager *idef); + RemotePlayer(const std::string &name, IItemDefManager *idef); virtual ~RemotePlayer(); PlayerSAO *getPlayerSAO() { return m_sao; } diff --git a/src/script/common/c_content.cpp b/src/script/common/c_content.cpp index 988094b9f..2e5873bbf 100644 --- a/src/script/common/c_content.cpp +++ b/src/script/common/c_content.cpp @@ -291,7 +291,7 @@ const std::array object_property_keys = { "use_texture_alpha", "shaded", "damage_texture_modifier", - "show_on_minimap" + "show_on_minimap", }; /******************************************************************************/ @@ -760,7 +760,7 @@ void read_content_features(lua_State *L, ContentFeatures &f, int index) f.setDefaultAlphaMode(); - warn_if_field_exists(L, index, "alpha", + warn_if_field_exists(L, index, "alpha", "node " + f.name, "Obsolete, only limited compatibility provided; " "replaced by \"use_texture_alpha\""); if (getintfield_default(L, index, "alpha", 255) != 255) @@ -768,7 +768,7 @@ void read_content_features(lua_State *L, ContentFeatures &f, int index) lua_getfield(L, index, "use_texture_alpha"); if (lua_isboolean(L, -1)) { - warn_if_field_exists(L, index, "use_texture_alpha", + warn_if_field_exists(L, index, "use_texture_alpha", "node " + f.name, "Boolean values are deprecated; use the new choices"); if (lua_toboolean(L, -1)) f.alpha = (f.drawtype == NDT_NORMAL) ? ALPHAMODE_CLIP : ALPHAMODE_BLEND; @@ -1315,13 +1315,16 @@ void pushnode(lua_State *L, const MapNode &n) } /******************************************************************************/ -void warn_if_field_exists(lua_State *L, int table, - const char *name, const std::string &message) +void warn_if_field_exists(lua_State *L, int table, const char *fieldname, + std::string_view name, std::string_view message) { - lua_getfield(L, table, name); + lua_getfield(L, table, fieldname); if (!lua_isnil(L, -1)) { - warningstream << "Field \"" << name << "\": " - << message << std::endl; + warningstream << "Field \"" << fieldname << "\""; + if (!name.empty()) { + warningstream << " on " << name; + } + warningstream << ": " << message << std::endl; infostream << script_get_backtrace(L) << std::endl; } lua_pop(L, 1); @@ -2303,7 +2306,10 @@ void read_hud_element(lua_State *L, HudElement *elem) elem->dir = getintfield_default(L, 2, "dir", 0); lua_getfield(L, 2, "alignment"); - elem->align = lua_istable(L, -1) ? read_v2f(L, -1) : v2f(); + if (lua_istable(L, -1)) + elem->align = read_v2f(L, -1); + else + elem->align = elem->type == HUD_ELEM_INVENTORY ? v2f(1.0f, 1.0f) : v2f(); lua_pop(L, 1); lua_getfield(L, 2, "offset"); diff --git a/src/script/common/c_converter.h b/src/script/common/c_converter.h index 05d43953e..04f1ba0f9 100644 --- a/src/script/common/c_converter.h +++ b/src/script/common/c_converter.h @@ -120,7 +120,8 @@ void push_aabb3f_vector (lua_State *L, const std::vector void warn_if_field_exists(lua_State *L, int table, const char *fieldname, - const std::string &message); + std::string_view name, + std::string_view message); size_t write_array_slice_float(lua_State *L, int table_index, float *data, v3u16 data_size, v3u16 slice_offset, v3u16 slice_size); diff --git a/src/script/common/c_internal.cpp b/src/script/common/c_internal.cpp index ae83b8df0..e6bfafdcd 100644 --- a/src/script/common/c_internal.cpp +++ b/src/script/common/c_internal.cpp @@ -122,27 +122,30 @@ void script_error(lua_State *L, int pcall_result, const char *mod, const char *f throw LuaError(err_msg); } -static void script_log_add_source(lua_State *L, std::string &message, int stack_depth) +[[nodiscard]] static std::string script_log_add_source(lua_State *L, + std::string_view message, int stack_depth) { + std::string ret(message); if (stack_depth <= 0) - return; + return ret; lua_Debug ar; if (lua_getstack(L, stack_depth, &ar)) { FATAL_ERROR_IF(!lua_getinfo(L, "Sl", &ar), "lua_getinfo() failed"); - message.append(" (at " + std::string(ar.short_src) + ":" + ret.append(" (at ").append(ar.short_src).append(":" + std::to_string(ar.currentline) + ")"); } else { - message.append(" (at ?:?)"); + ret.append(" (at ?:?)"); } + return ret; } -bool script_log_unique(lua_State *L, std::string message, std::ostream &log_to, +bool script_log_unique(lua_State *L, std::string_view message_in, std::ostream &log_to, int stack_depth) { thread_local std::vector logged_messages; - script_log_add_source(L, message, stack_depth); + auto message = script_log_add_source(L, message_in, stack_depth); u64 hash = murmur_hash_64_ua(message.data(), message.length(), 0xBADBABE); if (std::find(logged_messages.begin(), logged_messages.end(), hash) @@ -174,7 +177,7 @@ DeprecatedHandlingMode get_deprecated_handling_mode() return ret; } -void log_deprecated(lua_State *L, std::string message, int stack_depth, bool once) +void log_deprecated(lua_State *L, std::string_view message, int stack_depth, bool once) { DeprecatedHandlingMode mode = get_deprecated_handling_mode(); if (mode == DeprecatedHandlingMode::Ignore) @@ -184,12 +187,12 @@ void log_deprecated(lua_State *L, std::string message, int stack_depth, bool onc if (once) { log = script_log_unique(L, message, warningstream, stack_depth); } else { - script_log_add_source(L, message, stack_depth); - warningstream << message << std::endl; + auto message2 = script_log_add_source(L, message, stack_depth); + warningstream << message2 << std::endl; } if (mode == DeprecatedHandlingMode::Error) - throw LuaError(message); + throw LuaError(std::string(message)); else if (log) infostream << script_get_backtrace(L) << std::endl; } diff --git a/src/script/common/c_internal.h b/src/script/common/c_internal.h index a67b0dad9..a9f9fe226 100644 --- a/src/script/common/c_internal.h +++ b/src/script/common/c_internal.h @@ -26,6 +26,8 @@ with this program; if not, write to the Free Software Foundation, Inc., #pragma once +#include + extern "C" { #include #include @@ -127,7 +129,7 @@ int script_error_handler(lua_State *L); // Takes an error from lua_pcall and throws it as a LuaError void script_error(lua_State *L, int pcall_result, const char *mod, const char *fxn); -bool script_log_unique(lua_State *L, std::string message, std::ostream &log_to, +bool script_log_unique(lua_State *L, std::string_view message, std::ostream &log_to, int stack_depth = 1); enum DeprecatedHandlingMode { @@ -152,7 +154,8 @@ DeprecatedHandlingMode get_deprecated_handling_mode(); * (ie: not builtin or core). -1 to disabled. * @param once Log the deprecation warning only once per callsite. */ -void log_deprecated(lua_State *L, std::string message, int stack_depth = 1, bool once = false); +void log_deprecated(lua_State *L, std::string_view message, + int stack_depth = 1, bool once = false); // Safely call string.dump on a function value // (does not pop, leaves one value on stack) diff --git a/src/script/cpp_api/s_base.cpp b/src/script/cpp_api/s_base.cpp index e9907f304..bdd2514e6 100644 --- a/src/script/cpp_api/s_base.cpp +++ b/src/script/cpp_api/s_base.cpp @@ -32,6 +32,9 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "client/client.h" #endif +#if BUILD_WITH_TRACY + #include "tracy/TracyLua.hpp" +#endif extern "C" { #include "lualib.h" @@ -95,6 +98,11 @@ ScriptApiBase::ScriptApiBase(ScriptingType type): lua_pushstring(m_luastack, LUA_BITLIBNAME); lua_call(m_luastack, 1, 0); +#if BUILD_WITH_TRACY + // Load tracy lua bindings + tracy::LuaRegister(m_luastack); +#endif + // Make the ScriptApiBase* accessible to ModApiBase #if INDIRECT_SCRIPTAPI_RIDX *(void **)(lua_newuserdata(m_luastack, sizeof(void *))) = this; diff --git a/src/script/cpp_api/s_client.cpp b/src/script/cpp_api/s_client.cpp index 6faa0695c..78d0ec44d 100644 --- a/src/script/cpp_api/s_client.cpp +++ b/src/script/cpp_api/s_client.cpp @@ -125,21 +125,6 @@ void ScriptApiClient::on_hp_modification(int32_t newhp) } } -void ScriptApiClient::on_death() -{ - SCRIPTAPI_PRECHECKHEADER - - // Get registered shutdown hooks - lua_getglobal(L, "core"); - lua_getfield(L, -1, "registered_on_death"); - // Call callbacks - try { - runCallbacks(0, RUN_CALLBACKS_MODE_FIRST); - } catch (LuaError &e) { - getClient()->setFatalError(e); - } -} - void ScriptApiClient::environment_step(float dtime) { SCRIPTAPI_PRECHECKHEADER diff --git a/src/script/cpp_api/s_client.h b/src/script/cpp_api/s_client.h index 8a5523d0d..74cc0d898 100644 --- a/src/script/cpp_api/s_client.h +++ b/src/script/cpp_api/s_client.h @@ -49,7 +49,6 @@ public: void on_damage_taken(int32_t damage_amount); void on_hp_modification(int32_t newhp); - void on_death(); void environment_step(float dtime); void on_formspec_input(const std::string &formname, const StringMap &fields); diff --git a/src/script/cpp_api/s_env.cpp b/src/script/cpp_api/s_env.cpp index 3cbb13cd2..deac90f3c 100644 --- a/src/script/cpp_api/s_env.cpp +++ b/src/script/cpp_api/s_env.cpp @@ -25,8 +25,103 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "mapgen/mapgen.h" #include "lua_api/l_env.h" #include "server.h" +#include "scripting_server.h" #include "script/common/c_content.h" +/* + LuaABM & LuaLBM +*/ + +class LuaABM : public ActiveBlockModifier { +private: + int m_id; + + std::vector m_trigger_contents; + std::vector m_required_neighbors; + float m_trigger_interval; + u32 m_trigger_chance; + bool m_simple_catch_up; + s16 m_min_y; + s16 m_max_y; +public: + LuaABM(int id, + const std::vector &trigger_contents, + const std::vector &required_neighbors, + float trigger_interval, u32 trigger_chance, bool simple_catch_up, + s16 min_y, s16 max_y): + m_id(id), + m_trigger_contents(trigger_contents), + m_required_neighbors(required_neighbors), + m_trigger_interval(trigger_interval), + m_trigger_chance(trigger_chance), + m_simple_catch_up(simple_catch_up), + m_min_y(min_y), + m_max_y(max_y) + { + } + virtual const std::vector &getTriggerContents() const + { + return m_trigger_contents; + } + virtual const std::vector &getRequiredNeighbors() const + { + return m_required_neighbors; + } + virtual float getTriggerInterval() + { + return m_trigger_interval; + } + virtual u32 getTriggerChance() + { + return m_trigger_chance; + } + virtual bool getSimpleCatchUp() + { + return m_simple_catch_up; + } + virtual s16 getMinY() + { + return m_min_y; + } + virtual s16 getMaxY() + { + return m_max_y; + } + + virtual void trigger(ServerEnvironment *env, v3s16 p, MapNode n, + u32 active_object_count, u32 active_object_count_wider) + { + auto *script = env->getScriptIface(); + script->triggerABM(m_id, p, n, active_object_count, active_object_count_wider); + } +}; + +class LuaLBM : public LoadingBlockModifierDef +{ +private: + int m_id; +public: + LuaLBM(int id, + const std::vector &trigger_contents, + const std::string &name, bool run_at_every_load): + m_id(id) + { + this->run_at_every_load = run_at_every_load; + this->trigger_contents = trigger_contents; + this->name = name; + } + + virtual void trigger(ServerEnvironment *env, MapBlock *block, + const std::unordered_set &positions, float dtime_s) + { + auto *script = env->getScriptIface(); + script->triggerLBM(m_id, block, positions, dtime_s); + } +}; + +/* + ScriptApiEnv +*/ void ScriptApiEnv::environment_OnGenerated(v3s16 minp, v3s16 maxp, u32 blockseed) @@ -46,7 +141,6 @@ void ScriptApiEnv::environment_OnGenerated(v3s16 minp, v3s16 maxp, void ScriptApiEnv::environment_Step(float dtime) { SCRIPTAPI_PRECHECKHEADER - //infostream << "scriptapi_environment_step" << std::endl; // Get core.registered_globalsteps lua_getglobal(L, "core"); @@ -76,12 +170,40 @@ void ScriptApiEnv::player_event(ServerActiveObject *player, const std::string &t void ScriptApiEnv::initializeEnvironment(ServerEnvironment *env) { SCRIPTAPI_PRECHECKHEADER + + assert(env); verbosestream << "ScriptApiEnv: Environment initialized" << std::endl; setEnv(env); - /* - Add {Loading,Active}BlockModifiers to environment - */ + readABMs(); + readLBMs(); +} + +// Reads a single or a list of node names into a vector +bool ScriptApiEnv::read_nodenames(lua_State *L, int idx, std::vector &to) +{ + if (lua_istable(L, idx)) { + const int table = idx < 0 ? (lua_gettop(L) + idx + 1) : idx; + lua_pushnil(L); + while (lua_next(L, table)) { + // key at index -2 and value at index -1 + luaL_checktype(L, -1, LUA_TSTRING); + to.emplace_back(readParam(L, -1)); + // removes value, keeps key for next iteration + lua_pop(L, 1); + } + } else if (lua_isstring(L, idx)) { + to.emplace_back(readParam(L, idx)); + } else { + return false; + } + return true; +} + +void ScriptApiEnv::readABMs() +{ + SCRIPTAPI_PRECHECKHEADER + auto *env = reinterpret_cast(getEnv()); // Get core.registered_abms lua_getglobal(L, "core"); @@ -100,36 +222,12 @@ void ScriptApiEnv::initializeEnvironment(ServerEnvironment *env) std::vector trigger_contents; lua_getfield(L, current_abm, "nodenames"); - if (lua_istable(L, -1)) { - int table = lua_gettop(L); - lua_pushnil(L); - while (lua_next(L, table)) { - // key at index -2 and value at index -1 - luaL_checktype(L, -1, LUA_TSTRING); - trigger_contents.emplace_back(readParam(L, -1)); - // removes value, keeps key for next iteration - lua_pop(L, 1); - } - } else if (lua_isstring(L, -1)) { - trigger_contents.emplace_back(readParam(L, -1)); - } + read_nodenames(L, -1, trigger_contents); lua_pop(L, 1); std::vector required_neighbors; lua_getfield(L, current_abm, "neighbors"); - if (lua_istable(L, -1)) { - int table = lua_gettop(L); - lua_pushnil(L); - while (lua_next(L, table)) { - // key at index -2 and value at index -1 - luaL_checktype(L, -1, LUA_TSTRING); - required_neighbors.emplace_back(readParam(L, -1)); - // removes value, keeps key for next iteration - lua_pop(L, 1); - } - } else if (lua_isstring(L, -1)) { - required_neighbors.emplace_back(readParam(L, -1)); - } + read_nodenames(L, -1, required_neighbors); lua_pop(L, 1); float trigger_interval = 10.0; @@ -151,7 +249,7 @@ void ScriptApiEnv::initializeEnvironment(ServerEnvironment *env) luaL_checktype(L, current_abm + 1, LUA_TFUNCTION); lua_pop(L, 1); - LuaABM *abm = new LuaABM(L, id, trigger_contents, required_neighbors, + LuaABM *abm = new LuaABM(id, trigger_contents, required_neighbors, trigger_interval, trigger_chance, simple_catch_up, min_y, max_y); env->addActiveBlockModifier(abm); @@ -160,6 +258,12 @@ void ScriptApiEnv::initializeEnvironment(ServerEnvironment *env) lua_pop(L, 1); } lua_pop(L, 1); +} + +void ScriptApiEnv::readLBMs() +{ + SCRIPTAPI_PRECHECKHEADER + auto *env = reinterpret_cast(getEnv()); // Get core.registered_lbms lua_getglobal(L, "core"); @@ -177,21 +281,9 @@ void ScriptApiEnv::initializeEnvironment(ServerEnvironment *env) int id = lua_tonumber(L, -2); int current_lbm = lua_gettop(L); - std::set trigger_contents; + std::vector trigger_contents; lua_getfield(L, current_lbm, "nodenames"); - if (lua_istable(L, -1)) { - int table = lua_gettop(L); - lua_pushnil(L); - while (lua_next(L, table)) { - // key at index -2 and value at index -1 - luaL_checktype(L, -1, LUA_TSTRING); - trigger_contents.insert(readParam(L, -1)); - // removes value, keeps key for next iteration - lua_pop(L, 1); - } - } else if (lua_isstring(L, -1)) { - trigger_contents.insert(readParam(L, -1)); - } + read_nodenames(L, -1, trigger_contents); lua_pop(L, 1); std::string name; @@ -200,11 +292,7 @@ void ScriptApiEnv::initializeEnvironment(ServerEnvironment *env) bool run_at_every_load = getboolfield_default(L, current_lbm, "run_at_every_load", false); - lua_getfield(L, current_lbm, "action"); - luaL_checktype(L, current_lbm + 1, LUA_TFUNCTION); - lua_pop(L, 1); - - LuaLBM *lbm = new LuaLBM(L, id, trigger_contents, name, + LuaLBM *lbm = new LuaLBM(id, trigger_contents, name, run_at_every_load); env->addLoadingBlockModifierDef(lbm); @@ -288,7 +376,7 @@ void ScriptApiEnv::on_liquid_transformed( int index = 1; lua_createtable(L, list.size(), 0); lua_createtable(L, list.size(), 0); - for(std::pair p : list) { + for(auto &p : list) { lua_pushnumber(L, index); push_v3s16(L, p.first); lua_rawset(L, -4); @@ -332,3 +420,73 @@ bool ScriptApiEnv::has_on_mapblocks_changed() luaL_checktype(L, -1, LUA_TTABLE); return lua_objlen(L, -1) > 0; } + +void ScriptApiEnv::triggerABM(int id, v3s16 p, MapNode n, + u32 active_object_count, u32 active_object_count_wider) +{ + SCRIPTAPI_PRECHECKHEADER + + int error_handler = PUSH_ERROR_HANDLER(L); + + // Get registered_abms + lua_getglobal(L, "core"); + lua_getfield(L, -1, "registered_abms"); + luaL_checktype(L, -1, LUA_TTABLE); + lua_remove(L, -2); // Remove core + + // Get registered_abms[m_id] + lua_pushinteger(L, id); + lua_gettable(L, -2); + FATAL_ERROR_IF(lua_isnil(L, -1), "Entry with given id not found in registered_abms table"); + lua_remove(L, -2); // Remove registered_abms + + setOriginFromTable(-1); + + // Call action + luaL_checktype(L, -1, LUA_TTABLE); + lua_getfield(L, -1, "action"); + luaL_checktype(L, -1, LUA_TFUNCTION); + lua_remove(L, -2); // Remove registered_abms[m_id] + push_v3s16(L, p); + pushnode(L, n); + lua_pushnumber(L, active_object_count); + lua_pushnumber(L, active_object_count_wider); + + int result = lua_pcall(L, 4, 0, error_handler); + if (result) + scriptError(result, "LuaABM::trigger"); + + lua_pop(L, 1); // Pop error handler +} + +void ScriptApiEnv::triggerLBM(int id, MapBlock *block, + const std::unordered_set &positions, float dtime_s) +{ + SCRIPTAPI_PRECHECKHEADER + + int error_handler = PUSH_ERROR_HANDLER(L); + + const v3s16 pos_of_block = block->getPosRelative(); + + // Get core.run_lbm + lua_getglobal(L, "core"); + lua_getfield(L, -1, "run_lbm"); + luaL_checktype(L, -1, LUA_TFUNCTION); + lua_remove(L, -2); // Remove core + + // Call it + lua_pushinteger(L, id); + lua_createtable(L, positions.size(), 0); + int i = 1; + for (auto &p : positions) { + push_v3s16(L, pos_of_block + p); + lua_rawseti(L, -2, i++); + } + lua_pushnumber(L, dtime_s); + + int result = lua_pcall(L, 3, 0, error_handler); + if (result) + scriptError(result, "LuaLBM::trigger"); + + lua_pop(L, 1); // Pop error handler +} diff --git a/src/script/cpp_api/s_env.h b/src/script/cpp_api/s_env.h index bc4c4cd4d..4722cb522 100644 --- a/src/script/cpp_api/s_env.h +++ b/src/script/cpp_api/s_env.h @@ -26,6 +26,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include class ServerEnvironment; +class MapBlock; struct ScriptCallbackState; class ScriptApiEnv : virtual public ScriptApiBase @@ -55,5 +56,20 @@ public: // Determines whether there are any on_mapblocks_changed callbacks bool has_on_mapblocks_changed(); + // Initializes environment and loads some definitions from Lua void initializeEnvironment(ServerEnvironment *env); + + void triggerABM(int id, v3s16 p, MapNode n, + u32 active_object_count, u32 active_object_count_wider); + + void triggerLBM(int id, MapBlock *block, + const std::unordered_set &positions, float dtime_s); + +private: + void readABMs(); + + void readLBMs(); + + // Reads a single or a list of node names into a vector + static bool read_nodenames(lua_State *L, int idx, std::vector &to); }; diff --git a/src/script/cpp_api/s_mapgen.cpp b/src/script/cpp_api/s_mapgen.cpp index c363ce2c2..f50e95159 100644 --- a/src/script/cpp_api/s_mapgen.cpp +++ b/src/script/cpp_api/s_mapgen.cpp @@ -45,7 +45,7 @@ void ScriptApiMapgen::on_shutdown() runCallbacks(0, RUN_CALLBACKS_MODE_FIRST); } -void ScriptApiMapgen::on_generated(BlockMakeData *bmdata) +void ScriptApiMapgen::on_generated(BlockMakeData *bmdata, u32 seed) { SCRIPTAPI_PRECHECKHEADER @@ -66,7 +66,7 @@ void ScriptApiMapgen::on_generated(BlockMakeData *bmdata) lua_pushvalue(L, vmanip); push_v3s16(L, minp); push_v3s16(L, maxp); - lua_pushnumber(L, bmdata->seed); + lua_pushnumber(L, seed); runCallbacks(4, RUN_CALLBACKS_MODE_FIRST); lua_pop(L, 1); // return val diff --git a/src/script/cpp_api/s_mapgen.h b/src/script/cpp_api/s_mapgen.h index e881ca04a..08786f99e 100644 --- a/src/script/cpp_api/s_mapgen.h +++ b/src/script/cpp_api/s_mapgen.h @@ -35,6 +35,6 @@ public: void on_mods_loaded(); void on_shutdown(); - // Called after generating a piece of map before writing it to the map - void on_generated(BlockMakeData *bmdata); + // Called after generating a piece of map, before writing it to the map + void on_generated(BlockMakeData *bmdata, u32 seed); }; diff --git a/src/script/cpp_api/s_security.cpp b/src/script/cpp_api/s_security.cpp index 7c8ba8931..9a4b0763b 100644 --- a/src/script/cpp_api/s_security.cpp +++ b/src/script/cpp_api/s_security.cpp @@ -109,7 +109,12 @@ void ScriptApiSecurity::initializeSecurity() "string", "table", "math", - "bit" + "bit", + // Not sure if completely safe. But if someone enables tracy, they'll + // know what they do. +#if BUILD_WITH_TRACY + "tracy", +#endif }; static const char *io_whitelist[] = { "close", @@ -303,6 +308,11 @@ void ScriptApiSecurity::initializeSecurityClient() "table", "math", "bit", + // Not sure if completely safe. But if someone enables tracy, they'll + // know what they do. +#if BUILD_WITH_TRACY + "tracy", +#endif }; static const char *os_whitelist[] = { "clock", diff --git a/src/script/cpp_api/s_server.cpp b/src/script/cpp_api/s_server.cpp index c255b0c71..d8282998d 100644 --- a/src/script/cpp_api/s_server.cpp +++ b/src/script/cpp_api/s_server.cpp @@ -246,7 +246,7 @@ void ScriptApiServer::freeDynamicMediaCallback(u32 token) lua_pop(L, 2); } -void ScriptApiServer::on_dynamic_media_added(u32 token, const char *playername) +void ScriptApiServer::on_dynamic_media_added(u32 token, const std::string &playername) { SCRIPTAPI_PRECHECKHEADER @@ -257,6 +257,6 @@ void ScriptApiServer::on_dynamic_media_added(u32 token, const char *playername) lua_rawgeti(L, -1, token); luaL_checktype(L, -1, LUA_TFUNCTION); - lua_pushstring(L, playername); + lua_pushstring(L, playername.c_str()); PCALL_RES(lua_pcall(L, 1, 0, error_handler)); } diff --git a/src/script/cpp_api/s_server.h b/src/script/cpp_api/s_server.h index 58c8c0e48..bb1289dd9 100644 --- a/src/script/cpp_api/s_server.h +++ b/src/script/cpp_api/s_server.h @@ -53,7 +53,7 @@ public: /* dynamic media handling */ static u32 allocateDynamicMediaCallback(lua_State *L, int f_idx); void freeDynamicMediaCallback(u32 token); - void on_dynamic_media_added(u32 token, const char *playername); + void on_dynamic_media_added(u32 token, const std::string &playername); private: void getAuthHandler(); diff --git a/src/script/lua_api/l_client.cpp b/src/script/lua_api/l_client.cpp index da19ed0ea..3bd9fc04d 100644 --- a/src/script/lua_api/l_client.cpp +++ b/src/script/lua_api/l_client.cpp @@ -157,13 +157,6 @@ int ModApiClient::l_show_formspec(lua_State *L) return 1; } -// send_respawn() -int ModApiClient::l_send_respawn(lua_State *L) -{ - getClient(L)->sendRespawn(); - return 0; -} - // disconnect() int ModApiClient::l_disconnect(lua_State *L) { @@ -348,7 +341,6 @@ void ModApiClient::Initialize(lua_State *L, int top) API_FCT(clear_out_chat_queue); API_FCT(get_player_names); API_FCT(show_formspec); - API_FCT(send_respawn); API_FCT(gettext); API_FCT(get_node_or_nil); API_FCT(disconnect); diff --git a/src/script/lua_api/l_client.h b/src/script/lua_api/l_client.h index e960dc4cf..d726bc8a3 100644 --- a/src/script/lua_api/l_client.h +++ b/src/script/lua_api/l_client.h @@ -51,9 +51,6 @@ private: // show_formspec(name, formspec) static int l_show_formspec(lua_State *L); - // send_respawn() - static int l_send_respawn(lua_State *L); - // disconnect() static int l_disconnect(lua_State *L); diff --git a/src/script/lua_api/l_env.cpp b/src/script/lua_api/l_env.cpp index 06dc27b2d..125a352bc 100644 --- a/src/script/lua_api/l_env.cpp +++ b/src/script/lua_api/l_env.cpp @@ -65,96 +65,10 @@ const EnumString ModApiEnvBase::es_BlockStatusType[] = /////////////////////////////////////////////////////////////////////////////// - -void LuaABM::trigger(ServerEnvironment *env, v3s16 p, MapNode n, - u32 active_object_count, u32 active_object_count_wider) -{ - ServerScripting *scriptIface = env->getScriptIface(); - scriptIface->realityCheck(); - - lua_State *L = scriptIface->getStack(); - sanity_check(lua_checkstack(L, 20)); - StackUnroller stack_unroller(L); - - int error_handler = PUSH_ERROR_HANDLER(L); - - // Get registered_abms - lua_getglobal(L, "core"); - lua_getfield(L, -1, "registered_abms"); - luaL_checktype(L, -1, LUA_TTABLE); - lua_remove(L, -2); // Remove core - - // Get registered_abms[m_id] - lua_pushinteger(L, m_id); - lua_gettable(L, -2); - if(lua_isnil(L, -1)) - FATAL_ERROR(""); - lua_remove(L, -2); // Remove registered_abms - - scriptIface->setOriginFromTable(-1); - - // Call action - luaL_checktype(L, -1, LUA_TTABLE); - lua_getfield(L, -1, "action"); - luaL_checktype(L, -1, LUA_TFUNCTION); - lua_remove(L, -2); // Remove registered_abms[m_id] - push_v3s16(L, p); - pushnode(L, n); - lua_pushnumber(L, active_object_count); - lua_pushnumber(L, active_object_count_wider); - - int result = lua_pcall(L, 4, 0, error_handler); - if (result) - scriptIface->scriptError(result, "LuaABM::trigger"); - - lua_pop(L, 1); // Pop error handler -} - -void LuaLBM::trigger(ServerEnvironment *env, v3s16 p, - const MapNode n, const float dtime_s) -{ - ServerScripting *scriptIface = env->getScriptIface(); - scriptIface->realityCheck(); - - lua_State *L = scriptIface->getStack(); - sanity_check(lua_checkstack(L, 20)); - StackUnroller stack_unroller(L); - - int error_handler = PUSH_ERROR_HANDLER(L); - - // Get registered_lbms - lua_getglobal(L, "core"); - lua_getfield(L, -1, "registered_lbms"); - luaL_checktype(L, -1, LUA_TTABLE); - lua_remove(L, -2); // Remove core - - // Get registered_lbms[m_id] - lua_pushinteger(L, m_id); - lua_gettable(L, -2); - FATAL_ERROR_IF(lua_isnil(L, -1), "Entry with given id not found in registered_lbms table"); - lua_remove(L, -2); // Remove registered_lbms - - scriptIface->setOriginFromTable(-1); - - // Call action - luaL_checktype(L, -1, LUA_TTABLE); - lua_getfield(L, -1, "action"); - luaL_checktype(L, -1, LUA_TFUNCTION); - lua_remove(L, -2); // Remove registered_lbms[m_id] - push_v3s16(L, p); - pushnode(L, n); - lua_pushnumber(L, dtime_s); - - int result = lua_pcall(L, 3, 0, error_handler); - if (result) - scriptIface->scriptError(result, "LuaLBM::trigger"); - - lua_pop(L, 1); // Pop error handler -} - int LuaRaycast::l_next(lua_State *L) { GET_PLAIN_ENV_PTR; + ServerEnvironment *senv = dynamic_cast(env); bool csm = false; #ifndef SERVER @@ -163,7 +77,17 @@ int LuaRaycast::l_next(lua_State *L) LuaRaycast *o = checkObject(L, 1); PointedThing pointed; - env->continueRaycast(&o->state, &pointed); + for (;;) { + env->continueRaycast(&o->state, &pointed); + if (pointed.type != POINTEDTHING_OBJECT) + break; + if (!senv) + break; + const auto *obj = senv->getActiveObject(pointed.object_id); + if (obj && !obj->isGone()) + break; + // skip gone object + } if (pointed.type == POINTEDTHING_NOTHING) lua_pushnil(L); else @@ -329,6 +253,31 @@ int ModApiEnv::l_swap_node(lua_State *L) return 1; } +// bulk_swap_node([pos1, pos2, ...], node) +// pos = {x=num, y=num, z=num} +int ModApiEnv::l_bulk_swap_node(lua_State *L) +{ + GET_ENV_PTR; + + luaL_checktype(L, 1, LUA_TTABLE); + + s32 len = lua_objlen(L, 1); + + MapNode n = readnode(L, 2); + + // Do it + bool succeeded = true; + for (s32 i = 1; i <= len; i++) { + lua_rawgeti(L, 1, i); + if (!env->swapNode(read_v3s16(L, -1), n)) + succeeded = false; + lua_pop(L, 1); + } + + lua_pushboolean(L, succeeded); + return 1; +} + // get_node_raw(x, y, z) -> content, param1, param2, pos_ok int ModApiEnv::l_get_node_raw(lua_State *L) { @@ -825,10 +774,7 @@ int ModApiEnv::l_get_timeofday(lua_State *L) { GET_PLAIN_ENV_PTR; - // Do it - int timeofday_mh = env->getTimeOfDay(); - float timeofday_f = (float)timeofday_mh / 24000.0f; - lua_pushnumber(L, timeofday_f); + lua_pushnumber(L, env->getTimeOfDayF()); return 1; } @@ -846,8 +792,7 @@ int ModApiEnv::l_get_gametime(lua_State *L) { GET_ENV_PTR; - int game_time = env->getGameTime(); - lua_pushnumber(L, game_time); + lua_pushnumber(L, env->getGameTime()); return 1; } @@ -959,8 +904,8 @@ int ModApiEnvBase::findNodesInArea(lua_State *L, const NodeDefManager *ndef, }); // last filter table is at top of stack - u32 i = filter.size() - 1; - do { + u32 i = filter.size(); + while (i --> 0) { if (idx[i] == 0) { // No such node found -> drop the empty table lua_pop(L, 1); @@ -968,7 +913,7 @@ int ModApiEnvBase::findNodesInArea(lua_State *L, const NodeDefManager *ndef, // This node was found -> put table into the return table lua_setfield(L, base, ndef->get(filter[i]).name.c_str()); } - } while (i-- != 0); + } assert(lua_gettop(L) == base); return 1; @@ -1457,6 +1402,7 @@ void ModApiEnv::Initialize(lua_State *L, int top) API_FCT(bulk_set_node); API_FCT(add_node); API_FCT(swap_node); + API_FCT(bulk_swap_node); API_FCT(add_item); API_FCT(remove_node); API_FCT(get_node_raw); diff --git a/src/script/lua_api/l_env.h b/src/script/lua_api/l_env.h index 2ed0eb114..ba0f2eb61 100644 --- a/src/script/lua_api/l_env.h +++ b/src/script/lua_api/l_env.h @@ -20,9 +20,10 @@ with this program; if not, write to the Free Software Foundation, Inc., #pragma once #include "lua_api/l_base.h" -#include "serverenvironment.h" #include "raycast.h" +class ServerScripting; + // base class containing helpers class ModApiEnvBase : public ModApiBase { protected: @@ -64,6 +65,10 @@ private: // pos = {x=num, y=num, z=num} static int l_bulk_set_node(lua_State *L); + // bulk_swap_node([pos1, pos2, ...], node) + // pos = {x=num, y=num, z=num} + static int l_bulk_swap_node(lua_State *L); + static int l_add_node(lua_State *L); // remove_node(pos) @@ -281,82 +286,6 @@ public: static void InitializeEmerge(lua_State *L, int top); }; -class LuaABM : public ActiveBlockModifier { -private: - int m_id; - - std::vector m_trigger_contents; - std::vector m_required_neighbors; - float m_trigger_interval; - u32 m_trigger_chance; - bool m_simple_catch_up; - s16 m_min_y; - s16 m_max_y; -public: - LuaABM(lua_State *L, int id, - const std::vector &trigger_contents, - const std::vector &required_neighbors, - float trigger_interval, u32 trigger_chance, bool simple_catch_up, s16 min_y, s16 max_y): - m_id(id), - m_trigger_contents(trigger_contents), - m_required_neighbors(required_neighbors), - m_trigger_interval(trigger_interval), - m_trigger_chance(trigger_chance), - m_simple_catch_up(simple_catch_up), - m_min_y(min_y), - m_max_y(max_y) - { - } - virtual const std::vector &getTriggerContents() const - { - return m_trigger_contents; - } - virtual const std::vector &getRequiredNeighbors() const - { - return m_required_neighbors; - } - virtual float getTriggerInterval() - { - return m_trigger_interval; - } - virtual u32 getTriggerChance() - { - return m_trigger_chance; - } - virtual bool getSimpleCatchUp() - { - return m_simple_catch_up; - } - virtual s16 getMinY() - { - return m_min_y; - } - virtual s16 getMaxY() - { - return m_max_y; - } - virtual void trigger(ServerEnvironment *env, v3s16 p, MapNode n, - u32 active_object_count, u32 active_object_count_wider); -}; - -class LuaLBM : public LoadingBlockModifierDef -{ -private: - int m_id; -public: - LuaLBM(lua_State *L, int id, - const std::set &trigger_contents, - const std::string &name, - bool run_at_every_load): - m_id(id) - { - this->run_at_every_load = run_at_every_load; - this->trigger_contents = trigger_contents; - this->name = name; - } - virtual void trigger(ServerEnvironment *env, v3s16 p, MapNode n, float dtime_s); -}; - //! Lua wrapper for RaycastState objects class LuaRaycast : public ModApiBase { diff --git a/src/script/lua_api/l_localplayer.cpp b/src/script/lua_api/l_localplayer.cpp index 72913161d..cfb7484df 100644 --- a/src/script/lua_api/l_localplayer.cpp +++ b/src/script/lua_api/l_localplayer.cpp @@ -72,7 +72,7 @@ int LuaLocalPlayer::l_get_name(lua_State *L) { LocalPlayer *player = getobject(L, 1); - lua_pushstring(L, player->getName()); + lua_pushstring(L, player->getName().c_str()); return 1; } diff --git a/src/script/lua_api/l_mainmenu.cpp b/src/script/lua_api/l_mainmenu.cpp index a5913e807..bf20f14ba 100644 --- a/src/script/lua_api/l_mainmenu.cpp +++ b/src/script/lua_api/l_mainmenu.cpp @@ -34,6 +34,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "content/subgames.h" #include "mapgen/mapgen.h" #include "settings.h" +#include "clientdynamicinfo.h" #include "client/client.h" #include "client/renderingengine.h" #include "network/networkprotocol.h" @@ -675,6 +676,13 @@ int ModApiMainMenu::l_get_modpaths(lua_State *L) ModApiMainMenu::l_get_modpath(L); lua_setfield(L, -2, "mods"); + if (porting::path_share != porting::path_user) { + std::string modpath = fs::RemoveRelativePathComponents( + porting::path_share + DIR_DELIM + "mods" + DIR_DELIM); + lua_pushstring(L, modpath.c_str()); + lua_setfield(L, -2, "share"); + } + for (const std::string &component : getEnvModPaths()) { lua_pushstring(L, component.c_str()); lua_setfield(L, -2, fs::AbsolutePath(component).c_str()); diff --git a/src/script/lua_api/l_mapgen.cpp b/src/script/lua_api/l_mapgen.cpp index 2b61f0e77..8e1ef97d6 100644 --- a/src/script/lua_api/l_mapgen.cpp +++ b/src/script/lua_api/l_mapgen.cpp @@ -1354,7 +1354,7 @@ int ModApiMapgen::l_register_ore(lua_State *L) ore->flags = 0; //// Get noise_threshold - warn_if_field_exists(L, index, "noise_threshhold", + warn_if_field_exists(L, index, "noise_threshhold", "ore " + ore->name, "Deprecated: new name is \"noise_threshold\"."); float nthresh; @@ -1364,9 +1364,9 @@ int ModApiMapgen::l_register_ore(lua_State *L) ore->nthresh = nthresh; //// Get y_min/y_max - warn_if_field_exists(L, index, "height_min", + warn_if_field_exists(L, index, "height_min", "ore " + ore->name, "Deprecated: new name is \"y_min\"."); - warn_if_field_exists(L, index, "height_max", + warn_if_field_exists(L, index, "height_max", "ore " + ore->name, "Deprecated: new name is \"y_max\"."); int ymin, ymax; diff --git a/src/script/lua_api/l_noise.cpp b/src/script/lua_api/l_noise.cpp index 84da720db..ead14fec0 100644 --- a/src/script/lua_api/l_noise.cpp +++ b/src/script/lua_api/l_noise.cpp @@ -542,9 +542,9 @@ int LuaPcgRandom::l_set_state(lua_State *L) u64 state[2]; s_state_0 >> std::hex >> state[0]; s_state_1 >> std::hex >> state[1]; - + o->m_rnd.setState(state); - + return 0; } @@ -641,10 +641,9 @@ int LuaSecureRandom::create_object(lua_State *L) { LuaSecureRandom *o = new LuaSecureRandom(); - // Fail and return nil if we can't securely fill the buffer if (!o->fillRandBuf()) { delete o; - return 0; + throw LuaError("SecureRandom: Failed to find secure random device on system"); } *(void **)(lua_newuserdata(L, sizeof(void *))) = o; diff --git a/src/script/lua_api/l_object.cpp b/src/script/lua_api/l_object.cpp index 1246ae104..6532bf3c9 100644 --- a/src/script/lua_api/l_object.cpp +++ b/src/script/lua_api/l_object.cpp @@ -19,6 +19,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "lua_api/l_object.h" #include +#include #include "lua_api/l_internal.h" #include "lua_api/l_inventory.h" #include "lua_api/l_item.h" @@ -26,6 +27,8 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "common/c_converter.h" #include "common/c_content.h" #include "log.h" +#include "player.h" +#include "server/serveractiveobject.h" #include "tool.h" #include "remoteplayer.h" #include "server.h" @@ -35,12 +38,14 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "server/player_sao.h" #include "server/serverinventorymgr.h" #include "server/unit_sao.h" +#include "util/string.h" + +using object_t = ServerActiveObject::object_t; /* ObjectRef */ - ServerActiveObject* ObjectRef::getobject(ObjectRef *ref) { ServerActiveObject *sao = ref->m_object; @@ -98,14 +103,18 @@ int ObjectRef::l_remove(lua_State *L) if (sao->getType() == ACTIVEOBJECT_TYPE_PLAYER) return 0; - sao->clearChildAttachments(); - sao->clearParentAttachment(); - verbosestream << "ObjectRef::l_remove(): id=" << sao->getId() << std::endl; sao->markForRemoval(); return 0; } +// is_valid(self) +int ObjectRef::l_is_valid(lua_State *L) +{ + lua_pushboolean(L, getobject(checkObject(L, 1)) != nullptr); + return 1; +} + // get_pos(self) int ObjectRef::l_get_pos(lua_State *L) { @@ -553,8 +562,10 @@ int ObjectRef::l_set_bone_position(lua_State *L) BoneOverride props; if (!lua_isnoneornil(L, 3)) props.position.vector = check_v3f(L, 3); - if (!lua_isnoneornil(L, 4)) - props.rotation.next = core::quaternion(check_v3f(L, 4) * core::DEGTORAD); + if (!lua_isnoneornil(L, 4)) { + props.rotation.next_radians = check_v3f(L, 4) * core::DEGTORAD; + props.rotation.next = core::quaternion(props.rotation.next_radians); + } props.position.absolute = true; props.rotation.absolute = true; sao->setBoneOverride(bone, props); @@ -576,9 +587,9 @@ int ObjectRef::l_get_bone_position(lua_State *L) std::string bone = readParam(L, 2, ""); BoneOverride props = sao->getBoneOverride(bone); push_v3f(L, props.position.vector); - v3f euler_rot; - props.rotation.next.toEuler(euler_rot); - push_v3f(L, euler_rot * core::RADTODEG); + // In order to give modders back the euler angles they passed in, + // this **must not** compute equivalent euler angles from the quaternion + push_v3f(L, props.rotation.next_radians * core::RADTODEG); return 2; } @@ -624,8 +635,10 @@ int ObjectRef::l_set_bone_override(lua_State *L) lua_getfield(L, 3, "rotation"); if (!lua_isnil(L, -1)) { lua_getfield(L, -1, "vec"); - if (!lua_isnil(L, -1)) - props.rotation.next = core::quaternion(check_v3f(L, -1)); + if (!lua_isnil(L, -1)) { + props.rotation.next_radians = check_v3f(L, -1); + props.rotation.next = core::quaternion(props.rotation.next_radians); + } lua_pop(L, 1); read_prop_attrs(props.rotation); @@ -663,9 +676,9 @@ static void push_bone_override(lua_State *L, const BoneOverride &props) push_prop("position", props.position, props.position.vector); - v3f euler_rot; - props.rotation.next.toEuler(euler_rot); - push_prop("rotation", props.rotation, euler_rot); + // In order to give modders back the euler angles they passed in, + // this **must not** compute equivalent euler angles from the quaternion + push_prop("rotation", props.rotation, props.rotation.next_radians); push_prop("scale", props.scale, props.scale.vector); @@ -716,25 +729,17 @@ int ObjectRef::l_set_attach(lua_State *L) if (sao == parent) throw LuaError("ObjectRef::set_attach: attaching object to itself is not allowed."); - int parent_id; std::string bone; v3f position; v3f rotation; bool force_visible; - sao->getAttachment(&parent_id, &bone, &position, &rotation, &force_visible); - if (parent_id) { - ServerActiveObject *old_parent = env->getActiveObject(parent_id); - old_parent->removeAttachmentChild(sao->getId()); - } - bone = readParam(L, 3, ""); position = readParam(L, 4, v3f(0, 0, 0)); rotation = readParam(L, 5, v3f(0, 0, 0)); force_visible = readParam(L, 6, false); sao->setAttachment(parent->getId(), bone, position, rotation, force_visible); - parent->addAttachmentChild(sao->getId()); return 0; } @@ -747,7 +752,7 @@ int ObjectRef::l_get_attach(lua_State *L) if (sao == nullptr) return 0; - int parent_id; + object_t parent_id; std::string bone; v3f position; v3f rotation; @@ -775,11 +780,11 @@ int ObjectRef::l_get_children(lua_State *L) if (sao == nullptr) return 0; - const std::unordered_set child_ids = sao->getAttachmentChildIds(); + const auto &child_ids = sao->getAttachmentChildIds(); int i = 0; lua_createtable(L, child_ids.size(), 0); - for (const int id : child_ids) { + for (const object_t id : child_ids) { ServerActiveObject *child = env->getActiveObject(id); getScriptApiBase(L)->objectrefGetOrCreate(L, child); lua_rawseti(L, -2, ++i); @@ -839,6 +844,81 @@ int ObjectRef::l_get_properties(lua_State *L) return 1; } +// set_observers(self, observers) +int ObjectRef::l_set_observers(lua_State *L) +{ + GET_ENV_PTR; + ObjectRef *ref = checkObject(L, 1); + ServerActiveObject *sao = getobject(ref); + if (sao == nullptr) + throw LuaError("Invalid ObjectRef"); + + // Reset object to "unmanaged" (sent to everyone)? + if (lua_isnoneornil(L, 2)) { + sao->m_observers.reset(); + return 0; + } + + std::unordered_set observer_names; + lua_pushnil(L); + while (lua_next(L, 2) != 0) { + std::string name = readParam(L, -2); + if (!is_valid_player_name(name)) + throw LuaError("Observer name is not a valid player name"); + if (!lua_toboolean(L, -1)) // falsy value? + throw LuaError("Values in the `observers` table need to be true"); + observer_names.insert(std::move(name)); + lua_pop(L, 1); // pop value, keep key + } + + RemotePlayer *player = getplayer(ref); + if (player != nullptr) { + observer_names.insert(player->getName()); + } + + sao->m_observers = std::move(observer_names); + return 0; +} + +template +static int get_observers(lua_State *L, F observer_getter) +{ + ObjectRef *ref = ObjectRef::checkObject(L, 1); + ServerActiveObject *sao = ObjectRef::getobject(ref); + if (sao == nullptr) + throw LuaError("invalid ObjectRef"); + + const auto observers = observer_getter(sao); + if (!observers) { + lua_pushnil(L); + return 1; + } + // Push set of observers {[name] = true} + lua_createtable(L, 0, observers->size()); + for (auto &name : *observers) { + lua_pushboolean(L, true); + lua_setfield(L, -2, name.c_str()); + } + return 1; +} + +// get_observers(self) +int ObjectRef::l_get_observers(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + return get_observers(L, [](auto sao) { return sao->m_observers; }); +} + +// get_effective_observers(self) +int ObjectRef::l_get_effective_observers(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + return get_observers(L, [](auto sao) { + // The cache may be outdated, so we always have to recalculate. + return sao->recalculateEffectiveObservers(); + }); +} + // is_player(self) int ObjectRef::l_is_player(lua_State *L) { @@ -1168,7 +1248,7 @@ int ObjectRef::l_get_player_name(lua_State *L) return 1; } - lua_pushstring(L, player->getName()); + lua_pushstring(L, player->getName().c_str()); return 1; } @@ -1844,7 +1924,7 @@ int ObjectRef::l_hud_get_hotbar_itemcount(lua_State *L) if (player == nullptr) return 0; - lua_pushinteger(L, player->getHotbarItemcount()); + lua_pushinteger(L, player->getMaxHotbarItemcount()); return 1; } @@ -2368,6 +2448,10 @@ int ObjectRef::l_set_clouds(lua_State *L) if (!lua_isnil(L, -1)) read_color(L, -1, &cloud_params.color_ambient); lua_pop(L, 1); + lua_getfield(L, 2, "shadow"); + if (!lua_isnil(L, -1)) + read_color(L, -1, &cloud_params.color_shadow); + lua_pop(L, 1); cloud_params.height = getfloatfield_default(L, 2, "height", cloud_params.height); cloud_params.thickness = getfloatfield_default(L, 2, "thickness", cloud_params.thickness); @@ -2403,6 +2487,8 @@ int ObjectRef::l_get_clouds(lua_State *L) lua_setfield(L, -2, "color"); push_ARGB8(L, cloud_params.color_ambient); lua_setfield(L, -2, "ambient"); + push_ARGB8(L, cloud_params.color_shadow); + lua_setfield(L, -2, "shadow"); lua_pushnumber(L, cloud_params.height); lua_setfield(L, -2, "height"); lua_pushnumber(L, cloud_params.thickness); @@ -2538,6 +2624,8 @@ int ObjectRef::l_set_lighting(lua_State *L) lua_getfield(L, 2, "shadows"); if (lua_istable(L, -1)) { getfloatfield(L, -1, "intensity", lighting.shadow_intensity); + lua_getfield(L, -1, "tint"); + read_color(L, -1, &lighting.shadow_tint); } lua_pop(L, 1); // shadows @@ -2583,6 +2671,8 @@ int ObjectRef::l_get_lighting(lua_State *L) lua_newtable(L); // "shadows" lua_pushnumber(L, lighting.shadow_intensity); lua_setfield(L, -2, "intensity"); + push_ARGB8(L, lighting.shadow_tint); + lua_setfield(L, -2, "tint"); lua_setfield(L, -2, "shadows"); lua_pushnumber(L, lighting.saturation); lua_setfield(L, -2, "saturation"); @@ -2612,15 +2702,50 @@ int ObjectRef::l_respawn(lua_State *L) { NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkObject(L, 1); - RemotePlayer *player = getplayer(ref); - if (player == nullptr) + auto *psao = getplayersao(ref); + if (psao == nullptr) return 0; - getServer(L)->RespawnPlayer(player->getPeerId()); + psao->respawn(); lua_pushboolean(L, true); return 1; } +// set_flags(self, flags) +int ObjectRef::l_set_flags(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + ObjectRef *ref = checkObject(L, 1); + auto *psao = getplayersao(ref); + if (psao == nullptr) + return 0; + if (!lua_istable(L, -1)) + throw LuaError("expected a table of flags"); + auto &flags = psao->m_flags; + flags.drowning = getboolfield_default(L, -1, "drowning", flags.drowning); + flags.breathing = getboolfield_default(L, -1, "breathing", flags.breathing); + flags.node_damage = getboolfield_default(L, -1, "node_damage", flags.node_damage); + return 0; +} + +// get_flags(self) +int ObjectRef::l_get_flags(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + ObjectRef *ref = checkObject(L, 1); + const auto *psao = getplayersao(ref); + if (psao == nullptr) + return 0; + lua_createtable(L, 0, 3); + lua_pushboolean(L, psao->m_flags.drowning); + lua_setfield(L, -2, "drowning"); + lua_pushboolean(L, psao->m_flags.breathing); + lua_setfield(L, -2, "breathing"); + lua_pushboolean(L, psao->m_flags.node_damage); + lua_setfield(L, -2, "node_damage"); + return 1; +} + ObjectRef::ObjectRef(ServerActiveObject *object): m_object(object) @@ -2655,6 +2780,7 @@ const char ObjectRef::className[] = "ObjectRef"; luaL_Reg ObjectRef::methods[] = { // ServerActiveObject luamethod(ObjectRef, remove), + luamethod(ObjectRef, is_valid), luamethod_aliased(ObjectRef, get_pos, getpos), luamethod_aliased(ObjectRef, set_pos, setpos), luamethod(ObjectRef, add_pos), @@ -2686,6 +2812,9 @@ luaL_Reg ObjectRef::methods[] = { luamethod(ObjectRef, get_properties), luamethod(ObjectRef, set_nametag_attributes), luamethod(ObjectRef, get_nametag_attributes), + luamethod(ObjectRef, set_observers), + luamethod(ObjectRef, get_observers), + luamethod(ObjectRef, get_effective_observers), luamethod_aliased(ObjectRef, set_velocity, setvelocity), luamethod_aliased(ObjectRef, add_velocity, add_player_velocity), @@ -2767,6 +2896,8 @@ luaL_Reg ObjectRef::methods[] = { luamethod(ObjectRef, set_lighting), luamethod(ObjectRef, get_lighting), luamethod(ObjectRef, respawn), + luamethod(ObjectRef, set_flags), + luamethod(ObjectRef, get_flags), {0,0} }; diff --git a/src/script/lua_api/l_object.h b/src/script/lua_api/l_object.h index 73264db10..8225aa470 100644 --- a/src/script/lua_api/l_object.h +++ b/src/script/lua_api/l_object.h @@ -67,6 +67,9 @@ private: // remove(self) static int l_remove(lua_State *L); + // is_valid(self) + static int l_is_valid(lua_State *L); + // get_pos(self) static int l_get_pos(lua_State *L); @@ -160,6 +163,15 @@ private: // get_properties(self) static int l_get_properties(lua_State *L); + // set_observers(self, observers) + static int l_set_observers(lua_State *L); + + // get_observers(self) + static int l_get_observers(lua_State *L); + + // get_effective_observers(self) + static int l_get_effective_observers(lua_State *L); + // is_player(self) static int l_is_player(lua_State *L); @@ -399,4 +411,10 @@ private: // respawn(self) static int l_respawn(lua_State *L); + + // set_flags(self, flags) + static int l_set_flags(lua_State *L); + + // get_flags(self) + static int l_get_flags(lua_State *L); }; diff --git a/src/script/lua_api/l_server.cpp b/src/script/lua_api/l_server.cpp index af9a526e0..82170f936 100644 --- a/src/script/lua_api/l_server.cpp +++ b/src/script/lua_api/l_server.cpp @@ -365,7 +365,7 @@ int ModApiServer::l_ban_player(lua_State *L) return 1; } -// disconnect_player(name, [reason]) -> success +// disconnect_player(name[, reason[, reconnect]]) -> success int ModApiServer::l_disconnect_player(lua_State *L) { NO_MAP_LOCK_REQUIRED; @@ -388,7 +388,9 @@ int ModApiServer::l_disconnect_player(lua_State *L) return 1; } - server->DenyAccess(player->getPeerId(), SERVER_ACCESSDENIED_CUSTOM_STRING, message); + bool reconnect = readParam(L, 3, false); + + server->DenyAccess(player->getPeerId(), SERVER_ACCESSDENIED_CUSTOM_STRING, message, reconnect); lua_pushboolean(L, true); return 1; } @@ -426,18 +428,8 @@ int ModApiServer::l_show_formspec(lua_State *L) NO_MAP_LOCK_REQUIRED; const char *playername = luaL_checkstring(L, 1); const char *formname = luaL_checkstring(L, 2); - if (*formname == '\0') { - log_deprecated(L, "Deprecated call to `minetest.show_formspec`:" - "`formname` must not be empty"); - } const char *formspec = luaL_checkstring(L, 3); - - if(getServer(L)->showFormspec(playername,formspec,formname)) - { - lua_pushboolean(L, true); - }else{ - lua_pushboolean(L, false); - } + lua_pushboolean(L, getServer(L)->showFormspec(playername,formspec,formname)); return 1; } diff --git a/src/script/lua_api/l_server.h b/src/script/lua_api/l_server.h index 505dce735..a0fae79bd 100644 --- a/src/script/lua_api/l_server.h +++ b/src/script/lua_api/l_server.h @@ -106,7 +106,7 @@ private: // unban_player_or_ip() static int l_unban_player_or_ip(lua_State *L); - // disconnect_player(name, [reason]) -> success + // disconnect_player(name[, reason[, reconnect]]) -> success static int l_disconnect_player(lua_State *L); // remove_player(name) diff --git a/src/script/lua_api/l_util.cpp b/src/script/lua_api/l_util.cpp index 883b9480c..75a11a050 100644 --- a/src/script/lua_api/l_util.cpp +++ b/src/script/lua_api/l_util.cpp @@ -44,6 +44,8 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "util/sha1.h" #include "my_sha256.h" #include "util/png.h" +#include "player.h" +#include "daynightratio.h" #include // only available in zstd 1.3.5+ @@ -60,13 +62,13 @@ with this program; if not, write to the Free Software Foundation, Inc., int ModApiUtil::l_log(lua_State *L) { NO_MAP_LOCK_REQUIRED; - std::string text; + std::string_view text; LogLevel level = LL_NONE; - if (lua_isnone(L, 2)) { - text = luaL_checkstring(L, 1); + if (lua_isnoneornil(L, 2)) { + text = readParam(L, 1); } else { - std::string name = luaL_checkstring(L, 1); - text = luaL_checkstring(L, 2); + auto name = readParam(L, 1); + text = readParam(L, 2); if (name == "deprecated") { log_deprecated(L, text, 2); return 0; @@ -74,7 +76,7 @@ int ModApiUtil::l_log(lua_State *L) level = Logger::stringToLevel(name); if (level == LL_MAX) { warningstream << "Tried to log at unknown level '" << name - << "'. Defaulting to \"none\"." << std::endl; + << "'. Defaulting to \"none\"." << std::endl; level = LL_NONE; } } @@ -625,6 +627,31 @@ int ModApiUtil::l_colorspec_to_bytes(lua_State *L) return 0; } +// colorspec_to_table(colorspec) +int ModApiUtil::l_colorspec_to_table(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + + video::SColor color(0); + if (read_color(L, 1, &color)) { + push_ARGB8(L, color); + return 1; + } + + return 0; +} + +// time_to_day_night_ratio(time_of_day) +int ModApiUtil::l_time_to_day_night_ratio(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + + float time_of_day = lua_tonumber(L, 1) * 24000; + u32 dnr = time_to_daynight_ratio(time_of_day, true); + lua_pushnumber(L, dnr / 1000.0f); + return 1; +} + // encode_png(w, h, data, level) int ModApiUtil::l_encode_png(lua_State *L) { @@ -674,6 +701,16 @@ int ModApiUtil::l_urlencode(lua_State *L) return 1; } +// is_valid_player_name(name) +int ModApiUtil::l_is_valid_player_name(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + + auto s = readParam(L, 1); + lua_pushboolean(L, is_valid_player_name(s)); + return 1; +} + void ModApiUtil::Initialize(lua_State *L, int top) { API_FCT(log); @@ -715,6 +752,8 @@ void ModApiUtil::Initialize(lua_State *L, int top) API_FCT(sha256); API_FCT(colorspec_to_colorstring); API_FCT(colorspec_to_bytes); + API_FCT(colorspec_to_table); + API_FCT(time_to_day_night_ratio); API_FCT(encode_png); @@ -722,6 +761,7 @@ void ModApiUtil::Initialize(lua_State *L, int top) API_FCT(set_last_run_mod); API_FCT(urlencode); + API_FCT(is_valid_player_name); LuaSettings::create(L, g_settings, g_settings_path); lua_setfield(L, top, "settings"); @@ -749,6 +789,8 @@ void ModApiUtil::InitializeClient(lua_State *L, int top) API_FCT(sha256); API_FCT(colorspec_to_colorstring); API_FCT(colorspec_to_bytes); + API_FCT(colorspec_to_table); + API_FCT(time_to_day_night_ratio); API_FCT(get_last_run_mod); API_FCT(set_last_run_mod); @@ -793,6 +835,8 @@ void ModApiUtil::InitializeAsync(lua_State *L, int top) API_FCT(sha256); API_FCT(colorspec_to_colorstring); API_FCT(colorspec_to_bytes); + API_FCT(colorspec_to_table); + API_FCT(time_to_day_night_ratio); API_FCT(encode_png); diff --git a/src/script/lua_api/l_util.h b/src/script/lua_api/l_util.h index 056e09090..89cc684e1 100644 --- a/src/script/lua_api/l_util.h +++ b/src/script/lua_api/l_util.h @@ -122,6 +122,12 @@ private: // colorspec_to_bytes(colorspec) static int l_colorspec_to_bytes(lua_State *L); + // colorspec_to_table(colorspec) + static int l_colorspec_to_table(lua_State *L); + + // time_to_day_night_ratio(time_of_day) + static int l_time_to_day_night_ratio(lua_State *L); + // encode_png(w, h, data, level) static int l_encode_png(lua_State *L); @@ -134,6 +140,9 @@ private: // urlencode(value) static int l_urlencode(lua_State *L); + // is_valid_player_name(name) + static int l_is_valid_player_name(lua_State *L); + public: static void Initialize(lua_State *L, int top); static void InitializeAsync(lua_State *L, int top); diff --git a/src/serialization.cpp b/src/serialization.cpp index 4134126ca..0319b0159 100644 --- a/src/serialization.cpp +++ b/src/serialization.cpp @@ -262,6 +262,8 @@ void decompressZstd(std::istream &is, std::ostream &os) is.read(input_buffer, bufsize); input.size = is.gcount(); input.pos = 0; + if (input.size == 0) + throw SerializationError("decompressZstd: data ended too early"); } ret = ZSTD_decompressStream(stream.get(), &output, &input); diff --git a/src/server.cpp b/src/server.cpp index 7d2861738..d624c5f5c 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -75,6 +75,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "gameparams.h" #include "particles.h" #include "gettext.h" +#include "util/tracy_wrapper.h" class ClientNotFoundException : public BaseException { @@ -101,6 +102,8 @@ private: void *ServerThread::run() { + ZoneScoped; + BEGIN_DEBUG_EXCEPTION_HANDLER /* @@ -110,17 +113,22 @@ void *ServerThread::run() * server-step frequency. Receive() is used for waiting between the steps. */ + auto framemarker = FrameMarker("ServerThread::run()-frame").started(); try { m_server->AsyncRunStep(0.0f, true); } catch (con::ConnectionBindFailed &e) { m_server->setAsyncFatalError(e.what()); } catch (LuaError &e) { m_server->setAsyncFatalError(e); + } catch (ModError &e) { + m_server->setAsyncFatalError(e.what()); } + framemarker.end(); float dtime = 0.0f; while (!stopRequested()) { + framemarker.start(); ScopeProfiler spm(g_profiler, "Server::RunStep() (max)", SPT_MAX); u64 t0 = porting::getTimeUs(); @@ -142,9 +150,12 @@ void *ServerThread::run() m_server->setAsyncFatalError(e.what()); } catch (LuaError &e) { m_server->setAsyncFatalError(e); + } catch (ModError &e) { + m_server->setAsyncFatalError(e.what()); } dtime = 1e-6f * (porting::getTimeUs() - t0); + framemarker.end(); } END_DEBUG_EXCEPTION_HANDLER @@ -254,11 +265,7 @@ Server::Server( m_simple_singleplayer_mode(simple_singleplayer_mode), m_dedicated(dedicated), m_async_fatal_error(""), - m_con(std::make_shared(PROTOCOL_ID, - 512, - CONNECTION_TIMEOUT, - m_bind_addr.isIPv6(), - this)), + m_con(con::createMTP(CONNECTION_TIMEOUT, m_bind_addr.isIPv6(), this)), m_itemdef(createItemDefManager()), m_nodedef(createNodeDefManager()), m_craftdef(createCraftDefManager()), @@ -329,27 +336,6 @@ Server::~Server() SendChatMessage(PEER_ID_INEXISTENT, ChatMessage(CHATMESSAGE_TYPE_ANNOUNCE, L"*** Server shutting down")); - if (m_env) { - MutexAutoLock envlock(m_env_mutex); - - infostream << "Server: Saving players" << std::endl; - m_env->saveLoadedPlayers(); - - infostream << "Server: Kicking players" << std::endl; - std::string kick_msg; - bool reconnect = false; - if (isShutdownRequested()) { - reconnect = m_shutdown_state.should_reconnect; - kick_msg = m_shutdown_state.message; - } - if (kick_msg.empty()) { - kick_msg = g_settings->get("kick_msg_shutdown"); - } - m_env->saveLoadedPlayers(true); - kickAllPlayers(SERVER_ACCESSDENIED_SHUTDOWN, - kick_msg, reconnect); - } - actionstream << "Server: Shutting down" << std::endl; // Stop server step from happening @@ -369,16 +355,33 @@ Server::~Server() if (m_env) { MutexAutoLock envlock(m_env_mutex); + infostream << "Server: Executing shutdown hooks" << std::endl; try { - // Empty out the environment, this can also invoke callbacks. - m_env->deactivateBlocksAndObjects(); + m_script->on_shutdown(); } catch (ModError &e) { addShutdownError(e); } - infostream << "Server: Executing shutdown hooks" << std::endl; + infostream << "Server: Saving players" << std::endl; + m_env->saveLoadedPlayers(); + + infostream << "Server: Kicking players" << std::endl; + std::string kick_msg; + bool reconnect = false; + if (isShutdownRequested()) { + reconnect = m_shutdown_state.should_reconnect; + kick_msg = m_shutdown_state.message; + } + if (kick_msg.empty()) { + kick_msg = g_settings->get("kick_msg_shutdown"); + } + m_env->saveLoadedPlayers(true); + kickAllPlayers(SERVER_ACCESSDENIED_SHUTDOWN, + kick_msg, reconnect); + try { - m_script->on_shutdown(); + // Empty out the environment, this can also invoke callbacks. + m_env->deactivateBlocksAndObjects(); } catch (ModError &e) { addShutdownError(e); } @@ -555,7 +558,6 @@ void Server::start() m_thread->stop(); // Initialize connection - m_con->SetTimeoutMs(30); m_con->Serve(m_bind_addr); // Start thread @@ -612,6 +614,9 @@ void Server::step() void Server::AsyncRunStep(float dtime, bool initial_step) { + ZoneScoped; + auto framemarker = FrameMarker("Server::AsyncRunStep()-frame").started(); + { // Send blocks to clients SendBlocks(dtime); @@ -628,8 +633,6 @@ void Server::AsyncRunStep(float dtime, bool initial_step) */ m_uptime_counter->increment(dtime); - handlePeerChanges(); - /* Update time of day and overall game time */ @@ -785,6 +788,12 @@ void Server::AsyncRunStep(float dtime, bool initial_step) //infostream<<"Server: Checking added and deleted active objects"<invalidateActiveObjectObserverCaches(); + { ClientInterface::AutoLock clientlock(m_clients); const RemoteClientMap &clients = m_clients.getClientList(); @@ -1056,6 +1065,9 @@ void Server::AsyncRunStep(float dtime, bool initial_step) void Server::Receive(float timeout) { + ZoneScoped; + auto framemarker = FrameMarker("Server::Receive()-frame").started(); + const u64 t0 = porting::getTimeUs(); const float timeout_us = timeout * 1e6f; auto remaining_time_us = [&]() -> float { @@ -1075,6 +1087,8 @@ void Server::Receive(float timeout) // and a faster server-step is better than busy waiting. if (remaining_time_us() < 1000.0f) break; + else + continue; } peer_id = pkt.getPeerId(); @@ -1145,10 +1159,6 @@ PlayerSAO* Server::StageTwoClientInit(session_t peer_id) // Send HP SendPlayerHP(playersao, false); - // Send death screen - if (playersao->isDead()) - SendDeathscreen(peer_id, false, v3f(0,0,0)); - // Send Breath SendPlayerBreath(playersao); @@ -1157,7 +1167,7 @@ PlayerSAO* Server::StageTwoClientInit(session_t peer_id) */ { NetworkPacket notice_pkt(TOCLIENT_UPDATE_PLAYER_LIST, 0, PEER_ID_INEXISTENT); - notice_pkt << (u8) PLAYER_LIST_ADD << (u16) 1 << std::string(player->getName()); + notice_pkt << (u8) PLAYER_LIST_ADD << (u16) 1 << player->getName(); m_clients.sendToAll(¬ice_pkt); } { @@ -1252,21 +1262,20 @@ void Server::onMapEditEvent(const MapEditEvent &event) m_unsent_map_edit_queue.push(new MapEditEvent(event)); } -void Server::peerAdded(con::Peer *peer) +void Server::peerAdded(con::IPeer *peer) { - verbosestream<<"Server::peerAdded(): peer->id=" - <id<id=" - <id<<", timeout="<(removed_objects.size()); - std::vector sounds_to_stop; - for (auto &it : removed_objects) { const auto [gone, id] = it; ServerActiveObject *obj = m_env->getActiveObject(id); - // Stop sounds if objects go out of range. - // This fixes https://github.com/minetest/minetest/issues/8094. - // We may not remove sounds if an entity was removed on the server. - // See https://github.com/minetest/minetest/issues/14422. - if (!gone) // just out of range for client, not gone on server? - sounds_to_stop.push_back(id); - pkt << id; // Remove from known objects @@ -2081,8 +2040,10 @@ void Server::SendActiveObjectRemoveAdd(RemoteClient *client, PlayerSAO *playersa obj->m_known_by_count--; } - if (!sounds_to_stop.empty()) - stopAttachedSounds(client->peer_id, sounds_to_stop); + // Note: Do yet NOT stop or remove object-attached sounds where the object goes out + // of range (client side). Such sounds would need to be re-sent when coming into range. + // Currently, the client will initiate m_playing_sounds clean ups indirectly by + // "Server::handleCommand_RemovedSounds". // Added objects pkt << static_cast(added_objects.size()); @@ -2266,37 +2227,6 @@ void Server::fadeSound(s32 handle, float step, float gain) m_playing_sounds.erase(it); } -void Server::stopAttachedSounds(session_t peer_id, - const std::vector &object_ids) -{ - assert(peer_id != PEER_ID_INEXISTENT); - assert(!object_ids.empty()); - - auto cb = [&] (const s32 id, ServerPlayingSound &sound) -> bool { - if (!CONTAINS(object_ids, sound.object)) - return false; - - auto clients_it = sound.clients.find(peer_id); - if (clients_it == sound.clients.end()) - return false; - - NetworkPacket pkt(TOCLIENT_STOP_SOUND, 4); - pkt << id; - Send(peer_id, &pkt); - - sound.clients.erase(clients_it); - // delete if client list empty - return sound.clients.empty(); - }; - - for (auto it = m_playing_sounds.begin(); it != m_playing_sounds.end(); ) { - if (cb(it->first, it->second)) - it = m_playing_sounds.erase(it); - else - ++it; - } -} - void Server::sendRemoveNode(v3s16 p, std::unordered_set *far_players, float far_d_nodes) { @@ -2533,7 +2463,7 @@ bool Server::addMediaFile(const std::string &filename, const char *supported_ext[] = { ".png", ".jpg", ".bmp", ".tga", ".ogg", - ".x", ".b3d", ".obj", + ".x", ".b3d", ".obj", ".gltf", // Custom translation file format ".tr", NULL @@ -2863,32 +2793,8 @@ void Server::HandlePlayerDeath(PlayerSAO *playersao, const PlayerHPChangeReason // Trigger scripted stuff m_script->on_dieplayer(playersao, reason); - - SendDeathscreen(playersao->getPeerID(), false, v3f(0,0,0)); } -void Server::RespawnPlayer(session_t peer_id) -{ - PlayerSAO *playersao = getPlayerSAO(peer_id); - assert(playersao); - - infostream << "Server::RespawnPlayer(): Player " - << playersao->getPlayer()->getName() - << " respawns" << std::endl; - - const auto *prop = playersao->accessObjectProperties(); - playersao->setHP(prop->hp_max, - PlayerHPChangeReason(PlayerHPChangeReason::RESPAWN)); - playersao->setBreath(prop->breath_max); - - bool repositioned = m_script->on_respawnplayer(playersao); - if (!repositioned) { - // setPos will send the new position to client - playersao->setPos(findSpawnPos()); - } -} - - void Server::DenySudoAccess(session_t peer_id) { NetworkPacket pkt(TOCLIENT_DENY_SUDO_MODE, 0, peer_id); @@ -2897,7 +2803,7 @@ void Server::DenySudoAccess(session_t peer_id) void Server::DenyAccess(session_t peer_id, AccessDeniedCode reason, - const std::string &custom_reason, bool reconnect) + std::string_view custom_reason, bool reconnect) { SendAccessDenied(peer_id, reason, custom_reason, reconnect); m_clients.event(peer_id, CSE_SetDenied); @@ -2970,9 +2876,6 @@ void Server::DeleteClient(session_t peer_id, ClientDeletionReason reason) PlayerSAO *playersao = player->getPlayerSAO(); assert(playersao); - playersao->clearChildAttachments(); - playersao->clearParentAttachment(); - // inform connected clients const std::string &player_name = player->getName(); NetworkPacket notice(TOCLIENT_UPDATE_PLAYER_LIST, 0, PEER_ID_INEXISTENT); @@ -3218,14 +3121,11 @@ std::string Server::getStatusString() bool first = true; os << " | clients: "; if (m_env) { - std::vector clients = m_clients.getClientIDs(); - for (session_t client_id : clients) { - RemotePlayer *player = m_env->getPlayer(client_id); + std::vector player_names = m_clients.getPlayerNames(); - // Get name of player - const char *name = player ? player->getName() : ""; + std::sort(player_names.begin(), player_names.end()); - // Add name to information string + for (const std::string& name : player_names) { if (!first) os << ", "; else diff --git a/src/server.h b/src/server.h index 16c1ea4cc..5f6086cde 100644 --- a/src/server.h +++ b/src/server.h @@ -28,7 +28,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "inventorymanager.h" #include "content/subgames.h" #include "network/peerhandler.h" -#include "network/address.h" +#include "network/connection.h" #include "util/numeric.h" #include "util/thread.h" #include "util/basic_macros.h" @@ -193,7 +193,6 @@ public: void handleCommand_ChatMessage(NetworkPacket* pkt); void handleCommand_Damage(NetworkPacket* pkt); void handleCommand_PlayerItem(NetworkPacket* pkt); - void handleCommand_Respawn(NetworkPacket* pkt); void handleCommand_Interact(NetworkPacket* pkt); void handleCommand_RemovedSounds(NetworkPacket* pkt); void handleCommand_NodeMetaFields(NetworkPacket* pkt); @@ -239,9 +238,6 @@ public: s32 playSound(ServerPlayingSound ¶ms, bool ephemeral=false); void stopSound(s32 handle); void fadeSound(s32 handle, float step, float gain); - // Stop all sounds attached to given objects, for a certain client - void stopAttachedSounds(session_t peer_id, - const std::vector &object_ids); // Envlock std::set getPlayerEffectivePrivs(const std::string &name); @@ -359,15 +355,13 @@ public: void setLighting(RemotePlayer *player, const Lighting &lighting); - void RespawnPlayer(session_t peer_id); - /* con::PeerHandler implementation. */ - void peerAdded(con::Peer *peer); - void deletingPeer(con::Peer *peer, bool timeout); + void peerAdded(con::IPeer *peer); + void deletingPeer(con::IPeer *peer, bool timeout); void DenySudoAccess(session_t peer_id); void DenyAccess(session_t peer_id, AccessDeniedCode reason, - const std::string &custom_reason = "", bool reconnect = false); + std::string_view custom_reason = "", bool reconnect = false); void kickAllPlayers(AccessDeniedCode reason, const std::string &str_reason, bool reconnect); void acceptAuth(session_t peer_id, bool forSudoMode); @@ -488,9 +482,7 @@ private: void SendHP(session_t peer_id, u16 hp, bool effect); void SendBreath(session_t peer_id, u16 breath); void SendAccessDenied(session_t peer_id, AccessDeniedCode reason, - const std::string &custom_reason, bool reconnect = false); - void SendDeathscreen(session_t peer_id, bool set_camera_point_target, - v3f camera_point_target); + std::string_view custom_reason, bool reconnect = false); void SendItemDef(session_t peer_id, IItemDefManager *itemdef, u16 protocol_version); void SendNodeDef(session_t peer_id, const NodeDefManager *nodedef, u16 protocol_version); @@ -640,7 +632,7 @@ private: ServerEnvironment *m_env = nullptr; // server connection - std::shared_ptr m_con; + std::shared_ptr m_con; // Ban checking BanManager *m_banmanager = nullptr; @@ -676,13 +668,6 @@ private: */ ClientInterface m_clients; - /* - Peer change queue. - Queues stuff from peerAdded() and deletingPeer() to - handlePeerChanges() - */ - std::queue m_peer_change_queue; - std::unordered_map m_formspec_state_data; /* diff --git a/src/server/activeobjectmgr.cpp b/src/server/activeobjectmgr.cpp index 983fc0d95..f0216d9e3 100644 --- a/src/server/activeobjectmgr.cpp +++ b/src/server/activeobjectmgr.cpp @@ -91,7 +91,7 @@ bool ActiveObjectMgr::registerObject(std::unique_ptr obj) return false; } - auto obj_id = obj->getId(); + auto obj_id = obj->getId(); m_active_objects.put(obj_id, std::move(obj)); auto new_size = m_active_objects.size(); @@ -118,6 +118,16 @@ void ActiveObjectMgr::removeObject(u16 id) } } +void ActiveObjectMgr::invalidateActiveObjectObserverCaches() +{ + for (auto &active_object : m_active_objects.iter()) { + ServerActiveObject *obj = active_object.second.get(); + if (!obj) + continue; + obj->invalidateEffectiveObservers(); + } +} + void ActiveObjectMgr::getObjectsInsideRadius(const v3f &pos, float radius, std::vector &result, std::function include_obj_cb) @@ -153,15 +163,18 @@ void ActiveObjectMgr::getObjectsInArea(const aabb3f &box, } } -void ActiveObjectMgr::getAddedActiveObjectsAroundPos(v3f player_pos, f32 radius, - f32 player_radius, const std::set ¤t_objects, +void ActiveObjectMgr::getAddedActiveObjectsAroundPos( + const v3f &player_pos, const std::string &player_name, + f32 radius, f32 player_radius, + const std::set ¤t_objects, std::vector &added_objects) { /* Go through the object list, - discard removed/deactivated objects, - discard objects that are too far away, - - discard objects that are found in current_objects. + - discard objects that are found in current_objects, + - discard objects that are not observed by the player. - add remaining objects to added_objects */ for (auto &ao_it : m_active_objects.iter()) { @@ -183,6 +196,9 @@ void ActiveObjectMgr::getAddedActiveObjectsAroundPos(v3f player_pos, f32 radius, } else if (distance_f > radius) continue; + if (!object->isEffectivelyObservedBy(player_name)) + continue; + // Discard if already on current_objects auto n = current_objects.find(id); if (n != current_objects.end()) diff --git a/src/server/activeobjectmgr.h b/src/server/activeobjectmgr.h index dab795e8c..82c0ab3ad 100644 --- a/src/server/activeobjectmgr.h +++ b/src/server/activeobjectmgr.h @@ -38,15 +38,18 @@ public: bool registerObject(std::unique_ptr obj) override; void removeObject(u16 id) override; + void invalidateActiveObjectObserverCaches(); + void getObjectsInsideRadius(const v3f &pos, float radius, std::vector &result, std::function include_obj_cb); void getObjectsInArea(const aabb3f &box, std::vector &result, std::function include_obj_cb); - - void getAddedActiveObjectsAroundPos(v3f player_pos, f32 radius, - f32 player_radius, const std::set ¤t_objects, + void getAddedActiveObjectsAroundPos( + const v3f &player_pos, const std::string &player_name, + f32 radius, f32 player_radius, + const std::set ¤t_objects, std::vector &added_objects); }; } // namespace server diff --git a/src/server/clientiface.cpp b/src/server/clientiface.cpp index 451e74407..0e5140f00 100644 --- a/src/server/clientiface.cpp +++ b/src/server/clientiface.cpp @@ -85,23 +85,13 @@ void RemoteClient::ResendBlockIfOnWire(v3s16 p) } } -LuaEntitySAO *getAttachedObject(PlayerSAO *sao, ServerEnvironment *env) +static LuaEntitySAO *getAttachedObject(PlayerSAO *sao, ServerEnvironment *env) { - if (!sao->isAttached()) - return nullptr; + ServerActiveObject *ao = sao; + while (ao->getParent()) + ao = ao->getParent(); - int id; - std::string bone; - v3f dummy; - bool force_visible; - sao->getAttachment(&id, &bone, &dummy, &dummy, &force_visible); - ServerActiveObject *ao = env->getActiveObject(id); - while (id && ao) { - ao->getAttachment(&id, &bone, &dummy, &dummy, &force_visible); - if (id) - ao = env->getActiveObject(id); - } - return dynamic_cast(ao); + return ao == sao ? nullptr : dynamic_cast(ao); } void RemoteClient::GetNextBlocks ( @@ -658,13 +648,14 @@ void RemoteClient::setLangCode(const std::string &code) m_lang_code = string_sanitize_ascii(code, 12); } -ClientInterface::ClientInterface(const std::shared_ptr & con) +ClientInterface::ClientInterface(const std::shared_ptr &con) : m_con(con), m_env(nullptr) { } + ClientInterface::~ClientInterface() { /* diff --git a/src/server/clientiface.h b/src/server/clientiface.h index ac41b00ca..3f5ba6434 100644 --- a/src/server/clientiface.h +++ b/src/server/clientiface.h @@ -126,7 +126,7 @@ class EmergeManager; | TOCLIENT_INVENTORY | | | | | TOCLIENT_HP (opt) | \-----------------/ | | TOCLIENT_BREATH | | -| TOCLIENT_DEATHSCREEN | | +| TOCLIENT_DEATHSCREEN_LEGACY | | +-----------------------------+ | | | v | @@ -168,7 +168,7 @@ class EmergeManager; */ namespace con { - class Connection; + class IConnection; } @@ -321,9 +321,6 @@ public: void setPendingSerializationVersion(u8 version) { m_pending_serialization_version = version; } - void setDeployedCompressionMode(u16 byteFlag) - { m_deployed_compression = byteFlag; } - void confirmSerializationVersion() { serialization_version = m_pending_serialization_version; } @@ -449,8 +446,6 @@ private: std::string m_full_version = "unknown"; - u16 m_deployed_compression = 0; - /* time this client was created */ @@ -464,7 +459,7 @@ public: friend class Server; - ClientInterface(const std::shared_ptr &con); + ClientInterface(const std::shared_ptr &con); ~ClientInterface(); /* run sync step */ @@ -543,7 +538,7 @@ private: void UpdatePlayerList(); // Connection - std::shared_ptr m_con; + std::shared_ptr m_con; std::recursive_mutex m_clients_mutex; // Connected clients (behind the con mutex) RemoteClientMap m_clients; diff --git a/src/server/luaentity_sao.cpp b/src/server/luaentity_sao.cpp index 020f13fa5..e932f418b 100644 --- a/src/server/luaentity_sao.cpp +++ b/src/server/luaentity_sao.cpp @@ -147,7 +147,7 @@ void LuaEntitySAO::step(float dtime, bool send_recommended) } // If attached, check that our parent is still there. If it isn't, detach. - if (m_attachment_parent_id && !isAttached()) { + if (m_attachment_parent_id && !getParent()) { // This is handled when objects are removed from the map warningstream << "LuaEntitySAO::step() " << m_init_name << " at " << m_last_sent_position << ", id=" << m_id << " is attached to nonexistent parent. This is a bug." << std::endl; @@ -415,8 +415,6 @@ void LuaEntitySAO::setHP(s32 hp, const PlayerHPChangeReason &reason) sendPunchCommand(); if (m_hp == 0 && !isGone()) { - clearParentAttachment(); - clearChildAttachments(); if (m_registered) { ServerActiveObject *killer = nullptr; if (reason.type == PlayerHPChangeReason::PLAYER_PUNCH) diff --git a/src/server/luaentity_sao.h b/src/server/luaentity_sao.h index 2080df9c3..6bc7a8409 100644 --- a/src/server/luaentity_sao.h +++ b/src/server/luaentity_sao.h @@ -81,8 +81,14 @@ public: protected: void dispatchScriptDeactivate(bool removal); - virtual void onMarkedForDeactivation() { dispatchScriptDeactivate(false); } - virtual void onMarkedForRemoval() { dispatchScriptDeactivate(true); } + virtual void onMarkedForDeactivation() { + UnitSAO::onMarkedForDeactivation(); + dispatchScriptDeactivate(false); + } + virtual void onMarkedForRemoval() { + UnitSAO::onMarkedForRemoval(); + dispatchScriptDeactivate(true); + } private: std::string getPropertyPacket(); diff --git a/src/server/player_sao.cpp b/src/server/player_sao.cpp index b2e2351c9..30c41bb1e 100644 --- a/src/server/player_sao.cpp +++ b/src/server/player_sao.cpp @@ -156,7 +156,10 @@ void PlayerSAO::getStaticData(std::string * result) const void PlayerSAO::step(float dtime, bool send_recommended) { - if (!isImmortal() && m_drowning_interval.step(dtime, 2.0f)) { + bool not_immortal = !isImmortal(); + + if (not_immortal && m_flags.drowning + && m_drowning_interval.step(dtime, 2.0f)) { // Get nose/mouth position, approximate with eye position v3s16 p = floatToInt(getEyePosition(), BS); MapNode n = m_env->getMap().getNode(p); @@ -174,7 +177,8 @@ void PlayerSAO::step(float dtime, bool send_recommended) } } - if (m_breathing_interval.step(dtime, 0.5f) && !isImmortal()) { + if (not_immortal && m_flags.breathing + && m_breathing_interval.step(dtime, 0.5f)) { // Get nose/mouth position, approximate with eye position v3s16 p = floatToInt(getEyePosition(), BS); MapNode n = m_env->getMap().getNode(p); @@ -185,7 +189,8 @@ void PlayerSAO::step(float dtime, bool send_recommended) setBreath(m_breath + 1); } - if (!isImmortal() && m_node_hurt_interval.step(dtime, 1.0f)) { + if (not_immortal && m_flags.node_damage + && m_node_hurt_interval.step(dtime, 1.0f)) { u32 damage_per_second = 0; std::string nodename; v3s16 node_pos; @@ -233,13 +238,12 @@ void PlayerSAO::step(float dtime, bool send_recommended) } // If attached, check that our parent is still there. If it isn't, detach. - if (m_attachment_parent_id && !isAttached()) { + if (m_attachment_parent_id && !getParent()) { // This is handled when objects are removed from the map warningstream << "PlayerSAO::step() id=" << m_id << " is attached to nonexistent parent. This is a bug." << std::endl; clearParentAttachment(); - setBasePosition(m_last_good_position); - m_env->getGameDef()->SendMovePlayer(this); + setPos(m_last_good_position); } //dstream<<"PlayerSAO::step: dtime: "<getGameDef()->SendPlayerBreath(this); } +void PlayerSAO::respawn() +{ + infostream << "PlayerSAO::respawn(): Player " << m_player->getName() + << " respawns" << std::endl; + + setHP(m_prop.hp_max, PlayerHPChangeReason(PlayerHPChangeReason::RESPAWN)); + setBreath(m_prop.breath_max); + + bool repositioned = m_env->getScriptIface()->on_respawnplayer(this); + if (!repositioned) { + // setPos will send the new position to client + setPos(m_env->getGameDef()->findSpawnPos()); + } +} + Inventory *PlayerSAO::getInventory() const { return m_player ? &m_player->inventory : nullptr; diff --git a/src/server/player_sao.h b/src/server/player_sao.h index b26304589..487e37957 100644 --- a/src/server/player_sao.h +++ b/src/server/player_sao.h @@ -124,6 +124,7 @@ public: void setHPRaw(u16 hp) { m_hp = hp; } u16 getBreath() const { return m_breath; } void setBreath(const u16 breath, bool send = true); + void respawn(); /* Inventory interface @@ -228,6 +229,12 @@ private: SimpleMetadata m_meta; public: + struct { + bool breathing : 1; + bool drowning : 1; + bool node_damage : 1; + } m_flags = {true, true, true}; + bool m_physics_override_sent = false; }; diff --git a/src/server/serveractiveobject.cpp b/src/server/serveractiveobject.cpp index fb09464cf..c660b5a69 100644 --- a/src/server/serveractiveobject.cpp +++ b/src/server/serveractiveobject.cpp @@ -18,11 +18,9 @@ with this program; if not, write to the Free Software Foundation, Inc., */ #include "serveractiveobject.h" -#include #include "inventory.h" #include "inventorymanager.h" #include "constants.h" // BS -#include "log.h" ServerActiveObject::ServerActiveObject(ServerEnvironment *env, v3f pos): ActiveObject(0), @@ -95,3 +93,48 @@ InventoryLocation ServerActiveObject::getInventoryLocation() const { return InventoryLocation(); } + +void ServerActiveObject::invalidateEffectiveObservers() +{ + m_effective_observers.reset(); +} + +using Observers = ServerActiveObject::Observers; + +const Observers &ServerActiveObject::getEffectiveObservers() +{ + if (m_effective_observers) // cached + return *m_effective_observers; + + auto parent = getParent(); + if (parent == nullptr) + return *(m_effective_observers = m_observers); + auto parent_observers = parent->getEffectiveObservers(); + if (!parent_observers) // parent is unmanaged + return *(m_effective_observers = m_observers); + if (!m_observers) // we are unmanaged + return *(m_effective_observers = parent_observers); + // Set intersection between parent_observers and m_observers + // Avoid .clear() to free the allocated memory. + m_effective_observers = std::unordered_set(); + for (const auto &observer_name : *m_observers) { + if (parent_observers->count(observer_name) > 0) + (*m_effective_observers)->insert(observer_name); + } + return *m_effective_observers; +} + +const Observers& ServerActiveObject::recalculateEffectiveObservers() +{ + // Invalidate final observers for this object and all of its parents. + for (auto obj = this; obj != nullptr; obj = obj->getParent()) + obj->invalidateEffectiveObservers(); + // getEffectiveObservers will now be forced to recalculate. + return getEffectiveObservers(); +} + +bool ServerActiveObject::isEffectivelyObservedBy(const std::string &player_name) +{ + auto effective_observers = getEffectiveObservers(); + return !effective_observers || effective_observers->count(player_name) > 0; +} diff --git a/src/server/serveractiveobject.h b/src/server/serveractiveobject.h index 2d09e34c1..486b3b230 100644 --- a/src/server/serveractiveobject.h +++ b/src/server/serveractiveobject.h @@ -21,6 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include +#include #include "irrlichttypes_bloated.h" #include "activeobject.h" #include "itemgroup.h" @@ -171,8 +172,8 @@ public: { BoneOverride props; return props; } virtual const BoneOverrideMap &getBoneOverrides() const { static BoneOverrideMap rv; return rv; } - virtual const std::unordered_set &getAttachmentChildIds() const - { static std::unordered_set rv; return rv; } + virtual const std::unordered_set &getAttachmentChildIds() const + { static std::unordered_set rv; return rv; } virtual ServerActiveObject *getParent() const { return nullptr; } virtual ObjectProperties *accessObjectProperties() { return NULL; } @@ -236,13 +237,28 @@ public: */ v3s16 m_static_block = v3s16(1337,1337,1337); + // Names of players to whom the object is to be sent, not considering parents. + using Observers = std::optional>; + Observers m_observers; + + /// Invalidate final observer cache. This needs to be done whenever + /// the observers of this object or any of its ancestors may have changed. + void invalidateEffectiveObservers(); + /// Cache `m_effective_observers` with the names of all observers, + /// also indirect observers (object attachment chain). + const Observers &getEffectiveObservers(); + /// Force a recalculation of final observers (including all parents). + const Observers &recalculateEffectiveObservers(); + /// Whether the object is sent to `player_name` + bool isEffectivelyObservedBy(const std::string &player_name); + protected: + // Cached intersection of m_observers of this object and all its parents. + std::optional m_effective_observers; + virtual void onMarkedForDeactivation() {} virtual void onMarkedForRemoval() {} - virtual void onAttach(int parent_id) {} - virtual void onDetach(int parent_id) {} - ServerEnvironment *m_env; v3f m_base_position; std::unordered_set m_attached_particle_spawners; diff --git a/src/server/serverlist.cpp b/src/server/serverlist.cpp index e702ba73d..0586a1979 100644 --- a/src/server/serverlist.cpp +++ b/src/server/serverlist.cpp @@ -65,9 +65,10 @@ void sendAnnounce(AnnounceAction action, server["game_time"] = game_time; server["clients"] = (int) clients_names.size(); server["clients_max"] = g_settings->getU16("max_users"); - server["clients_list"] = Json::Value(Json::arrayValue); - for (const std::string &clients_name : clients_names) { - server["clients_list"].append(clients_name); + if (g_settings->getBool("server_announce_send_players")) { + server["clients_list"] = Json::Value(Json::arrayValue); + for (const std::string &clients_name : clients_names) + server["clients_list"].append(clients_name); } if (!gameid.empty()) server["gameid"] = gameid; diff --git a/src/server/unit_sao.cpp b/src/server/unit_sao.cpp index 70594589b..a4f547146 100644 --- a/src/server/unit_sao.cpp +++ b/src/server/unit_sao.cpp @@ -55,10 +55,7 @@ const ItemGroupList &UnitSAO::getArmorGroups() const void UnitSAO::setAnimation( v2f frame_range, float frame_speed, float frame_blend, bool frame_loop) { - if (std::tie(m_animation_range, m_animation_speed, m_animation_blend, - m_animation_loop) == - std::tie(frame_range, frame_speed, frame_blend, frame_loop)) - return; // no change + // Note: Always resend (even if parameters are unchanged) to restart animations. m_animation_range = frame_range; m_animation_speed = frame_speed; m_animation_blend = frame_blend; @@ -130,50 +127,92 @@ void UnitSAO::sendOutdatedData() } } -void UnitSAO::setAttachment(int parent_id, const std::string &bone, v3f position, +void UnitSAO::setAttachment(const object_t new_parent, const std::string &bone, v3f position, v3f rotation, bool force_visible) { - auto *obj = parent_id ? m_env->getActiveObject(parent_id) : nullptr; - if (obj) { - // Do checks to avoid circular references - // The chain of wanted parent must not refer or contain "this" - for (obj = obj->getParent(); obj; obj = obj->getParent()) { - if (obj == this) { - warningstream << "Mod bug: Attempted to attach object " << m_id << " to parent " - << parent_id << " but former is an (in)direct parent of latter." << std::endl; - return; + const auto call_count = ++m_attachment_call_counter; + + const auto check_nesting = [&] (const char *descr) -> bool { + // The counter is never decremented, so if it differs that means + // a nested call to setAttachment() has happened. + if (m_attachment_call_counter == call_count) + return false; + verbosestream << "UnitSAO::setAttachment() id=" << m_id << + " nested call detected (" << descr << ")." << std::endl; + return true; + }; + + // Do checks to avoid circular references + { + auto *obj = new_parent ? m_env->getActiveObject(new_parent) : nullptr; + if (obj == this) { + assert(false); + return; + } + bool problem = false; + if (obj) { + // The chain of wanted parent must not refer or contain "this" + for (obj = obj->getParent(); obj; obj = obj->getParent()) { + if (obj == this) { + problem = true; + break; + } } } + if (problem) { + warningstream << "Mod bug: Attempted to attach object " << m_id << " to parent " + << new_parent << " but former is an (in)direct parent of latter." << std::endl; + return; + } } - // Attachments need to be handled on both the server and client. - // If we just attach on the server, we can only copy the position of the parent. - // Attachments are still sent to clients at an interval so players might see them - // lagging, plus we can't read and attach to skeletal bones. If we just attach on - // the client, the server still sees the child at its original location. This - // breaks some things so we also give the server the most accurate representation - // even if players only see the client changes. + // Detach first + // Note: make sure to apply data changes before running callbacks. + const auto old_parent = m_attachment_parent_id; + m_attachment_parent_id = 0; + m_attachment_sent = false; - int old_parent = m_attachment_parent_id; - m_attachment_parent_id = parent_id; + if (old_parent && old_parent != new_parent) { + auto *parent = m_env->getActiveObject(old_parent); + if (parent) { + onDetach(parent); + } else { + warningstream << "UnitSAO::setAttachment() id=" << m_id << + " is attached to nonexistent parent. This is a bug." << std::endl; + // we can pretend it never happened + } + } - // The detach callbacks might call to setAttachment() again. - // Ensure the attachment params are applied after this callback is run. - if (parent_id != old_parent) - onDetach(old_parent); + if (check_nesting("onDetach")) { + // Don't touch anything after the other call has completed. + return; + } - m_attachment_parent_id = parent_id; + if (isGone()) + return; + + // Now attach to new parent + m_attachment_parent_id = new_parent; m_attachment_bone = bone; m_attachment_position = position; m_attachment_rotation = rotation; m_force_visible = force_visible; - m_attachment_sent = false; - if (parent_id != old_parent) - onAttach(parent_id); + if (new_parent && old_parent != new_parent) { + auto *parent = m_env->getActiveObject(new_parent); + if (parent) { + onAttach(parent); + } else { + warningstream << "UnitSAO::setAttachment() id=" << m_id << + " tried to attach to nonexistent parent. This is a bug." << std::endl; + m_attachment_parent_id = 0; // detach + } + } + + check_nesting("onAttach"); } -void UnitSAO::getAttachment(int *parent_id, std::string *bone, v3f *position, +void UnitSAO::getAttachment(object_t *parent_id, std::string *bone, v3f *position, v3f *rotation, bool *force_visible) const { *parent_id = m_attachment_parent_id; @@ -183,79 +222,70 @@ void UnitSAO::getAttachment(int *parent_id, std::string *bone, v3f *position, *force_visible = m_force_visible; } +void UnitSAO::clearAnyAttachments() +{ + // This is called before this SAO is marked for removal/deletion and unlinks + // any parent or child relationships. + // This is done at this point and not in ~UnitSAO() so attachments to + // "phantom objects" don't stay around while we're waiting to be actually deleted. + // (which can take several server steps) + clearParentAttachment(); + clearChildAttachments(); +} + void UnitSAO::clearChildAttachments() { // Cannot use for-loop here: setAttachment() modifies 'm_attachment_child_ids'! while (!m_attachment_child_ids.empty()) { - int child_id = *m_attachment_child_ids.begin(); + const auto child_id = *m_attachment_child_ids.begin(); - // Child can be NULL if it was deleted earlier - if (ServerActiveObject *child = m_env->getActiveObject(child_id)) - child->setAttachment(0, "", v3f(0, 0, 0), v3f(0, 0, 0), false); - - removeAttachmentChild(child_id); + if (auto *child = m_env->getActiveObject(child_id)) { + child->clearParentAttachment(); + } else { + // should not happen but we need to handle it to prevent an infinite loop + removeAttachmentChild(child_id); + } } } -void UnitSAO::clearParentAttachment() -{ - ServerActiveObject *parent = nullptr; - if (m_attachment_parent_id) { - parent = m_env->getActiveObject(m_attachment_parent_id); - setAttachment(0, "", m_attachment_position, m_attachment_rotation, false); - } else { - setAttachment(0, "", v3f(0, 0, 0), v3f(0, 0, 0), false); - } - // Do it - if (parent) - parent->removeAttachmentChild(m_id); -} - -void UnitSAO::addAttachmentChild(int child_id) +void UnitSAO::addAttachmentChild(object_t child_id) { m_attachment_child_ids.insert(child_id); } -void UnitSAO::removeAttachmentChild(int child_id) +void UnitSAO::removeAttachmentChild(object_t child_id) { m_attachment_child_ids.erase(child_id); } -const std::unordered_set &UnitSAO::getAttachmentChildIds() const +void UnitSAO::onAttach(ServerActiveObject *parent) { - return m_attachment_child_ids; -} + assert(parent); -void UnitSAO::onAttach(int parent_id) -{ - if (!parent_id) - return; + parent->addAttachmentChild(m_id); - ServerActiveObject *parent = m_env->getActiveObject(parent_id); - - if (!parent || parent->isGone()) - return; // Do not try to notify soon gone parent - - if (parent->getType() == ACTIVEOBJECT_TYPE_LUAENTITY) { - // Call parent's on_attach field - m_env->getScriptIface()->luaentity_on_attach_child(parent_id, this); + // Do not try to notify soon gone parent + if (!parent->isGone()) { + if (parent->getType() == ACTIVEOBJECT_TYPE_LUAENTITY) + m_env->getScriptIface()->luaentity_on_attach_child(parent->getId(), this); } } -void UnitSAO::onDetach(int parent_id) +void UnitSAO::onDetach(ServerActiveObject *parent) { - if (!parent_id) - return; + assert(parent); + + parent->removeAttachmentChild(m_id); - ServerActiveObject *parent = m_env->getActiveObject(parent_id); if (getType() == ACTIVEOBJECT_TYPE_LUAENTITY) m_env->getScriptIface()->luaentity_on_detach(m_id, parent); - if (!parent || parent->isGone()) - return; // Do not try to notify soon gone parent + // callback could affect the parent + if (parent->isGone()) + return; if (parent->getType() == ACTIVEOBJECT_TYPE_LUAENTITY) - m_env->getScriptIface()->luaentity_on_detach_child(parent_id, this); + m_env->getScriptIface()->luaentity_on_detach_child(parent->getId(), this); } ObjectProperties *UnitSAO::accessObjectProperties() diff --git a/src/server/unit_sao.h b/src/server/unit_sao.h index cbd845708..32b5dd30e 100644 --- a/src/server/unit_sao.h +++ b/src/server/unit_sao.h @@ -31,7 +31,7 @@ public: UnitSAO(ServerEnvironment *env, v3f pos); virtual ~UnitSAO() = default; - u16 getHP() const { return m_hp; } + u16 getHP() const override { return m_hp; } // Use a function, if isDead can be defined by other conditions bool isDead() const { return m_hp == 0; } @@ -59,38 +59,39 @@ public: { return itemgroup_get(getArmorGroups(), "immortal"); } - void setArmorGroups(const ItemGroupList &armor_groups); - const ItemGroupList &getArmorGroups() const; + void setArmorGroups(const ItemGroupList &armor_groups) override; + const ItemGroupList &getArmorGroups() const override; // Animation void setAnimation(v2f frame_range, float frame_speed, float frame_blend, - bool frame_loop); + bool frame_loop) override; void getAnimation(v2f *frame_range, float *frame_speed, float *frame_blend, - bool *frame_loop); - void setAnimationSpeed(float frame_speed); + bool *frame_loop) override; + void setAnimationSpeed(float frame_speed) override; // Bone position - void setBoneOverride(const std::string &bone, const BoneOverride &props); - BoneOverride getBoneOverride(const std::string &bone); + void setBoneOverride(const std::string &bone, const BoneOverride &props) override; + BoneOverride getBoneOverride(const std::string &bone) override; const std::unordered_map - &getBoneOverrides() const { return m_bone_override; }; + &getBoneOverrides() const override { return m_bone_override; }; // Attachments - ServerActiveObject *getParent() const; - inline bool isAttached() const { return getParent(); } - void setAttachment(int parent_id, const std::string &bone, v3f position, - v3f rotation, bool force_visible); - void getAttachment(int *parent_id, std::string *bone, v3f *position, - v3f *rotation, bool *force_visible) const; - void clearChildAttachments(); - void clearParentAttachment(); - void addAttachmentChild(int child_id); - void removeAttachmentChild(int child_id); - const std::unordered_set &getAttachmentChildIds() const; + ServerActiveObject *getParent() const override; + inline bool isAttached() const { return m_attachment_parent_id != 0; } + void setAttachment(object_t parent_id, const std::string &bone, v3f position, + v3f rotation, bool force_visible) override; + void getAttachment(object_t *parent_id, std::string *bone, v3f *position, + v3f *rotation, bool *force_visible) const override; + void clearChildAttachments() override; + void addAttachmentChild(object_t child_id) override; + void removeAttachmentChild(object_t child_id) override; + const std::unordered_set &getAttachmentChildIds() const override { + return m_attachment_child_ids; + } // Object properties - ObjectProperties *accessObjectProperties(); - void notifyObjectPropertiesModified(); + ObjectProperties *accessObjectProperties() override; + void notifyObjectPropertiesModified() override; void sendOutdatedData(); // Update packets @@ -121,14 +122,28 @@ protected: // Stores position and rotation for each bone name std::unordered_map m_bone_override; - int m_attachment_parent_id = 0; + object_t m_attachment_parent_id = 0; + + void clearAnyAttachments(); + virtual void onMarkedForDeactivation() override { + ServerActiveObject::onMarkedForDeactivation(); + clearAnyAttachments(); + } + virtual void onMarkedForRemoval() override { + ServerActiveObject::onMarkedForRemoval(); + clearAnyAttachments(); + } private: - void onAttach(int parent_id); - void onDetach(int parent_id); + void onAttach(ServerActiveObject *parent); + void onDetach(ServerActiveObject *parent); std::string generatePunchCommand(u16 result_hp) const; + // Used to detect nested calls to setAttachments(), which can happen due to + // Lua callbacks + u8 m_attachment_call_counter = 0; + // Armor groups bool m_armor_groups_sent = false; @@ -144,7 +159,7 @@ private: bool m_bone_override_sent = false; // Attachments - std::unordered_set m_attachment_child_ids; + std::unordered_set m_attachment_child_ids; std::string m_attachment_bone = ""; v3f m_attachment_position; v3f m_attachment_rotation; diff --git a/src/serverenvironment.cpp b/src/serverenvironment.cpp index 87bb39d4c..ac627dd50 100644 --- a/src/serverenvironment.cpp +++ b/src/serverenvironment.cpp @@ -77,11 +77,11 @@ ABMWithState::ABMWithState(ActiveBlockModifier *abm_): LBMManager */ -void LBMContentMapping::deleteContents() +LBMContentMapping::~LBMContentMapping() { - for (auto &it : lbm_list) { + map.clear(); + for (auto &it : lbm_list) delete it; - } } void LBMContentMapping::addLBM(LoadingBlockModifierDef *lbm_def, IGameDef *gamedef) @@ -90,29 +90,32 @@ void LBMContentMapping::addLBM(LoadingBlockModifierDef *lbm_def, IGameDef *gamed // Unknown names get added to the global NameIdMapping. const NodeDefManager *nodedef = gamedef->ndef(); + FATAL_ERROR_IF(CONTAINS(lbm_list, lbm_def), "Same LBM registered twice"); lbm_list.push_back(lbm_def); - for (const std::string &nodeTrigger: lbm_def->trigger_contents) { - std::vector c_ids; - bool found = nodedef->getIds(nodeTrigger, c_ids); + std::vector c_ids; + + for (const auto &node : lbm_def->trigger_contents) { + bool found = nodedef->getIds(node, c_ids); if (!found) { - content_t c_id = gamedef->allocateUnknownNodeId(nodeTrigger); + content_t c_id = gamedef->allocateUnknownNodeId(node); if (c_id == CONTENT_IGNORE) { // Seems it can't be allocated. - warningstream << "Could not internalize node name \"" << nodeTrigger + warningstream << "Could not internalize node name \"" << node << "\" while loading LBM \"" << lbm_def->name << "\"." << std::endl; continue; } c_ids.push_back(c_id); } - - for (content_t c_id : c_ids) { - map[c_id].push_back(lbm_def); - } } + + SORT_AND_UNIQUE(c_ids); + + for (content_t c_id : c_ids) + map[c_id].push_back(lbm_def); } -const std::vector * +const LBMContentMapping::lbm_vector * LBMContentMapping::lookup(content_t c) const { lbm_map::const_iterator it = map.find(c); @@ -130,9 +133,7 @@ LBMManager::~LBMManager() delete m_lbm_def.second; } - for (auto &it : m_lbm_lookup) { - (it.second).deleteContents(); - } + m_lbm_lookup.clear(); } void LBMManager::addLBMDef(LoadingBlockModifierDef *lbm_def) @@ -236,7 +237,7 @@ std::string LBMManager::createIntroductionTimesString() std::ostringstream oss; for (const auto &it : m_lbm_lookup) { u32 time = it.first; - const std::vector &lbm_list = it.second.lbm_list; + auto &lbm_list = it.second.getList(); for (const auto &lbm_def : lbm_list) { // Don't add if the LBM runs at every load, // then introducement time is hardcoded @@ -255,41 +256,74 @@ void LBMManager::applyLBMs(ServerEnvironment *env, MapBlock *block, // Precondition, we need m_lbm_lookup to be initialized FATAL_ERROR_IF(!m_query_mode, "attempted to query on non fully set up LBMManager"); - v3s16 pos_of_block = block->getPosRelative(); - v3s16 pos; - MapNode n; - content_t c; - auto it = getLBMsIntroducedAfter(stamp); - for (; it != m_lbm_lookup.end(); ++it) { - // Cache previous version to speedup lookup which has a very high performance - // penalty on each call + + // Collect a list of all LBMs and associated positions + struct LBMToRun { + std::unordered_set p; // node positions + std::unordered_set l; + }; + std::unordered_map to_run; + + // Note: the iteration count of this outer loop is typically very low, so it's ok. + for (auto it = getLBMsIntroducedAfter(stamp); it != m_lbm_lookup.end(); ++it) { + v3s16 pos; + content_t c; + + // Cache previous lookups since it has a high performance penalty. content_t previous_c = CONTENT_IGNORE; - const std::vector *lbm_list = nullptr; + const LBMContentMapping::lbm_vector *lbm_list = nullptr; + LBMToRun *batch = nullptr; for (pos.Z = 0; pos.Z < MAP_BLOCKSIZE; pos.Z++) for (pos.Y = 0; pos.Y < MAP_BLOCKSIZE; pos.Y++) for (pos.X = 0; pos.X < MAP_BLOCKSIZE; pos.X++) { - n = block->getNodeNoCheck(pos); - c = n.getContent(); + c = block->getNodeNoCheck(pos).getContent(); - // If content_t are not matching perform an LBM lookup + bool c_changed = false; if (previous_c != c) { + c_changed = true; lbm_list = it->second.lookup(c); + batch = &to_run[c]; previous_c = c; } if (!lbm_list) continue; - for (auto lbmdef : *lbm_list) { - lbmdef->trigger(env, pos + pos_of_block, n, dtime_s); - if (block->isOrphan()) - return; - n = block->getNodeNoCheck(pos); - if (n.getContent() != c) - break; // The node was changed and the LBMs no longer apply + batch->p.insert(pos); + if (c_changed) { + batch->l.insert(lbm_list->begin(), lbm_list->end()); + } else { + // we were here before so the list must be filled + assert(!batch->l.empty()); } } } + + // Actually run them + bool first = true; + for (auto &[c, batch] : to_run) { + for (auto &lbm_def : batch.l) { + if (!first) { + // The fun part: since any LBM call can change the nodes inside of he + // block, we have to recheck the positions to see if the wanted node + // is still there. + // Note that we don't rescan the whole block, we don't want to include new changes. + for (auto it2 = batch.p.begin(); it2 != batch.p.end(); ) { + if (block->getNodeNoCheck(*it2).getContent() != c) + it2 = batch.p.erase(it2); + else + ++it2; + } + } + first = false; + + if (batch.p.empty()) + break; + lbm_def->trigger(env, block, batch.p, dtime_s); + if (block->isOrphan()) + return; + } + } } /* @@ -575,10 +609,10 @@ RemotePlayer *ServerEnvironment::getPlayer(const session_t peer_id) return NULL; } -RemotePlayer *ServerEnvironment::getPlayer(const char* name, bool match_invalid_peer) +RemotePlayer *ServerEnvironment::getPlayer(const std::string &name, bool match_invalid_peer) { for (RemotePlayer *player : m_players) { - if (strcmp(player->getName(), name) != 0) + if (player->getName() != name) continue; if (match_invalid_peer || player->getPeerId() != PEER_ID_INEXISTENT) @@ -792,11 +826,9 @@ void ServerEnvironment::loadDefaultMeta() struct ActiveABM { ActiveBlockModifier *abm; - int chance; std::vector required_neighbors; - bool check_required_neighbors; // false if required_neighbors is known to be empty - s16 min_y; - s16 max_y; + int chance; + s16 min_y, max_y; }; #define CONTENT_TYPE_CACHE_MAX 64 @@ -812,16 +844,16 @@ public: bool use_timers): m_env(env) { - if(dtime_s < 0.001) + if (dtime_s < 0.001f) return; const NodeDefManager *ndef = env->getGameDef()->ndef(); for (ABMWithState &abmws : abms) { ActiveBlockModifier *abm = abmws.abm; float trigger_interval = abm->getTriggerInterval(); - if(trigger_interval < 0.001) - trigger_interval = 0.001; + if (trigger_interval < 0.001f) + trigger_interval = 0.001f; float actual_interval = dtime_s; - if(use_timers){ + if (use_timers) { abmws.timer += dtime_s; if(abmws.timer < trigger_interval) continue; @@ -831,6 +863,7 @@ public: float chance = abm->getTriggerChance(); if (chance == 0) chance = 1; + ActiveABM aabm; aabm.abm = abm; if (abm->getSimpleCatchUp()) { @@ -848,25 +881,21 @@ public: aabm.max_y = abm->getMaxY(); // Trigger neighbors - const std::vector &required_neighbors_s = - abm->getRequiredNeighbors(); - for (const std::string &required_neighbor_s : required_neighbors_s) { - ndef->getIds(required_neighbor_s, aabm.required_neighbors); - } - aabm.check_required_neighbors = !required_neighbors_s.empty(); + for (const auto &s : abm->getRequiredNeighbors()) + ndef->getIds(s, aabm.required_neighbors); + SORT_AND_UNIQUE(aabm.required_neighbors); // Trigger contents - const std::vector &contents_s = abm->getTriggerContents(); - for (const std::string &content_s : contents_s) { - std::vector ids; - ndef->getIds(content_s, ids); - for (content_t c : ids) { - if (c >= m_aabms.size()) - m_aabms.resize(c + 256, NULL); - if (!m_aabms[c]) - m_aabms[c] = new std::vector; - m_aabms[c]->push_back(aabm); - } + std::vector ids; + for (const auto &s : abm->getTriggerContents()) + ndef->getIds(s, ids); + SORT_AND_UNIQUE(ids); + for (content_t c : ids) { + if (c >= m_aabms.size()) + m_aabms.resize(c + 256, nullptr); + if (!m_aabms[c]) + m_aabms[c] = new std::vector; + m_aabms[c]->push_back(aabm); } } } @@ -967,7 +996,7 @@ public: continue; // Check neighbors - if (aabm.check_required_neighbors) { + if (!aabm.required_neighbors.empty()) { v3s16 p1; for(p1.X = p0.X-1; p1.X <= p0.X+1; p1.X++) for(p1.Y = p0.Y-1; p1.Y <= p0.Y+1; p1.Y++) @@ -1711,6 +1740,11 @@ u16 ServerEnvironment::addActiveObject(std::unique_ptr objec return id; } +void ServerEnvironment::invalidateActiveObjectObserverCaches() +{ + m_ao_manager.invalidateActiveObjectObserverCaches(); +} + /* Finds out what new objects have been added to inside a radius around a position @@ -1726,8 +1760,13 @@ void ServerEnvironment::getAddedActiveObjects(PlayerSAO *playersao, s16 radius, if (player_radius_f < 0.0f) player_radius_f = 0.0f; - m_ao_manager.getAddedActiveObjectsAroundPos(playersao->getBasePosition(), radius_f, - player_radius_f, current_objects, added_objects); + if (!playersao->isEffectivelyObservedBy(playersao->getPlayer()->getName())) + throw ModError("Player does not observe itself"); + + m_ao_manager.getAddedActiveObjectsAroundPos( + playersao->getBasePosition(), playersao->getPlayer()->getName(), + radius_f, player_radius_f, + current_objects, added_objects); } /* @@ -1744,13 +1783,20 @@ void ServerEnvironment::getRemovedActiveObjects(PlayerSAO *playersao, s16 radius if (player_radius_f < 0) player_radius_f = 0; + + const std::string &player_name = playersao->getPlayer()->getName(); + + if (!playersao->isEffectivelyObservedBy(player_name)) + throw ModError("Player does not observe itself"); + /* Go through current_objects; object is removed if: - object is not found in m_active_objects (this is actually an error condition; objects should be removed only after all clients have been informed about removal), or - object is to be removed or deactivated, or - - object is too far away + - object is too far away, or + - object is marked as not observable by the client */ for (u16 id : current_objects) { ServerActiveObject *object = getActiveObject(id); @@ -1768,14 +1814,12 @@ void ServerEnvironment::getRemovedActiveObjects(PlayerSAO *playersao, s16 radius } f32 distance_f = object->getBasePosition().getDistanceFrom(playersao->getBasePosition()); - if (object->getType() == ACTIVEOBJECT_TYPE_PLAYER) { - if (distance_f <= player_radius_f || player_radius_f == 0) - continue; - } else if (distance_f <= radius_f) - continue; + bool in_range = object->getType() == ACTIVEOBJECT_TYPE_PLAYER + ? distance_f <= player_radius_f || player_radius_f == 0 + : distance_f <= radius_f; - // Object is no longer visible - removed_objects.emplace_back(false, id); + if (!in_range || !object->isEffectivelyObservedBy(player_name)) + removed_objects.emplace_back(false, id); // out of range or not observed anymore } } diff --git a/src/serverenvironment.h b/src/serverenvironment.h index d5d45d0f4..d20cc0b3f 100644 --- a/src/serverenvironment.h +++ b/src/serverenvironment.h @@ -90,29 +90,40 @@ struct ABMWithState struct LoadingBlockModifierDef { // Set of contents to trigger on - std::set trigger_contents; + std::vector trigger_contents; std::string name; bool run_at_every_load = false; virtual ~LoadingBlockModifierDef() = default; - virtual void trigger(ServerEnvironment *env, v3s16 p, - MapNode n, float dtime_s) {}; + /// @brief Called to invoke LBM + /// @param env environment + /// @param block the block in question + /// @param positions set of node positions (block-relative!) + /// @param dtime_s game time since last deactivation + virtual void trigger(ServerEnvironment *env, MapBlock *block, + const std::unordered_set &positions, float dtime_s) {}; }; -struct LBMContentMapping +class LBMContentMapping { - typedef std::unordered_map> lbm_map; - lbm_map map; +public: + typedef std::vector lbm_vector; + typedef std::unordered_map lbm_map; - std::vector lbm_list; - - // Needs to be separate method (not inside destructor), - // because the LBMContentMapping may be copied and destructed - // many times during operation in the lbm_lookup_map. - void deleteContents(); + LBMContentMapping() = default; void addLBM(LoadingBlockModifierDef *lbm_def, IGameDef *gamedef); const lbm_map::mapped_type *lookup(content_t c) const; + const lbm_vector &getList() const { return lbm_list; } + + // This struct owns the LBM pointers. + ~LBMContentMapping(); + DISABLE_CLASS_COPY(LBMContentMapping); + ALLOW_CLASS_MOVE(LBMContentMapping); + +private: + lbm_vector lbm_list; + lbm_map map; }; class LBMManager @@ -277,6 +288,8 @@ public: */ u16 addActiveObject(std::unique_ptr object); + void invalidateActiveObjectObserverCaches(); + /* Find out what new objects have been added to inside a radius around a position @@ -379,7 +392,7 @@ public: bool static_exists, v3s16 static_block=v3s16(0,0,0)); RemotePlayer *getPlayer(const session_t peer_id); - RemotePlayer *getPlayer(const char* name, bool match_invalid_peer = false); + RemotePlayer *getPlayer(const std::string &name, bool match_invalid_peer = false); const std::vector getPlayers() const { return m_players; } u32 getPlayerCount() const { return m_players.size(); } diff --git a/src/servermap.cpp b/src/servermap.cpp index eeabd74f9..0248497c1 100644 --- a/src/servermap.cpp +++ b/src/servermap.cpp @@ -52,7 +52,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #endif /* - ServerMap + ServerMap */ ServerMap::ServerMap(const std::string &savedir, IGameDef *gamedef, diff --git a/src/settings_translation_file.cpp b/src/settings_translation_file.cpp index 409cd7061..6347bc257 100644 --- a/src/settings_translation_file.cpp +++ b/src/settings_translation_file.cpp @@ -19,6 +19,8 @@ fake_function() { gettext("If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\nenabled."); gettext("Place repetition interval"); gettext("The time in seconds it takes between repeated node placements when holding\nthe place button."); + gettext("Minimum dig repetition interval"); + gettext("The minimum time in seconds it takes between digging nodes when holding\nthe dig button."); gettext("Automatic jumping"); gettext("Automatically jump up single-node obstacles."); gettext("Safe digging and placing"); @@ -33,16 +35,22 @@ fake_function() { gettext("Hotbar: Invert mouse wheel direction"); gettext("Invert mouse wheel (scroll) direction for item selection in hotbar."); gettext("Touchscreen"); - gettext("Touchscreen threshold"); - gettext("The length in pixels it takes for touchscreen interaction to start."); + gettext("Enable touchscreen"); + gettext("Enables touchscreen mode, allowing you to play the game with a touchscreen."); gettext("Touchscreen sensitivity"); gettext("Touchscreen sensitivity multiplier."); + gettext("Movement threshold"); + gettext("The length in pixels after which a touch interaction is considered movement."); + gettext("Threshold for long taps"); + gettext("The delay in milliseconds after which a touch interaction is considered a long tap."); gettext("Use crosshair for touch screen"); gettext("Use crosshair to select object instead of whole screen.\nIf enabled, a crosshair will be shown and will be used for selecting object."); gettext("Fixed virtual joystick"); gettext("Fixes the position of virtual joystick.\nIf disabled, virtual joystick will center to first-touch's position."); 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("Graphics and Audio"); gettext("Graphics"); gettext("Screen"); @@ -70,8 +78,8 @@ fake_function() { 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("Opaque liquids"); - gettext("Makes all liquids opaque"); + 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"); @@ -143,7 +151,7 @@ fake_function() { gettext("Anisotropic filtering"); gettext("Use anisotropic filtering when looking at textures from an angle."); gettext("Antialiasing method"); - gettext("Select the antialiasing method to apply.\n\n* None - No antialiasing (default)\n\n* FSAA - Hardware-provided full-screen antialiasing (incompatible with shaders)\nA.K.A multi-sample antialiasing (MSAA)\nSmoothens out block edges but does not affect the insides of textures.\nA restart is required to change this option.\n\n* FXAA - Fast approximate antialiasing (requires shaders)\nApplies a post-processing filter to detect and smoothen high-contrast edges.\nProvides balance between speed and image quality.\n\n* SSAA - Super-sampling antialiasing (requires shaders)\nRenders higher-resolution image of the scene, then scales down to reduce\nthe aliasing effects. This is the slowest and the most accurate method."); + gettext("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)\nA.K.A multi-sample antialiasing (MSAA)\nSmoothens out block edges but does not affect the insides of textures.\nA restart is required to change this option.\n\n* FXAA - Fast approximate antialiasing (requires shaders)\nApplies a post-processing filter to detect and smoothen high-contrast edges.\nProvides balance between speed and image quality.\n\n* SSAA - Super-sampling antialiasing (requires shaders)\nRenders higher-resolution image of the scene, then scales down to reduce\nthe aliasing effects. This is the slowest and the most accurate method."); gettext("Anti-aliasing scale"); gettext("Defines the size of the sampling grid for FSAA and SSAA antialiasing methods.\nValue of 2 means taking 2x2 = 4 samples."); gettext("Occlusion Culling"); @@ -153,7 +161,7 @@ fake_function() { 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.\nThis only works with the OpenGL video backend."); + gettext("Shaders allow advanced visual effects and may increase performance on some video\ncards."); gettext("Waving Nodes"); gettext("Waving leaves"); gettext("Set to true to enable waving leaves."); @@ -191,12 +199,16 @@ fake_function() { gettext("Sky Body Orbit Tilt"); gettext("Set the default tilt of Sun/Moon orbit in degrees.\nGames may change orbit tilt via API.\nValue of 0 means no tilt / vertical orbit."); gettext("Post Processing"); + gettext("Enable Post Processing"); + gettext("Enables the post processing pipeline."); gettext("Filmic tone mapping"); gettext("Enables Hable's 'Uncharted 2' filmic tone mapping.\nSimulates the tone curve of photographic film and how this approximates the\nappearance of high dynamic range images. Mid-range contrast is slightly\nenhanced, highlights and shadows are gradually compressed."); gettext("Enable Automatic Exposure"); gettext("Enable automatic exposure correction\nWhen enabled, the post-processing engine will\nautomatically adjust to the brightness of the scene,\nsimulating the behavior of human eye."); gettext("Exposure compensation"); 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."); @@ -208,14 +220,18 @@ fake_function() { 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("Audio"); gettext("Volume"); gettext("Volume of all sounds.\nRequires the sound system to be enabled."); + gettext("Volume when unfocused"); + gettext("Volume multiplier when the window is unfocused."); gettext("Mute sound"); gettext("Whether to mute sounds. You can unmute sounds at any time, unless the\nsound system is disabled (enable_sound=false).\nIn-game, you can toggle the mute state with the mute key or by using the\npause menu."); gettext("User Interfaces"); gettext("Language"); - gettext("Set the language. Leave empty to use the system language.\nA restart is required after changing this."); + gettext("Set the language. By default, the system language is used.\nA restart is required after changing this."); gettext("GUI"); 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."); @@ -260,6 +276,8 @@ fake_function() { gettext("Content Repository"); 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("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("ContentDB Max Concurrent Downloads"); @@ -273,7 +291,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"); + 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("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."); @@ -303,6 +321,8 @@ fake_function() { gettext("The network interface that the server listens on."); 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("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"); @@ -436,7 +456,7 @@ fake_function() { gettext("3D noise that determines number of dungeons per mapchunk."); gettext("Mapgen V6"); gettext("Mapgen V6 specific flags"); - gettext("Map generation attributes specific to Mapgen v6.\nThe 'snowbiomes' flag enables the new 5 biome system.\nWhen the 'snowbiomes' flag is enabled jungles are automatically enabled and\nthe 'jungles' flag is ignored."); + gettext("Map generation attributes specific to Mapgen v6.\nThe 'snowbiomes' flag enables the new 5 biome system.\nWhen the 'snowbiomes' flag is enabled jungles are automatically enabled and\nthe 'jungles' flag is ignored.\nThe 'temples' flag disables generation of desert temples. Normal dungeons will appear instead."); gettext("Desert noise threshold"); gettext("Deserts occur when np_biome exceeds this value.\nWhen the 'snowbiomes' flag is enabled, this is ignored."); gettext("Beach noise threshold"); @@ -788,6 +808,8 @@ fake_function() { gettext("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)."); gettext("Random input"); gettext("Enable random user input (only used for testing)."); + gettext("Random mod load order"); + gettext("Enable random mod loading (mainly used for testing)."); gettext("Mod channels"); gettext("Enable mod channels support."); gettext("Mod Profiler"); @@ -823,11 +845,9 @@ fake_function() { 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 OpenGL and OGLES2 (experimental)."); + 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("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("VBO"); - gettext("Enable vertex buffer objects.\nThis should greatly improve graphics performance."); 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"); @@ -838,8 +858,6 @@ fake_function() { 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("Mapblock mesh generator's MapBlock cache size in MB"); - gettext("Size of the MapBlock cache of the mesh generator. Increasing this will\nincrease the cache hit %, reducing the data being copied from the main\nthread, thus reducing jitter."); gettext("Minimap scan height"); gettext("True = 256\nFalse = 128\nUsable to make minimap smoother on slower machines."); gettext("World-aligned textures mode"); @@ -850,6 +868,11 @@ fake_function() { gettext("When using bilinear/trilinear/anisotropic filters, low-resolution textures\ncan be blurred, so automatically upscale them with nearest-neighbor\ninterpolation to preserve crisp pixels. This sets the minimum texture size\nfor the upscaled textures; higher values look sharper, but require more\nmemory. Powers of 2 are recommended. This setting is ONLY applied if\nbilinear/trilinear/anisotropic filtering is enabled.\nThis is also used as the base node texture size for world-aligned\ntexture autoscaling."); gettext("Client Mesh Chunksize"); 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("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."); gettext("Font"); gettext("Font bold by default"); gettext("Font italic by default"); @@ -920,7 +943,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 and the interval at which objects are generally updated over\nnetwork, stated in seconds."); + 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("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"); @@ -956,9 +979,11 @@ fake_function() { gettext("Liquid update tick"); gettext("Liquid update interval in seconds."); gettext("Block send optimize distance"); - gettext("At this distance the server will aggressively optimize which blocks are sent to\nclients.\nSmall values potentially improve performance a lot, at the expense of visible\nrendering glitches (some blocks will not be rendered under water and in caves,\nas well as sometimes on land).\nSetting this to a value greater than max_block_send_distance disables this\noptimization.\nStated in mapblocks (16 nodes)."); + gettext("At this distance the server will aggressively optimize which blocks are sent to\nclients.\nSmall values potentially improve performance a lot, at the expense of visible\nrendering glitches (some blocks might not be rendered correctly in caves).\nSetting this to a value greater than max_block_send_distance disables this\noptimization.\nStated in MapBlocks (16 nodes)."); gettext("Server-side occlusion culling"); gettext("If enabled, the server will perform map block occlusion culling based on\non the eye position of the player. This can reduce the number of blocks\nsent to the client by 50-80%. Clients will no longer receive most\ninvisible blocks, so that the utility of noclip mode is reduced."); + gettext("Block cull optimize distance"); + gettext("At this distance the server will perform a simpler and cheaper occlusion check.\nSmaller values potentially improve performance, at the expense of temporarily visible\nrendering glitches (missing blocks).\nThis is especially useful for very large viewing range (upwards of 500).\nStated in MapBlocks (16 nodes)."); gettext("Mapgen"); gettext("Chunk size"); gettext("Size of mapchunks generated by mapgen, stated in mapblocks (16 nodes).\nWARNING: There is no benefit, and there are several dangers, in\nincreasing this value above 5.\nReducing this value increases cave and dungeon density.\nAltering this value is for special usage, leaving it unchanged is\nrecommended."); @@ -980,8 +1005,6 @@ fake_function() { gettext("cURL file download timeout"); gettext("Maximum time a file download (e.g. a mod download) may take, stated in milliseconds."); gettext("Miscellaneous"); - gettext("DPI"); - gettext("Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k screens."); gettext("Display Density Scaling Factor"); gettext("Adjust the detected display density, used for scaling UI elements."); gettext("Enable console window"); diff --git a/src/skyparams.h b/src/skyparams.h index a4d0fadac..52a15810b 100644 --- a/src/skyparams.h +++ b/src/skyparams.h @@ -46,7 +46,7 @@ struct SkyboxParams float body_orbit_tilt { INVALID_SKYBOX_TILT }; s16 fog_distance { -1 }; float fog_start { -1.0f }; - video::SColor fog_color; // override, only used if alpha > 0 + video::SColor fog_color { 0 }; // override, only used if alpha > 0 }; struct SunParams @@ -81,6 +81,7 @@ struct CloudParams float density; video::SColor color_bright; video::SColor color_ambient; + video::SColor color_shadow; float thickness; float height; v2f speed; @@ -160,6 +161,7 @@ public: clouds.density = 0.4f; clouds.color_bright = video::SColor(229, 240, 240, 255); clouds.color_ambient = video::SColor(255, 0, 0, 0); + clouds.color_shadow = video::SColor(255, 204, 204, 204); clouds.thickness = 16.0f; clouds.height = 120; clouds.speed = v2f(0.0f, -2.0f); diff --git a/src/terminal_chat_console.h b/src/terminal_chat_console.h index 825c76ef4..1bd226609 100644 --- a/src/terminal_chat_console.h +++ b/src/terminal_chat_console.h @@ -32,14 +32,14 @@ struct ChatInterface; class TermLogOutput : public ILogOutput { public: - void logRaw(LogLevel lev, const std::string &line) + void logRaw(LogLevel lev, std::string_view line) { - queue.push_back(std::make_pair(lev, line)); + queue.push_back(std::make_pair(lev, std::string(line))); } virtual void log(LogLevel lev, const std::string &combined, const std::string &time, const std::string &thread_name, - const std::string &payload_text) + std::string_view payload_text) { std::ostringstream os(std::ios_base::binary); os << time << ": [" << thread_name << "] " << payload_text; diff --git a/src/tool.cpp b/src/tool.cpp index 9df69eccd..0cb1724de 100644 --- a/src/tool.cpp +++ b/src/tool.cpp @@ -44,18 +44,25 @@ void ToolGroupCap::toJson(Json::Value &object) const void ToolGroupCap::fromJson(const Json::Value &json) { - if (json.isObject()) { - if (json["maxlevel"].isInt()) - maxlevel = json["maxlevel"].asInt(); - if (json["uses"].isInt()) - uses = json["uses"].asInt(); - const Json::Value ×_object = json["times"]; - if (times_object.isArray()) { - Json::ArrayIndex size = times_object.size(); - for (Json::ArrayIndex i = 0; i < size; ++i) - if (times_object[i].isDouble()) - times[i] = times_object[i].asFloat(); - } + if (!json.isObject()) + return; + + if (json["maxlevel"].isInt()) + maxlevel = json["maxlevel"].asInt(); + + if (json["uses"].isInt()) + uses = json["uses"].asInt(); + + const Json::Value ×_object = json["times"]; + + if (!times_object.isArray()) + return; + + Json::ArrayIndex size = times_object.size(); + + for (Json::ArrayIndex i = 0; i < size; ++i) { + if (times_object[i].isDouble()) + times[i] = times_object[i].asFloat(); } } @@ -65,9 +72,11 @@ void ToolCapabilities::serialize(std::ostream &os, u16 protocol_version) const writeU8(os, 5); else writeU8(os, 4); // proto == 37 + writeF32(os, full_punch_interval); writeS16(os, max_drop_level); writeU32(os, groupcaps.size()); + for (const auto &groupcap : groupcaps) { const std::string *name = &groupcap.first; const ToolGroupCap *cap = &groupcap.second; @@ -102,6 +111,7 @@ void ToolCapabilities::deSerialize(std::istream &is) max_drop_level = readS16(is); groupcaps.clear(); u32 groupcaps_size = readU32(is); + for (u32 i = 0; i < groupcaps_size; i++) { std::string name = deSerializeString16(is); ToolGroupCap cap; @@ -135,15 +145,19 @@ void ToolCapabilities::serializeJson(std::ostream &os) const root["punch_attack_uses"] = punch_attack_uses; Json::Value groupcaps_object; + for (const auto &groupcap : groupcaps) { groupcap.second.toJson(groupcaps_object[groupcap.first]); } + root["groupcaps"] = std::move(groupcaps_object); Json::Value damage_groups_object; + for (const auto &damagegroup : damageGroups) { damage_groups_object[damagegroup.first] = damagegroup.second; } + root["damage_groups"] = std::move(damage_groups_object); fastWriteJson(root, os); @@ -153,36 +167,44 @@ void ToolCapabilities::deserializeJson(std::istream &is) { Json::Value root; is >> root; - if (root.isObject()) { - if (root["full_punch_interval"].isDouble()) - full_punch_interval = root["full_punch_interval"].asFloat(); - if (root["max_drop_level"].isInt()) - max_drop_level = root["max_drop_level"].asInt(); - if (root["punch_attack_uses"].isInt()) - punch_attack_uses = root["punch_attack_uses"].asInt(); - Json::Value &groupcaps_object = root["groupcaps"]; - if (groupcaps_object.isObject()) { - Json::ValueIterator gciter; - for (gciter = groupcaps_object.begin(); - gciter != groupcaps_object.end(); ++gciter) { - ToolGroupCap groupcap; - groupcap.fromJson(*gciter); - groupcaps[gciter.key().asString()] = groupcap; - } - } + if (!root.isObject()) + return; - Json::Value &damage_groups_object = root["damage_groups"]; - if (damage_groups_object.isObject()) { - Json::ValueIterator dgiter; - for (dgiter = damage_groups_object.begin(); - dgiter != damage_groups_object.end(); ++dgiter) { - Json::Value &value = *dgiter; - if (value.isInt()) - damageGroups[dgiter.key().asString()] = - value.asInt(); - } - } + if (root["full_punch_interval"].isDouble()) + full_punch_interval = root["full_punch_interval"].asFloat(); + + if (root["max_drop_level"].isInt()) + max_drop_level = root["max_drop_level"].asInt(); + + if (root["punch_attack_uses"].isInt()) + punch_attack_uses = root["punch_attack_uses"].asInt(); + + deserializeJsonGroupcaps(root["groupcaps"]); + deserializeJsonDamageGroups(root["damage_groups"]); +} + +void ToolCapabilities::deserializeJsonGroupcaps(Json::Value &json) +{ + if (!json.isObject()) + return; + + for (Json::ValueIterator iter = json.begin(); iter != json.end(); ++iter) { + ToolGroupCap value; + value.fromJson(*iter); + groupcaps[iter.key().asString()] = value; + } +} + +void ToolCapabilities::deserializeJsonDamageGroups(Json::Value &json) +{ + if (!json.isObject()) + return; + + for (Json::ValueIterator iter = json.begin(); iter != json.end(); ++iter) { + Json::Value &value = *iter; + if (value.isInt()) + damageGroups[iter.key().asString()] = value.asInt(); } } @@ -362,9 +384,8 @@ u32 calculateResultWear(const u32 uses, const u16 initial_wear) player. */ u16 wear_extra_at = blocks_normal * wear_normal; - if (initial_wear >= wear_extra_at) { + if (initial_wear >= wear_extra_at) wear_extra = 1; - } } result_wear = wear_normal + wear_extra; return result_wear; @@ -410,6 +431,7 @@ DigParams getDigParams(const ItemGroupList &groups, if (leveldiff > 1) time /= leveldiff; + if (!result_diggable || time < result_time) { result_time = time; result_diggable = true; @@ -509,4 +531,3 @@ f32 getToolRange(const ItemStack &wielded_item, const ItemStack &hand_item, return max_d; } - diff --git a/src/tool.h b/src/tool.h index 4b25d3a62..c3d811dd4 100644 --- a/src/tool.h +++ b/src/tool.h @@ -83,6 +83,10 @@ struct ToolCapabilities void deSerialize(std::istream &is); void serializeJson(std::ostream &os) const; void deserializeJson(std::istream &is); + +private: + void deserializeJsonGroupcaps(Json::Value &json); + void deserializeJsonDamageGroups(Json::Value &json); }; struct WearBarParams diff --git a/src/unittest/CMakeLists.txt b/src/unittest/CMakeLists.txt index ec52ee6bf..93803c912 100644 --- a/src/unittest/CMakeLists.txt +++ b/src/unittest/CMakeLists.txt @@ -49,7 +49,7 @@ set (UNITTEST_CLIENT_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/test_content_mapblock.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_eventmanager.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_gameui.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/test_irr_gltf_mesh_loader.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_mesh_compare.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_keycode.cpp PARENT_SCOPE) - diff --git a/src/unittest/test_connection.cpp b/src/unittest/test_connection.cpp index 4adbc9039..b7d751dc3 100644 --- a/src/unittest/test_connection.cpp +++ b/src/unittest/test_connection.cpp @@ -23,7 +23,8 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "porting.h" #include "settings.h" #include "util/serialize.h" -#include "network/connection_internal.h" +#include "network/peerhandler.h" +#include "network/mtp/internal.h" #include "network/networkpacket.h" #include "network/socket.h" @@ -59,7 +60,7 @@ struct Handler : public con::PeerHandler { Handler(const char *a_name) : name(a_name) {} - void peerAdded(con::Peer *peer) + void peerAdded(con::IPeer *peer) { infostream << "Handler(" << name << ")::peerAdded(): " "id=" << peer->id << std::endl; @@ -67,7 +68,7 @@ struct Handler : public con::PeerHandler count++; } - void deletingPeer(con::Peer *peer, bool timeout) + void deletingPeer(con::IPeer *peer, bool timeout) { infostream << "Handler(" << name << ")::deletingPeer(): " "id=" << peer->id << ", timeout=" << timeout << std::endl; @@ -159,14 +160,15 @@ void TestConnection::testHelpers() void TestConnection::testConnectSendReceive() { + + constexpr u32 timeout_ms = 100; + /* Test some real connections NOTE: This mostly tests the legacy interface. */ - u32 proto_id = 0xad26846a; - Handler hand_server("server"); Handler hand_client("client"); @@ -187,11 +189,11 @@ void TestConnection::testConnectSendReceive() } infostream << "** Creating server Connection" << std::endl; - con::Connection server(proto_id, 512, 5.0, false, &hand_server); + con::Connection server(512, 5.0f, false, &hand_server); server.Serve(address); infostream << "** Creating client Connection" << std::endl; - con::Connection client(proto_id, 512, 5.0, false, &hand_client); + con::Connection client(512, 5.0f, false, &hand_client); UASSERT(hand_server.count == 0); UASSERT(hand_client.count == 0); @@ -211,13 +213,11 @@ void TestConnection::testConnectSendReceive() // Client should not have added client yet UASSERT(hand_client.count == 0); - try { - NetworkPacket pkt; - infostream << "** running client.Receive()" << std::endl; - client.Receive(&pkt); + NetworkPacket pkt; + infostream << "** running client.Receive()" << std::endl; + if (client.ReceiveTimeoutMs(&pkt, timeout_ms)) { infostream << "** Client received: peer_id=" << pkt.getPeerId() << ", size=" << pkt.getSize() << std::endl; - } catch (con::NoIncomingDataException &e) { } // Client should have added server now @@ -228,14 +228,14 @@ void TestConnection::testConnectSendReceive() sleep_ms(100); - try { - NetworkPacket pkt; - infostream << "** running server.Receive()" << std::endl; - server.Receive(&pkt); + NetworkPacket pkt1; + infostream << "** running server.Receive()" << std::endl; + if (server.ReceiveTimeoutMs(&pkt, timeout_ms)) { infostream << "** Server received: peer_id=" << pkt.getPeerId() - << ", size=" << pkt.getSize() - << std::endl; - } catch (con::NoIncomingDataException &e) { + << ", size=" << pkt.getSize() + << std::endl; + } + else { // No actual data received, but the client has // probably been connected } @@ -250,27 +250,23 @@ void TestConnection::testConnectSendReceive() //sleep_ms(50); while (client.Connected() == false) { - try { - NetworkPacket pkt; - infostream << "** running client.Receive()" << std::endl; - client.Receive(&pkt); + NetworkPacket pkt; + infostream << "** running client.Receive()" << std::endl; + if (client.TryReceive(&pkt)) { infostream << "** Client received: peer_id=" << pkt.getPeerId() << ", size=" << pkt.getSize() << std::endl; - } catch (con::NoIncomingDataException &e) { } sleep_ms(50); } sleep_ms(50); - try { - NetworkPacket pkt; - infostream << "** running server.Receive()" << std::endl; - server.Receive(&pkt); + NetworkPacket pkt2; + infostream << "** running server.Receive()" << std::endl; + if (server.ReceiveTimeoutMs(&pkt, timeout_ms)) { infostream << "** Server received: peer_id=" << pkt.getPeerId() - << ", size=" << pkt.getSize() - << std::endl; - } catch (con::NoIncomingDataException &e) { + << ", size=" << pkt.getSize() + << std::endl; } /* @@ -289,7 +285,7 @@ void TestConnection::testConnectSendReceive() NetworkPacket recvpacket; infostream << "** running server.Receive()" << std::endl; - server.Receive(&recvpacket); + UASSERT(server.ReceiveTimeoutMs(&recvpacket, timeout_ms)); infostream << "** Server received: peer_id=" << pkt.getPeerId() << ", size=" << pkt.getSize() << ", data=" << (const char*)pkt.getU8Ptr(0) @@ -339,14 +335,12 @@ void TestConnection::testConnectSendReceive() for (;;) { if (porting::getTimeMs() - timems0 > 5000 || received) break; - try { - NetworkPacket pkt; - client.Receive(&pkt); + NetworkPacket pkt; + if (client.ReceiveTimeoutMs(&pkt, timeout_ms)) { size = pkt.getSize(); peer_id = pkt.getPeerId(); recvdata = pkt.oldForgePacket(); received = true; - } catch (con::NoIncomingDataException &e) { } sleep_ms(10); } diff --git a/src/unittest/test_filesys.cpp b/src/unittest/test_filesys.cpp index 8fc9db3d8..fd25d2de9 100644 --- a/src/unittest/test_filesys.cpp +++ b/src/unittest/test_filesys.cpp @@ -113,6 +113,7 @@ void TestFileSys::testPathStartsWith() }; /* expected fs::PathStartsWith results + (row for every path, column for every prefix) 0 = returns false 1 = returns true 2 = returns false on windows, true elsewhere @@ -122,17 +123,17 @@ void TestFileSys::testPathStartsWith() */ int expected_results[numpaths][numpaths] = { {1,2,0,0,0,0,0,0,0,0,0,0}, - {1,1,0,0,0,0,0,0,0,0,0,0}, - {1,1,1,0,0,0,0,0,0,0,0,0}, - {1,1,1,1,0,0,0,0,0,0,0,0}, - {1,1,0,0,1,0,0,0,0,0,0,0}, - {1,1,0,0,0,1,0,0,1,1,0,0}, - {1,1,0,0,0,0,1,4,1,0,0,0}, - {1,1,0,0,0,0,4,1,4,0,0,0}, - {1,1,0,0,0,0,0,0,1,0,0,0}, - {1,1,0,0,0,0,0,0,1,1,0,0}, - {1,1,0,0,0,0,0,0,0,0,1,0}, - {1,1,0,0,0,0,0,0,0,0,0,1}, + {0,1,0,0,0,0,0,0,0,0,0,0}, + {0,1,1,0,0,0,0,0,0,0,0,0}, + {0,1,1,1,0,0,0,0,0,0,0,0}, + {0,1,0,0,1,0,0,0,0,0,0,0}, + {0,1,0,0,0,1,0,0,1,1,0,0}, + {0,1,0,0,0,0,1,4,1,0,0,0}, + {0,1,0,0,0,0,4,1,4,0,0,0}, + {0,1,0,0,0,0,0,0,1,0,0,0}, + {0,1,0,0,0,0,0,0,1,1,0,0}, + {0,1,0,0,0,0,0,0,0,0,1,0}, + {0,1,0,0,0,0,0,0,0,0,0,1}, }; for (int i = 0; i < numpaths; i++) diff --git a/src/unittest/test_irr_gltf_mesh_loader.cpp b/src/unittest/test_irr_gltf_mesh_loader.cpp new file mode 100644 index 000000000..8ab57e590 --- /dev/null +++ b/src/unittest/test_irr_gltf_mesh_loader.cpp @@ -0,0 +1,366 @@ +// Minetest +// SPDX-License-Identifier: LGPL-2.1-or-later + +#include "CSceneManager.h" +#include "content/subgames.h" +#include "filesys.h" + +#include "CReadFile.h" +#include "irr_v3d.h" +#include "irr_v2d.h" + +#include + +#include "catch.h" + +TEST_CASE("gltf") { + +const auto gamespec = findSubgame("devtest"); + +if (!gamespec.isValid()) + SKIP(); + +irr::scene::CSceneManager smgr(nullptr, nullptr, nullptr); +const auto loadMesh = [&smgr](const irr::io::path& filepath) { + irr::io::CReadFile file(filepath); + return smgr.getMesh(&file); +}; + +const static auto model_stem = gamespec.gamemods_path + + DIR_DELIM + "gltf" + DIR_DELIM + "models" + DIR_DELIM + "gltf_"; + +SECTION("error cases") { + const static auto invalid_model_path = gamespec.gamemods_path + DIR_DELIM + "gltf" + DIR_DELIM + "invalid" + DIR_DELIM; + + SECTION("empty gltf file") { + CHECK(loadMesh(invalid_model_path + "empty.gltf") == nullptr); + } + + SECTION("null file pointer") { + CHECK(smgr.getMesh(nullptr) == nullptr); + } + + SECTION("invalid JSON") { + CHECK(loadMesh(invalid_model_path + "json_missing_brace.gltf") == nullptr); + } + + // This is an example of something that should be validated by tiniergltf. + SECTION("invalid bufferview bounds") + { + CHECK(loadMesh(invalid_model_path + "invalid_bufferview_bounds.gltf") == nullptr); + } +} + +SECTION("minimal triangle") { + const auto path = GENERATE( + model_stem + "minimal_triangle.gltf", + model_stem + "triangle_with_vertex_stride.gltf", + // Test non-indexed geometry. + model_stem + "triangle_without_indices.gltf"); + INFO(path); + const auto mesh = loadMesh(path); + REQUIRE(mesh != nullptr); + REQUIRE(mesh->getMeshBufferCount() == 1); + + SECTION("vertex coordinates are correct") { + REQUIRE(mesh->getMeshBuffer(0)->getVertexCount() == 3); + auto vertices = static_cast( + mesh->getMeshBuffer(0)->getVertices()); + CHECK(vertices[0].Pos == v3f {0.0f, 0.0f, 0.0f}); + CHECK(vertices[1].Pos == v3f {1.0f, 0.0f, 0.0f}); + CHECK(vertices[2].Pos == v3f {0.0f, 1.0f, 0.0f}); + } + + SECTION("vertex indices are correct") { + REQUIRE(mesh->getMeshBuffer(0)->getIndexCount() == 3); + auto indices = static_cast( + mesh->getMeshBuffer(0)->getIndices()); + CHECK(indices[0] == 2); + CHECK(indices[1] == 1); + CHECK(indices[2] == 0); + } +} + +SECTION("blender cube") { + const auto mesh = loadMesh(model_stem + "blender_cube.gltf"); + REQUIRE(mesh != nullptr); + REQUIRE(mesh->getMeshBufferCount() == 1); + SECTION("vertex coordinates are correct") { + REQUIRE(mesh->getMeshBuffer(0)->getVertexCount() == 24); + auto vertices = static_cast( + mesh->getMeshBuffer(0)->getVertices()); + CHECK(vertices[0].Pos == v3f{-10.0f, -10.0f, -10.0f}); + CHECK(vertices[3].Pos == v3f{-10.0f, 10.0f, -10.0f}); + CHECK(vertices[6].Pos == v3f{-10.0f, -10.0f, 10.0f}); + CHECK(vertices[9].Pos == v3f{-10.0f, 10.0f, 10.0f}); + CHECK(vertices[12].Pos == v3f{10.0f, -10.0f, -10.0f}); + CHECK(vertices[15].Pos == v3f{10.0f, 10.0f, -10.0f}); + CHECK(vertices[18].Pos == v3f{10.0f, -10.0f, 10.0f}); + CHECK(vertices[21].Pos == v3f{10.0f, 10.0f, 10.0f}); + } + + SECTION("vertex indices are correct") { + REQUIRE(mesh->getMeshBuffer(0)->getIndexCount() == 36); + auto indices = static_cast( + mesh->getMeshBuffer(0)->getIndices()); + CHECK(indices[0] == 16); + CHECK(indices[1] == 5); + CHECK(indices[2] == 22); + CHECK(indices[35] == 0); + } + + SECTION("vertex normals are correct") { + REQUIRE(mesh->getMeshBuffer(0)->getVertexCount() == 24); + auto vertices = static_cast( + mesh->getMeshBuffer(0)->getVertices()); + CHECK(vertices[0].Normal == v3f{-1.0f, 0.0f, 0.0f}); + CHECK(vertices[1].Normal == v3f{0.0f, -1.0f, 0.0f}); + CHECK(vertices[2].Normal == v3f{0.0f, 0.0f, -1.0f}); + CHECK(vertices[3].Normal == v3f{-1.0f, 0.0f, 0.0f}); + CHECK(vertices[6].Normal == v3f{-1.0f, 0.0f, 0.0f}); + CHECK(vertices[23].Normal == v3f{1.0f, 0.0f, 0.0f}); + + } + + SECTION("texture coords are correct") { + REQUIRE(mesh->getMeshBuffer(0)->getVertexCount() == 24); + auto vertices = static_cast( + mesh->getMeshBuffer(0)->getVertices()); + CHECK(vertices[0].TCoords == v2f{0.375f, 1.0f}); + CHECK(vertices[1].TCoords == v2f{0.125f, 0.25f}); + CHECK(vertices[2].TCoords == v2f{0.375f, 0.0f}); + CHECK(vertices[3].TCoords == v2f{0.6250f, 1.0f}); + CHECK(vertices[6].TCoords == v2f{0.375f, 0.75f}); + } +} + +SECTION("blender cube scaled") { + const auto mesh = loadMesh(model_stem + "blender_cube_scaled.gltf"); + REQUIRE(mesh != nullptr); + REQUIRE(mesh->getMeshBufferCount() == 1); + + SECTION("Scaling is correct") { + REQUIRE(mesh->getMeshBuffer(0)->getVertexCount() == 24); + auto vertices = static_cast( + mesh->getMeshBuffer(0)->getVertices()); + + CHECK(vertices[0].Pos == v3f{-150.0f, -1.0f, -21.5f}); + CHECK(vertices[3].Pos == v3f{-150.0f, 1.0f, -21.5f}); + CHECK(vertices[6].Pos == v3f{-150.0f, -1.0f, 21.5f}); + CHECK(vertices[9].Pos == v3f{-150.0f, 1.0f, 21.5f}); + CHECK(vertices[12].Pos == v3f{150.0f, -1.0f, -21.5f}); + CHECK(vertices[15].Pos == v3f{150.0f, 1.0f, -21.5f}); + CHECK(vertices[18].Pos == v3f{150.0f, -1.0f, 21.5f}); + CHECK(vertices[21].Pos == v3f{150.0f, 1.0f, 21.5f}); + } +} + +SECTION("blender cube matrix transform") { + const auto mesh = loadMesh(model_stem + "blender_cube_matrix_transform.gltf"); + REQUIRE(mesh != nullptr); + REQUIRE(mesh->getMeshBufferCount() == 1); + + SECTION("Transformation is correct") { + REQUIRE(mesh->getMeshBuffer(0)->getVertexCount() == 24); + auto vertices = static_cast( + mesh->getMeshBuffer(0)->getVertices()); + const auto checkVertex = [&](const std::size_t i, v3f vec) { + // The transform scales by (1, 2, 3) and translates by (4, 5, 6). + CHECK(vertices[i].Pos == vec * v3f{1, 2, 3} + // The -6 is due to the coordinate system conversion. + + v3f{4, 5, -6}); + }; + checkVertex(0, v3f{-1, -1, -1}); + checkVertex(3, v3f{-1, 1, -1}); + checkVertex(6, v3f{-1, -1, 1}); + checkVertex(9, v3f{-1, 1, 1}); + checkVertex(12, v3f{1, -1, -1}); + checkVertex(15, v3f{1, 1, -1}); + checkVertex(18, v3f{1, -1, 1}); + checkVertex(21, v3f{1, 1, 1}); + } +} + +SECTION("snow man") { + const auto mesh = loadMesh(model_stem + "snow_man.gltf"); + REQUIRE(mesh != nullptr); + REQUIRE(mesh->getMeshBufferCount() == 3); + + SECTION("vertex coordinates are correct for all buffers") { + REQUIRE(mesh->getMeshBuffer(0)->getVertexCount() == 24); + { + auto vertices = static_cast( + mesh->getMeshBuffer(0)->getVertices()); + CHECK(vertices[0].Pos == v3f{3.0f, 24.0f, -3.0f}); + CHECK(vertices[3].Pos == v3f{3.0f, 18.0f, 3.0f}); + CHECK(vertices[6].Pos == v3f{-3.0f, 18.0f, -3.0f}); + CHECK(vertices[9].Pos == v3f{3.0f, 24.0f, 3.0f}); + CHECK(vertices[12].Pos == v3f{3.0f, 18.0f, -3.0f}); + CHECK(vertices[15].Pos == v3f{-3.0f, 18.0f, 3.0f}); + CHECK(vertices[18].Pos == v3f{3.0f, 18.0f, -3.0f}); + CHECK(vertices[21].Pos == v3f{3.0f, 18.0f, 3.0f}); + } + { + REQUIRE(mesh->getMeshBuffer(1)->getVertexCount() == 24); + auto vertices = static_cast( + mesh->getMeshBuffer(1)->getVertices()); + CHECK(vertices[2].Pos == v3f{5.0f, 10.0f, 5.0f}); + CHECK(vertices[3].Pos == v3f{5.0f, 0.0f, 5.0f}); + CHECK(vertices[7].Pos == v3f{-5.0f, 0.0f, 5.0f}); + CHECK(vertices[8].Pos == v3f{5.0f, 10.0f, -5.0f}); + CHECK(vertices[14].Pos == v3f{5.0f, 0.0f, 5.0f}); + CHECK(vertices[16].Pos == v3f{5.0f, 10.0f, -5.0f}); + CHECK(vertices[22].Pos == v3f{-5.0f, 10.0f, 5.0f}); + CHECK(vertices[23].Pos == v3f{-5.0f, 0.0f, 5.0f}); + } + { + REQUIRE(mesh->getMeshBuffer(2)->getVertexCount() == 24); + auto vertices = static_cast( + mesh->getMeshBuffer(2)->getVertices()); + CHECK(vertices[1].Pos == v3f{4.0f, 10.0f, -4.0f}); + CHECK(vertices[2].Pos == v3f{4.0f, 18.0f, 4.0f}); + CHECK(vertices[3].Pos == v3f{4.0f, 10.0f, 4.0f}); + CHECK(vertices[10].Pos == v3f{-4.0f, 18.0f, -4.0f}); + CHECK(vertices[11].Pos == v3f{-4.0f, 18.0f, 4.0f}); + CHECK(vertices[12].Pos == v3f{4.0f, 10.0f, -4.0f}); + CHECK(vertices[17].Pos == v3f{-4.0f, 18.0f, -4.0f}); + CHECK(vertices[18].Pos == v3f{4.0f, 10.0f, -4.0f}); + } + } + + SECTION("vertex indices are correct for all buffers") { + { + REQUIRE(mesh->getMeshBuffer(0)->getIndexCount() == 36); + auto indices = static_cast( + mesh->getMeshBuffer(0)->getIndices()); + CHECK(indices[0] == 23); + CHECK(indices[1] == 21); + CHECK(indices[2] == 22); + CHECK(indices[35] == 2); + } + { + REQUIRE(mesh->getMeshBuffer(1)->getIndexCount() == 36); + auto indices = static_cast( + mesh->getMeshBuffer(1)->getIndices()); + CHECK(indices[10] == 16); + CHECK(indices[11] == 18); + CHECK(indices[15] == 13); + CHECK(indices[27] == 5); + } + { + REQUIRE(mesh->getMeshBuffer(2)->getIndexCount() == 36); + auto indices = static_cast( + mesh->getMeshBuffer(2)->getIndices()); + CHECK(indices[26] == 6); + CHECK(indices[27] == 5); + CHECK(indices[29] == 6); + CHECK(indices[32] == 2); + } + } + + + SECTION("vertex normals are correct for all buffers") { + { + REQUIRE(mesh->getMeshBuffer(0)->getVertexCount() == 24); + auto vertices = static_cast( + mesh->getMeshBuffer(0)->getVertices()); + CHECK(vertices[0].Normal == v3f{1.0f, 0.0f, -0.0f}); + CHECK(vertices[1].Normal == v3f{1.0f, 0.0f, -0.0f}); + CHECK(vertices[2].Normal == v3f{1.0f, 0.0f, -0.0f}); + CHECK(vertices[3].Normal == v3f{1.0f, 0.0f, -0.0f}); + CHECK(vertices[6].Normal == v3f{-1.0f, 0.0f, -0.0f}); + CHECK(vertices[23].Normal == v3f{0.0f, 0.0f, 1.0f}); + } + { + REQUIRE(mesh->getMeshBuffer(1)->getVertexCount() == 24); + auto vertices = static_cast( + mesh->getMeshBuffer(1)->getVertices()); + CHECK(vertices[0].Normal == v3f{1.0f, 0.0f, -0.0f}); + CHECK(vertices[1].Normal == v3f{1.0f, 0.0f, -0.0f}); + CHECK(vertices[3].Normal == v3f{1.0f, 0.0f, -0.0f}); + CHECK(vertices[6].Normal == v3f{-1.0f, 0.0f, -0.0f}); + CHECK(vertices[7].Normal == v3f{-1.0f, 0.0f, -0.0f}); + CHECK(vertices[22].Normal == v3f{0.0f, 0.0f, 1.0f}); + } + { + REQUIRE(mesh->getMeshBuffer(2)->getVertexCount() == 24); + auto vertices = static_cast( + mesh->getMeshBuffer(2)->getVertices()); + CHECK(vertices[3].Normal == v3f{1.0f, 0.0f, -0.0f}); + CHECK(vertices[4].Normal == v3f{-1.0f, 0.0f, -0.0f}); + CHECK(vertices[5].Normal == v3f{-1.0f, 0.0f, -0.0f}); + CHECK(vertices[10].Normal == v3f{0.0f, 1.0f, -0.0f}); + CHECK(vertices[11].Normal == v3f{0.0f, 1.0f, -0.0f}); + CHECK(vertices[19].Normal == v3f{0.0f, 0.0f, -1.0f}); + } + } + + + SECTION("texture coords are correct for all buffers") { + { + REQUIRE(mesh->getMeshBuffer(0)->getVertexCount() == 24); + auto vertices = static_cast( + mesh->getMeshBuffer(0)->getVertices()); + CHECK(vertices[0].TCoords == v2f{0.583333313f, 0.791666686f}); + CHECK(vertices[1].TCoords == v2f{0.583333313f, 0.666666686f}); + CHECK(vertices[2].TCoords == v2f{0.708333313f, 0.791666686f}); + CHECK(vertices[5].TCoords == v2f{0.375f, 0.416666657f}); + CHECK(vertices[6].TCoords == v2f{0.5f, 0.291666657f}); + CHECK(vertices[19].TCoords == v2f{0.708333313f, 0.75f}); + } + { + REQUIRE(mesh->getMeshBuffer(1)->getVertexCount() == 24); + auto vertices = static_cast( + mesh->getMeshBuffer(1)->getVertices()); + + CHECK(vertices[1].TCoords == v2f{0.0f, 0.791666686f}); + CHECK(vertices[4].TCoords == v2f{0.208333328f, 0.791666686f}); + CHECK(vertices[5].TCoords == v2f{0.0f, 0.791666686f}); + CHECK(vertices[6].TCoords == v2f{0.208333328f, 0.583333313f}); + CHECK(vertices[12].TCoords == v2f{0.416666657f, 0.791666686f}); + CHECK(vertices[15].TCoords == v2f{0.208333328f, 0.583333313f}); + } + { + REQUIRE(mesh->getMeshBuffer(2)->getVertexCount() == 24); + auto vertices = static_cast( + mesh->getMeshBuffer(2)->getVertices()); + CHECK(vertices[10].TCoords == v2f{0.375f, 0.416666657f}); + CHECK(vertices[11].TCoords == v2f{0.375f, 0.583333313f}); + CHECK(vertices[12].TCoords == v2f{0.708333313f, 0.625f}); + CHECK(vertices[17].TCoords == v2f{0.541666687f, 0.458333343f}); + CHECK(vertices[20].TCoords == v2f{0.208333328f, 0.416666657f}); + CHECK(vertices[22].TCoords == v2f{0.375f, 0.416666657f}); + } + } +} + +// https://github.com/KhronosGroup/glTF-Sample-Models/tree/main/2.0/SimpleSparseAccessor +SECTION("simple sparse accessor") +{ + const auto mesh = loadMesh(model_stem + "simple_sparse_accessor.gltf"); + REQUIRE(mesh != nullptr); + const auto *vertices = reinterpret_cast( + mesh->getMeshBuffer(0)->getVertices()); + const std::array expectedPositions = { + // Lower + v3f(0, 0, 0), + v3f(1, 0, 0), + v3f(2, 0, 0), + v3f(3, 0, 0), + v3f(4, 0, 0), + v3f(5, 0, 0), + v3f(6, 0, 0), + // Upper + v3f(0, 1, 0), + v3f(1, 2, 0), // overridden + v3f(2, 1, 0), + v3f(3, 3, 0), // overridden + v3f(4, 1, 0), + v3f(5, 4, 0), // overridden + v3f(6, 1, 0), + }; + for (std::size_t i = 0; i < expectedPositions.size(); ++i) + CHECK(vertices[i].Pos == expectedPositions[i]); +} + +} diff --git a/src/unittest/test_irrptr.cpp b/src/unittest/test_irrptr.cpp index befeefc73..61d1e302c 100644 --- a/src/unittest/test_irrptr.cpp +++ b/src/unittest/test_irrptr.cpp @@ -21,6 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "exceptions.h" #include "irr_ptr.h" +#include "IReferenceCounted.h" class TestIrrPtr : public TestBase { diff --git a/src/unittest/test_nodedef.cpp b/src/unittest/test_nodedef.cpp index acf669783..85dadd17d 100644 --- a/src/unittest/test_nodedef.cpp +++ b/src/unittest/test_nodedef.cpp @@ -17,38 +17,22 @@ with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#include "test.h" - -#include - #include "gamedef.h" #include "nodedef.h" #include "network/networkprotocol.h" -class TestNodeDef : public TestBase -{ -public: - TestNodeDef() { TestManager::registerTestModule(this); } - const char *getName() { return "TestNodeDef"; } +#include - void runTests(IGameDef *gamedef); +#include +#include - void testContentFeaturesSerialization(); -}; -static TestNodeDef g_test_instance; - -void TestNodeDef::runTests(IGameDef *gamedef) -{ - TEST(testContentFeaturesSerialization); -} - -//////////////////////////////////////////////////////////////////////////////// - -void TestNodeDef::testContentFeaturesSerialization() +TEST_CASE("Given a node definition, " + "when we serialize and then deserialize it, " + "then the deserialized one should be equal to the original.", + "[nodedef]") { ContentFeatures f; - f.name = "default:stone"; for (TileDef &tiledef : f.tiledef) tiledef.name = "default_stone.png"; @@ -56,12 +40,10 @@ void TestNodeDef::testContentFeaturesSerialization() std::ostringstream os(std::ios::binary); f.serialize(os, LATEST_PROTOCOL_VERSION); - // verbosestream<<"Test ContentFeatures size: "< result; std::set cur_objects; - saomgr.getAddedActiveObjectsAroundPos(v3f(), 100, 50, cur_objects, result); + saomgr.getAddedActiveObjectsAroundPos(v3f(), "singleplayer", 100, 50, cur_objects, result); UASSERTCMP(int, ==, result.size(), 1); result.clear(); cur_objects.clear(); - saomgr.getAddedActiveObjectsAroundPos(v3f(), 740, 50, cur_objects, result); + saomgr.getAddedActiveObjectsAroundPos(v3f(), "singleplayer", 740, 50, cur_objects, result); UASSERTCMP(int, ==, result.size(), 2); saomgr.clear(); diff --git a/src/unittest/test_servermodmanager.cpp b/src/unittest/test_servermodmanager.cpp index 90c29e125..f26734ab3 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(), 31 + 1); + UASSERTEQ(std::size_t, mods.size(), 32 + 1); // Ensure we found basenodes mod (part of devtest) // and test_mod (for testing MINETEST_MOD_PATH). diff --git a/src/unittest/test_utilities.cpp b/src/unittest/test_utilities.cpp index 996b418e3..a05421c9b 100644 --- a/src/unittest/test_utilities.cpp +++ b/src/unittest/test_utilities.cpp @@ -61,6 +61,7 @@ public: void testSanitizeDirName(); void testIsBlockInSight(); void testColorizeURL(); + void testSanitizeUntrusted(); }; static TestUtilities g_test_instance; @@ -95,6 +96,7 @@ void TestUtilities::runTests(IGameDef *gamedef) TEST(testSanitizeDirName); TEST(testIsBlockInSight); TEST(testColorizeURL); + TEST(testSanitizeUntrusted); } //////////////////////////////////////////////////////////////////////////////// @@ -743,3 +745,28 @@ void TestUtilities::testColorizeURL() warningstream << "Test skipped." << std::endl; #endif } + +void TestUtilities::testSanitizeUntrusted() +{ + std::string_view t1{u8"Anästhesieausrüstung"}; + UASSERTEQ(auto, sanitize_untrusted(t1), t1); + + std::string_view t2{"stop\x00here", 9}; + UASSERTEQ(auto, sanitize_untrusted(t2), "stop"); + + UASSERTEQ(auto, sanitize_untrusted("\x01\x08\x13\x1dhello\r\n\tworld"), "hello\n\tworld"); + + std::string_view t3{"some \x1b(T@whatever)text\x1b" "E here"}; + UASSERTEQ(auto, sanitize_untrusted(t3), t3); + auto t3_sanitized = sanitize_untrusted(t3, false); + UASSERT(str_starts_with(t3_sanitized, "some ") && str_ends_with(t3_sanitized, " here")); + UASSERT(t3_sanitized.find('\x1b') == std::string::npos); + + UASSERTEQ(auto, sanitize_untrusted("\x1b[31m"), "[31m"); + + // edge cases + for (bool keep : {true, false}) { + UASSERTEQ(auto, sanitize_untrusted("\x1b", keep), ""); + UASSERTEQ(auto, sanitize_untrusted("\x1b(", keep), "("); + } +} diff --git a/src/unittest/test_voxelmanipulator.cpp b/src/unittest/test_voxelmanipulator.cpp index acc2707e7..6ea0ca9af 100644 --- a/src/unittest/test_voxelmanipulator.cpp +++ b/src/unittest/test_voxelmanipulator.cpp @@ -87,7 +87,7 @@ void TestVoxelManipulator::testVoxelManipulator(const NodeDefManager *nodedef) v.print(infostream, nodedef); infostream << "*** Setting (-1,0,-1)=2 ***" << std::endl; - v.setNodeNoRef(v3s16(-1,0,-1), MapNode(t_CONTENT_GRASS)); + v.setNode(v3s16(-1,0,-1), MapNode(t_CONTENT_GRASS)); v.print(infostream, nodedef); UASSERT(v.getNode(v3s16(-1,0,-1)).getContent() == t_CONTENT_GRASS); diff --git a/src/util/basic_macros.h b/src/util/basic_macros.h index 7c3746417..f0fd4eb48 100644 --- a/src/util/basic_macros.h +++ b/src/util/basic_macros.h @@ -28,6 +28,12 @@ with this program; if not, write to the Free Software Foundation, Inc., // Requires #define CONTAINS(c, v) (std::find((c).begin(), (c).end(), (v)) != (c).end()) +// Requires +#define SORT_AND_UNIQUE(c) do { \ + std::sort((c).begin(), (c).end()); \ + (c).erase(std::unique((c).begin(), (c).end()), (c).end()); \ + } while (0) + // To disable copy constructors and assignment operations for some class // 'Foobar', add the macro DISABLE_CLASS_COPY(Foobar) in the class definition. // Note this also disables copying for any classes derived from 'Foobar' as well diff --git a/src/util/enriched_string.cpp b/src/util/enriched_string.cpp index 04c5ef806..09baeac29 100644 --- a/src/util/enriched_string.cpp +++ b/src/util/enriched_string.cpp @@ -29,7 +29,7 @@ EnrichedString::EnrichedString() clear(); } -EnrichedString::EnrichedString(const std::wstring &string, +EnrichedString::EnrichedString(std::wstring_view string, const std::vector &colors) { clear(); @@ -37,18 +37,12 @@ EnrichedString::EnrichedString(const std::wstring &string, m_colors = colors; } -EnrichedString::EnrichedString(const std::wstring &s, const SColor &color) +EnrichedString::EnrichedString(std::wstring_view s, const SColor &color) { clear(); addAtEnd(translate_string(s), color); } -EnrichedString::EnrichedString(const wchar_t *str, const SColor &color) -{ - clear(); - addAtEnd(translate_string(std::wstring(str)), color); -} - void EnrichedString::clear() { m_string.clear(); @@ -59,19 +53,20 @@ void EnrichedString::clear() m_background = irr::video::SColor(0, 0, 0, 0); } -EnrichedString &EnrichedString::operator=(const wchar_t *str) +EnrichedString &EnrichedString::operator=(std::wstring_view str) { clear(); - addAtEnd(translate_string(std::wstring(str)), m_default_color); + addAtEnd(translate_string(str), m_default_color); return *this; } -void EnrichedString::addAtEnd(const std::wstring &s, SColor initial_color) +void EnrichedString::addAtEnd(std::wstring_view s, SColor initial_color) { SColor color(initial_color); bool use_default = (m_default_length == m_string.size() && color == m_default_color); + m_string.reserve(m_string.size() + s.size()); m_colors.reserve(m_colors.size() + s.size()); size_t i = 0; @@ -142,7 +137,7 @@ void EnrichedString::addCharNoColor(wchar_t c) if (m_colors.empty()) { m_colors.emplace_back(m_default_color); } else { - m_colors.push_back(m_colors[m_colors.size() - 1]); + m_colors.push_back(m_colors.back()); } } @@ -203,11 +198,6 @@ EnrichedString EnrichedString::substr(size_t pos, size_t len) const return str; } -const wchar_t *EnrichedString::c_str() const -{ - return m_string.c_str(); -} - const std::vector &EnrichedString::getColors() const { return m_colors; diff --git a/src/util/enriched_string.h b/src/util/enriched_string.h index 3d19eaed5..18fd967bc 100644 --- a/src/util/enriched_string.h +++ b/src/util/enriched_string.h @@ -20,6 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #pragma once #include +#include #include #include @@ -28,17 +29,15 @@ using namespace irr; class EnrichedString { public: EnrichedString(); - EnrichedString(const std::wstring &s, + EnrichedString(std::wstring_view s, const video::SColor &color = video::SColor(255, 255, 255, 255)); - EnrichedString(const wchar_t *str, - const video::SColor &color = video::SColor(255, 255, 255, 255)); - EnrichedString(const std::wstring &string, + EnrichedString(std::wstring_view string, const std::vector &colors); - EnrichedString &operator=(const wchar_t *str); + EnrichedString &operator=(std::wstring_view s); void clear(); - void addAtEnd(const std::wstring &s, video::SColor color); + void addAtEnd(std::wstring_view s, video::SColor color); // Adds the character source[i] at the end. // An EnrichedString should always be able to be copied @@ -51,9 +50,18 @@ public: EnrichedString getNextLine(size_t *pos) const; EnrichedString substr(size_t pos = 0, size_t len = std::string::npos) const; + EnrichedString operator+(const EnrichedString &other) const; void operator+=(const EnrichedString &other); - const wchar_t *c_str() const; + void operator+=(std::wstring_view other) + { + *this += EnrichedString(other); + } + + const wchar_t *c_str() const + { + return getString().c_str(); + } const std::vector &getColors() const; const std::wstring &getString() const; @@ -106,6 +114,5 @@ private: video::SColor m_default_color; video::SColor m_background; // This variable defines the length of the default-colored text. - // Change this to a std::vector if an "end coloring" tag is wanted. size_t m_default_length = 0; }; diff --git a/src/util/numeric.h b/src/util/numeric.h index c31dcb9fb..758b55968 100644 --- a/src/util/numeric.h +++ b/src/util/numeric.h @@ -28,6 +28,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "SColor.h" #include #include +#include #define rangelim(d, min, max) ((d) < (min) ? (min) : ((d) > (max) ? (max) : (d))) #define myfloor(x) ((x) < 0.0 ? (int)(x) - 1 : (int)(x)) @@ -179,7 +180,9 @@ struct MeshGrid { /// @brief Returns true if p is an origin of a cell in the grid. bool isMeshPos(v3s16 &p) const { - return ((p.X + p.Y + p.Z) % cell_size) == 0; + return p.X % cell_size == 0 + && p.Y % cell_size == 0 + && p.Z % cell_size == 0; } /// @brief Returns index of the given offset in a grid cell @@ -439,6 +442,17 @@ inline u32 npot2(u32 orig) { return orig + 1; } +// Distance between two values in a wrapped (circular) system +template +inline unsigned wrappedDifference(T a, T b, const T maximum) +{ + if (a > b) + std::swap(a, b); + // now b >= a + unsigned s = b - a, l = static_cast(maximum - b) + a + 1; + return std::min(s, l); +} + // Gradual steps towards the target value in a wrapped (circular) system // using the shorter of both ways template diff --git a/src/util/pointer.h b/src/util/pointer.h index 528897a1c..b7fad4fe1 100644 --- a/src/util/pointer.h +++ b/src/util/pointer.h @@ -273,9 +273,7 @@ public: void grab() noexcept { ++m_refcount; } void drop() noexcept { if (--m_refcount == 0) delete this; } - // Preserve own reference count. - IntrusiveReferenceCounted(const IntrusiveReferenceCounted &) {} - IntrusiveReferenceCounted &operator=(const IntrusiveReferenceCounted &) { return *this; } + DISABLE_CLASS_COPY(IntrusiveReferenceCounted) private: u32 m_refcount = 1; }; diff --git a/src/util/srp.cpp b/src/util/srp.cpp index 56b2aa763..b1dfa76a4 100644 --- a/src/util/srp.cpp +++ b/src/util/srp.cpp @@ -51,6 +51,7 @@ #endif #include "my_sha256.h" +#include "porting.h" #include "srp.h" //#define CSRP_USE_SHA1 @@ -70,26 +71,6 @@ printf("\n"); }*/ -static int g_initialized = 0; - -#define RAND_BUFF_MAX 128 -static unsigned int g_rand_idx; -static unsigned char g_rand_buff[RAND_BUFF_MAX]; - -void *(*srp_alloc)(size_t) = &malloc; -void *(*srp_realloc)(void *, size_t) = &realloc; -void (*srp_free)(void *) = &free; - -void srp_set_memory_functions( - void *(*new_srp_alloc)(size_t), - void *(*new_srp_realloc)(void *, size_t), - void (*new_srp_free)(void *)) -{ - srp_alloc = new_srp_alloc; - srp_realloc = new_srp_realloc; - srp_free = new_srp_free; -} - typedef struct { mpz_t N; mpz_t g; @@ -189,13 +170,13 @@ static void delete_ng(NGConstant *ng) if (ng) { mpz_clear(ng->N); mpz_clear(ng->g); - srp_free(ng); + free(ng); } } static NGConstant *new_ng(SRP_NGType ng_type, const char *n_hex, const char *g_hex) { - NGConstant *ng = (NGConstant *)srp_alloc(sizeof(NGConstant)); + NGConstant *ng = (NGConstant *)malloc(sizeof(NGConstant)); if (!ng) return 0; @@ -402,17 +383,17 @@ static SRP_Result H_nn( size_t len_n1 = mpz_num_bytes(n1); size_t len_n2 = mpz_num_bytes(n2); size_t nbytes = len_N + len_N; - unsigned char *bin = (unsigned char *)srp_alloc(nbytes); + unsigned char *bin = (unsigned char *)malloc(nbytes); if (!bin) return SRP_ERR; if (len_n1 > len_N || len_n2 > len_N) { - srp_free(bin); + free(bin); return SRP_ERR; } memset(bin, 0, nbytes); mpz_to_bin(n1, bin + (len_N - len_n1)); mpz_to_bin(n2, bin + (len_N + len_N - len_n2)); hash(alg, bin, nbytes, buff); - srp_free(bin); + free(bin); mpz_from_bin(buff, hash_length(alg), result); return SRP_OK; } @@ -422,12 +403,12 @@ static SRP_Result H_ns(mpz_t result, SRP_HashAlgorithm alg, const unsigned char { unsigned char buff[CSRP_MAX_HASH]; size_t nbytes = len_n + len_bytes; - unsigned char *bin = (unsigned char *)srp_alloc(nbytes); + unsigned char *bin = (unsigned char *)malloc(nbytes); if (!bin) return SRP_ERR; memcpy(bin, n, len_n); memcpy(bin + len_n, bytes, len_bytes); hash(alg, bin, nbytes, buff); - srp_free(bin); + free(bin); mpz_from_bin(buff, hash_length(alg), result); return SRP_OK; } @@ -454,22 +435,22 @@ static int calculate_x(mpz_t result, SRP_HashAlgorithm alg, const unsigned char static SRP_Result update_hash_n(SRP_HashAlgorithm alg, HashCTX *ctx, const mpz_t n) { size_t len = mpz_num_bytes(n); - unsigned char *n_bytes = (unsigned char *)srp_alloc(len); + unsigned char *n_bytes = (unsigned char *)malloc(len); if (!n_bytes) return SRP_ERR; mpz_to_bin(n, n_bytes); hash_update(alg, ctx, n_bytes, len); - srp_free(n_bytes); + free(n_bytes); return SRP_OK; } static SRP_Result hash_num(SRP_HashAlgorithm alg, const mpz_t n, unsigned char *dest) { int nbytes = mpz_num_bytes(n); - unsigned char *bin = (unsigned char *)srp_alloc(nbytes); + unsigned char *bin = (unsigned char *)malloc(nbytes); if (!bin) return SRP_ERR; mpz_to_bin(n, bin); hash(alg, bin, nbytes, dest); - srp_free(bin); + free(bin); return SRP_OK; } @@ -521,60 +502,23 @@ static SRP_Result calculate_H_AMK(SRP_HashAlgorithm alg, unsigned char *dest, return SRP_OK; } -static SRP_Result fill_buff() -{ - g_rand_idx = 0; - -#ifdef WIN32 - HCRYPTPROV wctx; -#else - FILE *fp = 0; -#endif - -#ifdef WIN32 - - if (!CryptAcquireContext(&wctx, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) - return SRP_ERR; - if (!CryptGenRandom(wctx, sizeof(g_rand_buff), (BYTE *)g_rand_buff)) return SRP_ERR; - if (!CryptReleaseContext(wctx, 0)) return SRP_ERR; - -#else - fp = fopen("/dev/urandom", "r"); - - if (!fp) return SRP_ERR; - - if (fread(g_rand_buff, sizeof(g_rand_buff), 1, fp) != 1) { fclose(fp); return SRP_ERR; } - if (fclose(fp)) return SRP_ERR; -#endif - return SRP_OK; -} - static SRP_Result mpz_fill_random(mpz_t num) { - // was call: BN_rand(num, 256, -1, 0); - if (RAND_BUFF_MAX - g_rand_idx < 32) - if (fill_buff() != SRP_OK) return SRP_ERR; - mpz_from_bin((const unsigned char *)(&g_rand_buff[g_rand_idx]), 32, num); - g_rand_idx += 32; + unsigned char random_buf[32]; + if (!porting::secure_rand_fill_buf(random_buf, sizeof(random_buf))) + return SRP_ERR; + mpz_from_bin(random_buf, sizeof(random_buf), num); return SRP_OK; } -static SRP_Result init_random() -{ - if (g_initialized) return SRP_OK; - SRP_Result ret = fill_buff(); - g_initialized = (ret == SRP_OK); - return ret; -} - #define srp_dbg_num(num, text) ; /*void srp_dbg_num(mpz_t num, char * prevtext) { int len_num = mpz_num_bytes(num); - char *bytes_num = (char*) srp_alloc(len_num); + char *bytes_num = (char*) malloc(len_num); mpz_to_bin(num, (unsigned char *) bytes_num); srp_dbg_data(bytes_num, len_num, prevtext); - srp_free(bytes_num); + free(bytes_num); }*/ @@ -600,18 +544,13 @@ SRP_Result srp_create_salted_verification_key( SRP_HashAlgorithm alg, if (!ng) goto error_and_exit; - if (init_random() != SRP_OK) /* Only happens once */ - goto error_and_exit; - if (*bytes_s == NULL) { size_t size_to_fill = 16; *len_s = size_to_fill; - if (RAND_BUFF_MAX - g_rand_idx < size_to_fill) - if (fill_buff() != SRP_OK) goto error_and_exit; - *bytes_s = (unsigned char *)srp_alloc(size_to_fill); + *bytes_s = (unsigned char *)malloc(size_to_fill); if (!*bytes_s) goto error_and_exit; - memcpy(*bytes_s, &g_rand_buff[g_rand_idx], size_to_fill); - g_rand_idx += size_to_fill; + if (!porting::secure_rand_fill_buf(*bytes_s, size_to_fill)) + goto error_and_exit; } if (!calculate_x( @@ -624,7 +563,7 @@ SRP_Result srp_create_salted_verification_key( SRP_HashAlgorithm alg, *len_v = mpz_num_bytes(v); - *bytes_v = (unsigned char *)srp_alloc(*len_v); + *bytes_v = (unsigned char *)malloc(*len_v); if (!*bytes_v) goto error_and_exit; @@ -673,22 +612,16 @@ struct SRPVerifier *srp_verifier_new(SRP_HashAlgorithm alg, if (!ng) goto cleanup_and_exit; - ver = (struct SRPVerifier *)srp_alloc(sizeof(struct SRPVerifier)); + ver = (struct SRPVerifier *)malloc(sizeof(struct SRPVerifier)); if (!ver) goto cleanup_and_exit; - if (init_random() != SRP_OK) { /* Only happens once */ - srp_free(ver); - ver = 0; - goto cleanup_and_exit; - } - - ver->username = (char *)srp_alloc(ulen); + ver->username = (char *)malloc(ulen); ver->hash_alg = alg; ver->ng = ng; if (!ver->username) { - srp_free(ver); + free(ver); ver = 0; goto cleanup_and_exit; } @@ -733,7 +666,7 @@ struct SRPVerifier *srp_verifier_new(SRP_HashAlgorithm alg, } *len_B = mpz_num_bytes(B); - *bytes_B = (unsigned char *)srp_alloc(*len_B); + *bytes_B = (unsigned char *)malloc(*len_B); if (!*bytes_B) { *len_B = 0; @@ -744,7 +677,7 @@ struct SRPVerifier *srp_verifier_new(SRP_HashAlgorithm alg, ver->bytes_B = *bytes_B; } else { - srp_free(ver); + free(ver); ver = 0; } @@ -761,8 +694,8 @@ cleanup_and_exit: mpz_clear(tmp3); return ver; ver_cleanup_and_exit: - srp_free(ver->username); - srp_free(ver); + free(ver->username); + free(ver); ver = 0; goto cleanup_and_exit; } @@ -771,10 +704,10 @@ void srp_verifier_delete(struct SRPVerifier *ver) { if (ver) { delete_ng(ver->ng); - srp_free(ver->username); - srp_free(ver->bytes_B); + free(ver->username); + free(ver->bytes_B); memset(ver, 0, sizeof(*ver)); - srp_free(ver); + free(ver); } } @@ -818,15 +751,12 @@ struct SRPUser *srp_user_new(SRP_HashAlgorithm alg, SRP_NGType ng_type, const unsigned char *bytes_password, size_t len_password, const char *n_hex, const char *g_hex) { - struct SRPUser *usr = (struct SRPUser *)srp_alloc(sizeof(struct SRPUser)); + struct SRPUser *usr = (struct SRPUser *)malloc(sizeof(struct SRPUser)); size_t ulen = strlen(username) + 1; size_t uvlen = strlen(username_for_verifier) + 1; if (!usr) goto err_exit; - if (init_random() != SRP_OK) /* Only happens once */ - goto err_exit; - usr->hash_alg = alg; usr->ng = new_ng(ng_type, n_hex, g_hex); @@ -836,9 +766,9 @@ struct SRPUser *srp_user_new(SRP_HashAlgorithm alg, SRP_NGType ng_type, if (!usr->ng) goto err_exit; - usr->username = (char *)srp_alloc(ulen); - usr->username_verifier = (char *)srp_alloc(uvlen); - usr->password = (unsigned char *)srp_alloc(len_password); + usr->username = (char *)malloc(ulen); + usr->username_verifier = (char *)malloc(uvlen); + usr->password = (unsigned char *)malloc(len_password); usr->password_len = len_password; if (!usr->username || !usr->password || !usr->username_verifier) goto err_exit; @@ -859,13 +789,13 @@ err_exit: mpz_clear(usr->A); mpz_clear(usr->S); delete_ng(usr->ng); - srp_free(usr->username); - srp_free(usr->username_verifier); + free(usr->username); + free(usr->username_verifier); if (usr->password) { memset(usr->password, 0, usr->password_len); - srp_free(usr->password); + free(usr->password); } - srp_free(usr); + free(usr); } return 0; @@ -882,14 +812,14 @@ void srp_user_delete(struct SRPUser *usr) memset(usr->password, 0, usr->password_len); - srp_free(usr->username); - srp_free(usr->username_verifier); - srp_free(usr->password); + free(usr->username); + free(usr->username_verifier); + free(usr->password); - if (usr->bytes_A) srp_free(usr->bytes_A); + if (usr->bytes_A) free(usr->bytes_A); memset(usr, 0, sizeof(*usr)); - srp_free(usr); + free(usr); } } @@ -928,7 +858,7 @@ SRP_Result srp_user_start_authentication(struct SRPUser *usr, char **username, mpz_powm(usr->A, usr->ng->g, usr->a, usr->ng->N); *len_A = mpz_num_bytes(usr->A); - *bytes_A = (unsigned char *)srp_alloc(*len_A); + *bytes_A = (unsigned char *)malloc(*len_A); if (!*bytes_A) goto error_and_exit; diff --git a/src/util/srp.h b/src/util/srp.h index ac66dc936..fc4d2dc89 100644 --- a/src/util/srp.h +++ b/src/util/srp.h @@ -79,15 +79,6 @@ typedef enum { SRP_OK, } SRP_Result; -/* Sets the memory functions used by srp. - * Note: this doesn't set the memory functions used by gmp, - * but it is supported to have different functions for srp and gmp. - * Don't call this after you have already allocated srp structures. - */ -void srp_set_memory_functions( - void *(*new_srp_alloc) (size_t), - void *(*new_srp_realloc) (void *, size_t), - void (*new_srp_free) (void *)); /* Out: bytes_v, len_v * diff --git a/src/util/stream.h b/src/util/stream.h index 2e61b46d2..620ad74ba 100644 --- a/src/util/stream.h +++ b/src/util/stream.h @@ -20,10 +20,10 @@ with this program; if not, write to the Free Software Foundation, Inc., #pragma once #include -#include +#include #include -template > +template > class StringStreamBuffer : public std::streambuf { public: StringStreamBuffer(Emitter emitter) : m_emitter(emitter) { @@ -38,19 +38,19 @@ public: void push_back(char c) { if (c == '\n' || c == '\r') { if (buffer_index) - m_emitter(std::string(buffer, buffer_index)); + m_emitter(std::string_view(buffer, buffer_index)); buffer_index = 0; } else { buffer[buffer_index++] = c; if (buffer_index >= BufferLength) { - m_emitter(std::string(buffer, buffer_index)); + m_emitter(std::string_view(buffer, buffer_index)); buffer_index = 0; } } } std::streamsize xsputn(const char *s, std::streamsize n) { - for (int i = 0; i < n; ++i) + for (std::streamsize i = 0; i < n; ++i) push_back(s[i]); return n; } diff --git a/src/util/string.cpp b/src/util/string.cpp index 0c896e6ec..74a360266 100644 --- a/src/util/string.cpp +++ b/src/util/string.cpp @@ -670,23 +670,26 @@ std::string wrap_rows(std::string_view from, unsigned row_len, bool has_color_co * before filling it again. */ -static void translate_all(const std::wstring &s, size_t &i, +static void translate_all(std::wstring_view s, size_t &i, Translations *translations, std::wstring &res); -static void translate_string(const std::wstring &s, Translations *translations, +static void translate_string(std::wstring_view s, Translations *translations, const std::wstring &textdomain, size_t &i, std::wstring &res) { - std::wostringstream output; std::vector args; int arg_number = 1; + + // Re-assemble the template. + std::wstring output; + output.reserve(s.length()); while (i < s.length()) { // Not an escape sequence: just add the character. if (s[i] != '\x1b') { - output.put(s[i]); + output += s[i]; // The character is a literal '@'; add it twice // so that it is not mistaken for an argument. if (s[i] == L'@') - output.put(L'@'); + output += L'@'; ++i; continue; } @@ -733,12 +736,12 @@ static void translate_string(const std::wstring &s, Translations *translations, args.push_back(arg); continue; } - output.put(L'@'); - output << arg_number; + output += L'@'; + output += std::to_wstring(arg_number); ++arg_number; std::wstring arg; translate_all(s, i, translations, arg); - args.push_back(arg); + args.push_back(std::move(arg)); } else { // This is an escape sequence *inside* the template string to translate itself. // This should not happen, show an error message. @@ -747,21 +750,18 @@ static void translate_string(const std::wstring &s, Translations *translations, } } - std::wstring toutput; // Translate the template. - if (translations != nullptr) - toutput = translations->getTranslation( - textdomain, output.str()); - else - toutput = output.str(); + const std::wstring &toutput = translations ? + translations->getTranslation(textdomain, output) : output; // Put back the arguments in the translated template. - std::wostringstream result; size_t j = 0; + res.clear(); + res.reserve(toutput.length()); while (j < toutput.length()) { // Normal character, add it to output and continue. if (toutput[j] != L'@' || j == toutput.length() - 1) { - result.put(toutput[j]); + res += toutput[j]; ++j; continue; } @@ -769,7 +769,7 @@ static void translate_string(const std::wstring &s, Translations *translations, ++j; // Literal escape for '@'. if (toutput[j] == L'@') { - result.put(L'@'); + res += L'@'; ++j; continue; } @@ -778,16 +778,15 @@ static void translate_string(const std::wstring &s, Translations *translations, int arg_index = toutput[j] - L'1'; ++j; if (0 <= arg_index && (size_t)arg_index < args.size()) { - result << args[arg_index]; + res += args[arg_index]; } else { // This is not allowed: show an error message errorstream << "Ignoring out-of-bounds argument escape sequence in translation" << std::endl; } } - res = result.str(); } -static void translate_all(const std::wstring &s, size_t &i, +static void translate_all(std::wstring_view s, size_t &i, Translations *translations, std::wstring &res) { res.clear(); @@ -849,7 +848,7 @@ static void translate_all(const std::wstring &s, size_t &i, } // Translate string server side -std::wstring translate_string(const std::wstring &s, Translations *translations) +std::wstring translate_string(std::wstring_view s, Translations *translations) { size_t i = 0; std::wstring res; @@ -858,7 +857,7 @@ std::wstring translate_string(const std::wstring &s, Translations *translations) } // Translate string client side -std::wstring translate_string(const std::wstring &s) +std::wstring translate_string(std::wstring_view s) { #ifdef SERVER return translate_string(s, nullptr); @@ -950,6 +949,53 @@ std::string sanitizeDirName(std::string_view str, std::string_view optional_pref return wide_to_utf8(safe_name); } +template +void remove_indexed(std::string &s, F pred) +{ + size_t j = 0; + for (size_t i = 0; i < s.length();) { + if (pred(s, i++)) + j++; + if (i != j) + s[j] = s[i]; + } + s.resize(j); +} + +std::string sanitize_untrusted(std::string_view str, bool keep_escapes) +{ + // truncate on NULL + std::string s{str.substr(0, str.find('\0'))}; + + // remove control characters except tab, feed and escape + s.erase(std::remove_if(s.begin(), s.end(), [] (unsigned char c) { + return c < 9 || (c >= 13 && c < 27) || (c >= 28 && c < 32); + }), s.end()); + + if (!keep_escapes) { + s.erase(std::remove(s.begin(), s.end(), '\x1b'), s.end()); + return s; + } + // Note: Minetest escapes generally just look like \x1b# or \x1b(###) + // where # is a single character and ### any number of characters. + // Here we additionally assume that the first character in the sequence + // is [A-Za-z], to enable us to filter foreign types of escapes that might + // be unsafe e.g. ANSI escapes in a terminal. + const auto &check = [] (char c) { + return (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'); + }; + remove_indexed(s, [&check] (const std::string &s, size_t i) { + if (s[i] != '\x1b') + return true; + if (i+1 >= s.length()) + return false; + if (s[i+1] == '(') + return i+2 < s.length() && check(s[i+2]); // long-form escape + else + return check(s[i+1]); // short-form escape + }); + return s; +} void safe_print_string(std::ostream &os, std::string_view str) { diff --git a/src/util/string.h b/src/util/string.h index bddbc62ce..aae1167b6 100644 --- a/src/util/string.h +++ b/src/util/string.h @@ -631,11 +631,11 @@ std::vector > split(const std::basic_string &s, T delim) return tokens; } -std::wstring translate_string(const std::wstring &s, Translations *translations); +std::wstring translate_string(std::wstring_view s, Translations *translations); -std::wstring translate_string(const std::wstring &s); +std::wstring translate_string(std::wstring_view s); -inline std::wstring unescape_translate(const std::wstring &s) { +inline std::wstring unescape_translate(std::wstring_view s) { return unescape_enriched(translate_string(s)); } @@ -761,6 +761,16 @@ inline irr::core::stringw utf8_to_stringw(std::string_view input) */ std::string sanitizeDirName(std::string_view str, std::string_view optional_prefix); +/** + * Sanitize an untrusted string (e.g. from the network). This will get strip + * control characters and (optionally) any MT-style escape sequences too. + * Note that they won't be removed cleanly but rather just broken, unlike with + * unescape_enriched. + * Line breaks and UTF-8 is permitted. + */ +[[nodiscard]] +std::string sanitize_untrusted(std::string_view str, bool keep_escapes = true); + /** * Prints a sanitized version of a string without control characters. * '\t' and '\n' are allowed, as are UTF-8 control characters (e.g. RTL). diff --git a/src/util/tracy_wrapper.h b/src/util/tracy_wrapper.h new file mode 100644 index 000000000..0c61ba837 --- /dev/null +++ b/src/util/tracy_wrapper.h @@ -0,0 +1,200 @@ +/* +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. +*/ + +/* + * Wrapper for , so that we can use Tracy's macros without + * having it as mandatory dependency. + * + * For annotations that you don't intend to upstream, you can also include + * directly (which also works in irr/). + */ + +#pragma once + +#include "config.h" +#include "util/basic_macros.h" + +#if BUILD_WITH_TRACY + +#include // IWYU pragma: export + +#else + +// Copied from Tracy.hpp + +#define TracyNoop + +#define ZoneNamed(x,y) +#define ZoneNamedN(x,y,z) +#define ZoneNamedC(x,y,z) +#define ZoneNamedNC(x,y,z,w) + +#define ZoneTransient(x,y) +#define ZoneTransientN(x,y,z) + +#define ZoneScoped +#define ZoneScopedN(x) +#define ZoneScopedC(x) +#define ZoneScopedNC(x,y) + +#define ZoneText(x,y) +#define ZoneTextV(x,y,z) +#define ZoneTextF(x,...) +#define ZoneTextVF(x,y,...) +#define ZoneName(x,y) +#define ZoneNameV(x,y,z) +#define ZoneNameF(x,...) +#define ZoneNameVF(x,y,...) +#define ZoneColor(x) +#define ZoneColorV(x,y) +#define ZoneValue(x) +#define ZoneValueV(x,y) +#define ZoneIsActive false +#define ZoneIsActiveV(x) false + +#define FrameMark +#define FrameMarkNamed(x) +#define FrameMarkStart(x) +#define FrameMarkEnd(x) + +#define FrameImage(x,y,z,w,a) + +#define TracyLockable( type, varname ) type varname +#define TracyLockableN( type, varname, desc ) type varname +#define TracySharedLockable( type, varname ) type varname +#define TracySharedLockableN( type, varname, desc ) type varname +#define LockableBase( type ) type +#define SharedLockableBase( type ) type +#define LockMark(x) (void)x +#define LockableName(x,y,z) + +#define TracyPlot(x,y) +#define TracyPlotConfig(x,y,z,w,a) + +#define TracyMessage(x,y) +#define TracyMessageL(x) +#define TracyMessageC(x,y,z) +#define TracyMessageLC(x,y) +#define TracyAppInfo(x,y) + +#define TracyAlloc(x,y) +#define TracyFree(x) +#define TracySecureAlloc(x,y) +#define TracySecureFree(x) + +#define TracyAllocN(x,y,z) +#define TracyFreeN(x,y) +#define TracySecureAllocN(x,y,z) +#define TracySecureFreeN(x,y) + +#define ZoneNamedS(x,y,z) +#define ZoneNamedNS(x,y,z,w) +#define ZoneNamedCS(x,y,z,w) +#define ZoneNamedNCS(x,y,z,w,a) + +#define ZoneTransientS(x,y,z) +#define ZoneTransientNS(x,y,z,w) + +#define ZoneScopedS(x) +#define ZoneScopedNS(x,y) +#define ZoneScopedCS(x,y) +#define ZoneScopedNCS(x,y,z) + +#define TracyAllocS(x,y,z) +#define TracyFreeS(x,y) +#define TracySecureAllocS(x,y,z) +#define TracySecureFreeS(x,y) + +#define TracyAllocNS(x,y,z,w) +#define TracyFreeNS(x,y,z) +#define TracySecureAllocNS(x,y,z,w) +#define TracySecureFreeNS(x,y,z) + +#define TracyMessageS(x,y,z) +#define TracyMessageLS(x,y) +#define TracyMessageCS(x,y,z,w) +#define TracyMessageLCS(x,y,z) + +#define TracySourceCallbackRegister(x,y) +#define TracyParameterRegister(x,y) +#define TracyParameterSetup(x,y,z,w) +#define TracyIsConnected false +#define TracyIsStarted false +#define TracySetProgramName(x) + +#define TracyFiberEnter(x) +#define TracyFiberEnterHint(x,y) +#define TracyFiberLeave + +#endif + + +// Helper for making sure frames end in all possible control flow path +class FrameMarker +{ + const char *m_name; + bool m_started = false; + +public: + FrameMarker(const char *name) : m_name(name) {} + + ~FrameMarker() { end(); } + + DISABLE_CLASS_COPY(FrameMarker) + + FrameMarker(FrameMarker &&other) noexcept : + m_name(other.m_name), m_started(other.m_started) + { + other.m_started = false; + } + + FrameMarker &operator=(FrameMarker &&other) noexcept + { + if (&other != this) { + end(); + m_name = other.m_name; + m_started = other.m_started; + other.m_started = false; + } + return *this; + } + + FrameMarker &&started() && + { + if (!m_started) { + FrameMarkStart(m_name); + m_started = true; + } + return std::move(*this); + } + + void start() + { + // no move happens, because we drop the reference + (void)std::move(*this).started(); + } + + void end() + { + if (m_started) { + m_started = false; + FrameMarkEnd(m_name); + } + } +}; diff --git a/src/voxel.h b/src/voxel.h index 286e09abe..882a59b77 100644 --- a/src/voxel.h +++ b/src/voxel.h @@ -392,36 +392,36 @@ public: VoxelArea voxel_area(p); addArea(voxel_area); - if (m_flags[m_area.index(p)] & VOXELFLAG_NO_DATA) { - /*dstream<<"EXCEPT: VoxelManipulator::getNode(): " - <<"p=("<")`. -Optionally, you can also define additional helper functions `FS`, `NS` and `NFS` if needed. - -Here is the list of all recognized function names. All functions return a string. - -* `S`: Returns translation of input. See Minetest's `lua_api.md`. You should always have at - least this function defined. -* `NS`: Returns the input. Useful to make a string visible to the script without actually - translating it here. -* `FS`: Same as `S`, but returns a formspec-escaped version of the translation of the input. - Supported for convenience. -* `NFS`: Returns a formspec-escaped version of the input, but not translated. - Supported for convenience. - -Here is the boilerplate code you have to add at the top of your source code file: - - local S = minetest.get_translator("") - local NS = function(s) return s end - local FS = function(...) return minetest.formspec_escape(S(...)) end - local NFS = function(s) return minetest.formspec_escape(s) end - -Replace `` above and optionally delete `NS`, `FS` and/or `NFS` if you don't need -them. - -### Preparing the strings - -This script can detect translatable strings of the notations listed below. -Additional function arguments followed after a literal string are ignored. - -* `S("literal")`: one literal string enclosed by the delimiters - `"..."`, `'...'` or `[[...]]` -* `S("foo " .. 'bar ' .. "baz")`: concatenation of multiple literal strings. Line - breaks are accepted. - -The `S` may also be `NS`, `FS` and `NFS` (see above). - -Undetectable notations: - -* `S"literal"`: omitted function brackets -* `S(variable)`: requires the use of `NS`. See example below. -* `S("literal " .. variable)`: non-static content. - Use placeholders (`@1`, ...) for variable text. -* Any literal string concatenation using `[[...]]` - -### A minimal example - -This minimal code example sends "Hello world!" to all players, but translated according to -each player's language: - - local S = minetest.get_translator("example") - minetest.chat_send_all(S("Hello world!")) - -### How to use `NS` - -The reason why `NS` exists is for cases like this: Sometimes, you want to define a list of -strings to they can be later output in a function. Like so: - - local fruit = { "Apple", "Orange", "Pear" } - local function return_fruit(fruit_id) - return fruit[fruit_id] - end - -If you want to translate the fruit names when `return_fruit` is run, but have the -*untranslated* fruit names in the `fruit` table stored, this is where `NS` will help. -It will show the script the string without Minetest translating it. The script could be made -translatable like this: - - local fruit = { NS("Apple"), NS("Orange"), NS("Pear") } - local function return_fruit(fruit_id) - return S(fruit[fruit_id]) - end - -## How to run the script - -First, change the working directory to the directory of the mod you want the files to be -updated. From this directory, run the script. - -When you run the script, it will update the `template.txt` and any `*.tr` files present -in that mod's `/locale` folder. If the `/locale` folder or `template.txt` file don't -exist yet, they will be created. - -This script will also work in the root directory of a modpack. It will run on each mod -inside the modpack in that situation. Alternatively, you can run the script to update -the files of all mods in subdirectories with the `-r` option, which is useful to update -the locale files in an entire game. - -It has the following command line options: - - mod_translation_updater.py [OPTIONS] [PATHS...] - - --help, -h: prints this help message - --recursive, -r: run on all subfolders of paths given - --old-file, -o: create copies of files before updating them, named `.old` - --break-long-lines, -b: add extra line-breaks before and after long strings - --print-source, -p: add comments denoting the source file - --verbose, -v: add output information - --truncate-unused, -t: delete unused strings from files - -## Script output - -This section explains how the output of this script works, roughly. This script aims to make -the output more or less stable, i.e. given identical source files and arguments, the script -should produce the same output. - -### Textdomain - -The script will add (if not already present) a `# textdomain: ` at the top, where -`` is identical to the mod directory name. If a `# textdomain` already exists, it -will be moved to the top, with the textdomain name being left intact (even if it differs -from the mod name). - -**Note:** If there are multiple `# textdomain:` lines in the file, all of them except the -first one will be deleted. This script only supports one textdomain per `*.tr` file. - -### Strings - -The order of the strings is deterministic and follows certain rules: First, all strings are -grouped by the source `*.lua` file. The files are loaded in alphabetical order. In case of -subdirectories, the mod's root directory takes precedence, then the directories are traversed -in top-down alphabetical order. Second, within each file, the strings are then inserted in -the same order as they appear in the source code. - -If a string appears multiple times in the source code, the string will be added when it was -first found only. - -Don't bother to manually organize the order of the lines in the file yourself because the -script will just reorder everything. - -If the mod's source changes in such a way that a line with an existing translation or comment -is no longer present, and `--truncate-unused` or `-t` are *not* provided as arguments, the -unused line will be moved to the bottom of the translation file under a special comment: - - ##### not used anymore ##### - -This allows for old translations and comments to be reused with new lines where appropriate. -This script doesn't attempt "fuzzy" matching of old strings to new, so even a single change -of punctuation or spelling will put strings into the "not used anymore" section and require -manual re-association with the new string. - -### Comments - -The script will preserve any comments in an existing `template.txt` or the various `*.tr` -files, associating them with the line that follows them. So for example: - - # This comment pertains to Some Text - Some text= - - # Multi-line comments - # are also supported - Text as well= - -The script will also propagate comments from an existing `template.txt` to all `*.tr` -files and write it above existing comments (if exist). - -There are also a couple of special comments that this script gives special treatment to. - -#### Source file comments - -If `--print-source` or `-p` is provided as option, the script will insert comments to show -from which file or files each string has come from. -This is the syntax of such a comment: - - ##[ file.lua ]## - -This comment means that all lines following it belong to the file `file.lua`. In the special -case the same string was found in multiple files, multiple file name comments will be used in -row, like so: - - ##[ file1.lua ]## - ##[ file2.lua ]## - ##[ file3.lua ]## - example=Beispiel - -This means the string "example" was found in the files `file1.lua`, `file2.lua` and -`file3.lua`. - -If the print source option is not provided, these comments will disappear. - -Note that all comments of the form `##[something]##` will be treated as "source file" comments -so they may be moved, changed or removed by the script at will. - -#### "not used anymore" section - -By default, the exact comment `##### not used anymore #####` will be automatically added to -mark the beginning of a section where old/unused strings will go. Leave the exact wording of -this comment intact so this line can be moved (or removed) properly in subsequent runs. - -## Updating `builtin` - -To update the `builtin` component of Minetest, change the working directory to `builtin` of -the Minetest source code repository, then run this script from there. diff --git a/util/buildbot/common.sh b/util/buildbot/common.sh index a7fa3b5d3..ff3aef2e9 100644 --- a/util/buildbot/common.sh +++ b/util/buildbot/common.sh @@ -5,17 +5,17 @@ CORE_NAME=minetest ogg_version=1.3.5 openal_version=1.23.1 vorbis_version=1.3.7 -curl_version=8.5.0 +curl_version=8.9.1 gettext_version=0.20.2 -freetype_version=2.13.2 -sqlite3_version=3.44.2 -luajit_version=20240125 +freetype_version=2.13.3 +sqlite3_version=3.46.1 +luajit_version=20240905 leveldb_version=1.23 zlib_version=1.3.1 -zstd_version=1.5.5 +zstd_version=1.5.6 libjpeg_version=3.0.1 -libpng_version=1.6.40 -sdl2_version=2.30.3 +libpng_version=1.6.43 +sdl2_version=2.30.7 download () { local url=$1 @@ -80,7 +80,7 @@ _dlls () { add_cmake_libs () { cmake_args+=( - -DPNG_LIBRARY=$libdir/libpng/lib/libpng.dll.a + -DPNG_LIBRARY=$libdir/libpng/lib/libpng16.dll.a -DPNG_PNG_INCLUDE_DIR=$libdir/libpng/include -DPNG_DLL="$(_dlls $libdir/libpng/bin/*)" diff --git a/util/buildbot/download_toolchain.sh b/util/buildbot/download_toolchain.sh index 3097f803b..d7d7afbe2 100755 --- a/util/buildbot/download_toolchain.sh +++ b/util/buildbot/download_toolchain.sh @@ -10,8 +10,9 @@ fi # * Clang + LLD + libc++ instead of GCC + binutils + stdc++ # * Mingw-w64 with UCRT enabled and winpthreads support # why are we avoiding GCC? -> Thread Local Storage (TLS) is totally broken -name=llvm-mingw-20231128-ucrt-ubuntu-20.04-x86_64.tar.xz -wget "https://github.com/mstorsjo/llvm-mingw/releases/download/20231128/$name" -O "$name" +date=20240619 +name=llvm-mingw-${date}-ucrt-ubuntu-20.04-x86_64.tar.xz +wget "https://github.com/mstorsjo/llvm-mingw/releases/download/$date/$name" -O "$name" sha256sum -w -c <(grep -F "$name" "$topdir/sha256sums.txt") tar -xaf "$name" -C "$1" --strip-components=1 rm -f "$name" diff --git a/util/buildbot/sha256sums.txt b/util/buildbot/sha256sums.txt index 0587e6ea1..310ab6a6e 100644 --- a/util/buildbot/sha256sums.txt +++ b/util/buildbot/sha256sums.txt @@ -1,7 +1,7 @@ -753dc38c591e078eae6a0a6b25f69826211256f444f3691a170670d8a12988f9 curl-8.5.0-win32.zip -aa86abc3eb054d74d5fe15996f281cf84230a61b4ab7b3a702ab7dbb71e1203f curl-8.5.0-win64.zip -3e9d7bbca953b96dfd65acc28baaa87e8881aab29809ba03b9c9aefe3d071189 freetype-2.13.2-win32.zip -acf901e93aedbcfa92eb3aab1def252676af845b1747ca5c3e7c5866576168cc freetype-2.13.2-win64.zip +627d4111ee655a68e806251974ba9d0337efac19cb07d499689c44c328a23775 curl-8.9.1-win32.zip +ed906726531388441d7f93fc0a1c9d567d476fbc8cfbae19dc5a0f7288949abe curl-8.9.1-win64.zip +7a94b9e69d4872489228ad7cca6a16117a433f809d9b20fa3e44e1616a33c5d7 freetype-2.13.3-win32.zip +f7d882319790f72ebc8eff00526388432bd26bff3a56c4ef5cce0a829bbbef0d freetype-2.13.3-win64.zip 41b10766de2773f0f0851fde16b363024685e0397f4bb2e5cd2a7be196960a01 gettext-0.20.2-win32.zip 1ceed167ff16fea944f76ab6ea2969160c71a67419259b17c9c523e7a01eb883 gettext-0.20.2-win64.zip 53dfd31285f470fcf0dca88217c5cf9c557729af6d103afae5936e72ddc38d3c libjpeg-3.0.1-win32.zip @@ -10,20 +10,20 @@ f54e9a577e2db47ed28f4a01e74181d2c607627c551d30f48263e01b59e84f67 libleveldb-1.2 2f039848a4e6c05a2347fe5a7fa63c430dd08d1bc88235645a863c859e14f5f8 libleveldb-1.23-win64.zip 0df94afb8efa361cceb132ecf9491720afbc45ba844a7b1c94607295829b53ca libogg-1.3.5-win32.zip 5c4acb4c99429a04b5e69650719b2eb17616bf52837d2372a0f859952eebce48 libogg-1.3.5-win64.zip -6baf4e819bfb3573760524b5dc9a04b5e479090d6d2046b86cf39a3107c0071f libpng-1.6.40-win32.zip -c02e029f01fce44baea7f4aecfd2564bd8a03507c0c6af8b03339ae0452c8b7d libpng-1.6.40-win64.zip +fb61536bfce414fdecb30dfbdc8b26e87969ee30b420f5fb8542f7573a1c1d12 libpng-1.6.43-win32.zip +ccd0b8ecbaa07028067a99dd4314ec7799445f80a28ddc86fa3f6bf25700177b libpng-1.6.43-win64.zip 456ece10a2be4247b27fbe88f88ddd54aae604736a6b76ba9a922b602fe40f40 libvorbis-1.3.7-win32.zip 57f4db02da00556895bb63fafa6e46b5f7dac87c25fde27af4315f56a1aa7a86 libvorbis-1.3.7-win64.zip -0f21ff3be90311092fe32e0e30878ef3ae9d9437b8d9ac25ef279e0d84e9bb8e llvm-mingw-20231128-ucrt-ubuntu-20.04-x86_64.tar.xz -da6ad10632cf172992158e9ea0977a87914b5d5de93a972c3430b6a412237556 luajit-20240125-win32.zip -2b1dabe83d478b398cf9226d96de7fa62c973365c4aea70d27ba5782fb49d2d0 luajit-20240125-win64.zip +27d33157cc252c29ad6f777a96a0d94176fea1b534ff09b5071485def143b90e llvm-mingw-20240619-ucrt-ubuntu-20.04-x86_64.tar.xz +5380bbb0bfd4482b5774e4f7c0ff58cc0857477b88a88a178316a464d3459cf1 luajit-20240905-win32.zip +5805c75c61bf948f790e6f845adc94a4946e43ab8a78c5b5b441550f8a665d2c luajit-20240905-win64.zip e2443451fe5c2066eb564c64b8a1762738a88b7fd749c8b5907fed45c785497b openal-soft-1.23.1-win32.zip cb041445a118469caefbad2647470cb8571c8337bce2adc07634011ab5625417 openal-soft-1.23.1-win64.zip -574e0847e622ff09ab23e2b22b77685a2ab6ee43de3e2932f3e8a14a4d7b9338 sdl2-2.30.3-win32.zip -6127afdfc7b6a4ade8caf9a7267748ffea974f729866dd5be96c7a69d2f0fee7 sdl2-2.30.3-win64.zip -326701086a0ed66e09a9f3ec4d971654c13b6bd79cfdd079c947ecdcd6409525 sqlite3-3.44.2-win32.zip -b2d474e3625f8f426b6cc5c0ecac831a1de46f7d1027bf4a9f6267b0b0411d42 sqlite3-3.44.2-win64.zip +af09a54f1f5d75ef6e1bf63662489ca57d44b6b522446638afe35e59b8456a3c sdl2-2.30.7-win32.zip +613abc34a84ed2c3b050314b340ba7e675879e8ed7848e6a28cd9c50262a33b0 sdl2-2.30.7-win64.zip +9685857ae0b418068ad4324e3711121bda97488d19235a0e68a6060162e014d7 sqlite3-3.46.1-win32.zip +7e2990619b1fd1d5ed654d1df77ea809d4332c2e914ea8bba53b2cf5acdf10ff sqlite3-3.46.1-win64.zip 8af10515d57dbfee5d2106cd66cafa2adeb4270d4c6047ccbf7e8b5d2d50681c zlib-1.3.1-win32.zip ad43f5d23052590c65633530743e5d622cc76b33c109072e6fd7b487aff56bca zlib-1.3.1-win64.zip -3564dabbe17ec4ecae1fb9a78fe48d9f7c71e2b1166456f6ee27e52fd9c84357 zstd-1.5.5-win32.zip -e61b1f327ce2d836d1f8ca00c40ac77d3ab5309135851c98229bbdf82b060ae5 zstd-1.5.5-win64.zip +e1bd36f6da039ee8c1694509f379a5023c05d6c90905a2cbb424f0395167570a zstd-1.5.6-win32.zip +f65b75b04b00f6bda859a7c60667f735c664a893bf7796b38393c16cc40a1a82 zstd-1.5.6-win64.zip diff --git a/util/bump_version.sh b/util/bump_version.sh index 82895f768..699bbcf77 100755 --- a/util/bump_version.sh +++ b/util/bump_version.sh @@ -16,20 +16,18 @@ prompt_for() { } # Reads current versions -# out: VERSION_MAJOR VERSION_MINOR VERSION_PATCH VERSION_IS_DEV CURRENT_VERSION ANDROID_VERSION_CODE +# out: VERSION_MAJOR VERSION_MINOR VERSION_PATCH VERSION_IS_DEV CURRENT_VERSION read_versions() { VERSION_MAJOR=$(grep -oE '^set\(VERSION_MAJOR [0-9]+\)$' CMakeLists.txt | tr -dC 0-9) VERSION_MINOR=$(grep -oE '^set\(VERSION_MINOR [0-9]+\)$' CMakeLists.txt | tr -dC 0-9) VERSION_PATCH=$(grep -oE '^set\(VERSION_PATCH [0-9]+\)$' CMakeLists.txt | tr -dC 0-9) VERSION_IS_DEV=$(grep -oE '^set\(DEVELOPMENT_BUILD [A-Z]+\)$' CMakeLists.txt) - ANDROID_VERSION_CODE=$(grep -oE '\("versionCode", [0-9]+\)' android/build.gradle | tr -dC 0-9) # Make sure they all exist [ -n "$VERSION_MAJOR" ] [ -n "$VERSION_MINOR" ] [ -n "$VERSION_PATCH" ] [ -n "$VERSION_IS_DEV" ] - [ -n "$ANDROID_VERSION_CODE" ] if echo "$VERSION_IS_DEV" | grep -q ' TRUE'; then VERSION_IS_DEV=1 @@ -39,7 +37,6 @@ read_versions() { CURRENT_VERSION="$VERSION_MAJOR.$VERSION_MINOR.$VERSION_PATCH" echo "Current Minetest version: $CURRENT_VERSION" - echo "Current Android version code: $ANDROID_VERSION_CODE" } # Retrieves protocol version from header @@ -49,18 +46,6 @@ read_proto_ver() { git show "$ref":src/network/networkprotocol.h | grep -oE 'LATEST_PROTOCOL_VERSION [0-9]+' | tr -dC 0-9 } -## Prompts for new android version code -# in: ANDROID_VERSION_CODE -# out: NEW_ANDROID_VERSION_CODE -bump_android_ver() { - # +1 for ARM and +1 for ARM64 APKs - NEW_ANDROID_VERSION_CODE=$(expr $ANDROID_VERSION_CODE + 2) - NEW_ANDROID_VERSION_CODE=$(prompt_for "Set android version code" '[0-9]+' $NEW_ANDROID_VERSION_CODE) - - echo - echo "New android version code: $NEW_ANDROID_VERSION_CODE" -} - ## Prompts for new version # in: VERSION_{MAJOR,MINOR,PATCH} DO_PATCH_REL # out: NEXT_VERSION NEXT_VERSION_{MAJOR,MINOR,PATCH} @@ -108,14 +93,6 @@ set_dev_build() { git add -f CMakeLists.txt android/build.gradle } -## Writes new android version code -# in: NEW_ANDROID_VERSION_CODE -write_android_version() { - sed -i -re "s/\"versionCode\", [0-9]+/\"versionCode\", $NEW_ANDROID_VERSION_CODE/" android/build.gradle - - git add -f android/build.gradle -} - ## Writes new version to the right files # in: NEXT_VERSION NEXT_VERSION_{MAJOR,MINOR,PATCH} write_new_version() { @@ -142,10 +119,10 @@ perform_release() { local release_version=$1 RELEASE_DATE=$(date +%Y-%m-%d) - sed -i '/\ 5.7.1 (new tag) - bump_android_ver - write_android_version bump_version write_new_version diff --git a/util/gather_git_credits.py b/util/gather_git_credits.py index 7bbcf402d..cb0f42dde 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.6.0..HEAD" +REVS_ACTIVE = "5.7.0..HEAD" # all time, for "Previous Contributors" REVS_PREVIOUS = "HEAD" @@ -46,7 +46,8 @@ def load(revs): p.wait() # Some authors duplicate? Don't add manual workarounds here, edit the .mailmap! - for author in ("updatepo.sh ", "Weblate <42@minetest.ru>"): + for author in ("updatepo.sh ", "Weblate <42@minetest.ru>", + "import ", "minetest "): points.pop(author, None) return points diff --git a/util/mod_translation_updater.py b/util/mod_translation_updater.py deleted file mode 100755 index d23b96e59..000000000 --- a/util/mod_translation_updater.py +++ /dev/null @@ -1,538 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Script to generate Minetest translation template files and update -# translation files. -# -# Copyright (C) 2019 Joachim Stolberg, 2020 FaceDeer, 2020 Louis Royer, -# 2023 Wuzzy. -# License: LGPLv2.1 or later (see LICENSE file for details) - -import os, fnmatch, re, shutil, errno -from sys import argv as _argv -from sys import stderr as _stderr - -# Running params -params = {"recursive": False, - "help": False, - "verbose": False, - "folders": [], - "old-file": False, - "break-long-lines": False, - "print-source": False, - "truncate-unused": False, -} -# Available CLI options -options = {"recursive": ['--recursive', '-r'], - "help": ['--help', '-h'], - "verbose": ['--verbose', '-v'], - "old-file": ['--old-file', '-o'], - "break-long-lines": ['--break-long-lines', '-b'], - "print-source": ['--print-source', '-p'], - "truncate-unused": ['--truncate-unused', '-t'], -} - -# Strings longer than this will have extra space added between -# them in the translation files to make it easier to distinguish their -# beginnings and endings at a glance -doublespace_threshold = 80 - -# These symbols mark comment lines showing the source file name. -# A comment may look like "##[ init.lua ]##". -symbol_source_prefix = "##[" -symbol_source_suffix = "]##" - -# comment to mark the section of old/unused strings -comment_unused = "##### not used anymore #####" - -def set_params_folders(tab: list): - '''Initialize params["folders"] from CLI arguments.''' - # Discarding argument 0 (tool name) - for param in tab[1:]: - stop_param = False - for option in options: - if param in options[option]: - stop_param = True - break - if not stop_param: - params["folders"].append(os.path.abspath(param)) - -def set_params(tab: list): - '''Initialize params from CLI arguments.''' - for option in options: - for option_name in options[option]: - if option_name in tab: - params[option] = True - break - -def print_help(name): - '''Prints some help message.''' - print(f'''SYNOPSIS - {name} [OPTIONS] [PATHS...] -DESCRIPTION - {', '.join(options["help"])} - prints this help message - {', '.join(options["recursive"])} - run on all subfolders of paths given - {', '.join(options["old-file"])} - create *.old files - {', '.join(options["break-long-lines"])} - add extra line breaks before and after long strings - {', '.join(options["print-source"])} - add comments denoting the source file - {', '.join(options["verbose"])} - add output information - {', '.join(options["truncate-unused"])} - delete unused strings from files -''') - -def main(): - '''Main function''' - set_params(_argv) - set_params_folders(_argv) - if params["help"]: - print_help(_argv[0]) - else: - # Add recursivity message - print("Running ", end='') - if params["recursive"]: - print("recursively ", end='') - # Running - if len(params["folders"]) >= 2: - print("on folder list:", params["folders"]) - for f in params["folders"]: - if params["recursive"]: - run_all_subfolders(f) - else: - update_folder(f) - elif len(params["folders"]) == 1: - print("on folder", params["folders"][0]) - if params["recursive"]: - run_all_subfolders(params["folders"][0]) - else: - update_folder(params["folders"][0]) - else: - print("on folder", os.path.abspath("./")) - if params["recursive"]: - run_all_subfolders(os.path.abspath("./")) - else: - update_folder(os.path.abspath("./")) - -# Compile pattern for matching lua function call -def compile_func_call_pattern(argument_pattern): - return re.compile( - # Look for beginning of file or anything that isn't a function identifier - r'(?:^|[\.=,{\(\s])' + - # Matches S, FS, NS, or NFS function call - r'N?F?S\s*' + - # The pattern to match argument - argument_pattern, - re.DOTALL) - -# Add parentheses around a pattern -def parenthesize_pattern(pattern): - return ( - # Start of argument: open parentheses and space (optional) - r'\(\s*' + - # The pattern to be parenthesized - pattern + - # End of argument or function call: space, comma, or close parentheses - r'[\s,\)]') - -# Quoted string -# Group 2 will be the string, group 1 and group 3 will be the delimiters (" or ') -# See https://stackoverflow.com/questions/46967465/regex-match-text-in-either-single-or-double-quote -pattern_lua_quoted_string = r'(["\'])((?:\\\1|(?:(?!\1)).)*)(\1)' - -# Double square bracket string (multiline) -pattern_lua_square_bracket_string = r'\[\[(.*?)\]\]' - -# Handles the " ... " or ' ... ' string delimiters -pattern_lua_quoted = compile_func_call_pattern(parenthesize_pattern(pattern_lua_quoted_string)) - -# Handles the [[ ... ]] string delimiters -pattern_lua_bracketed = compile_func_call_pattern(parenthesize_pattern(pattern_lua_square_bracket_string)) - -# Handles like pattern_lua_quoted, but for single parameter (without parentheses) -# See https://www.lua.org/pil/5.html for informations about single argument call -pattern_lua_quoted_single = compile_func_call_pattern(pattern_lua_quoted_string) - -# Same as pattern_lua_quoted_single, but for [[ ... ]] string delimiters -pattern_lua_bracketed_single = compile_func_call_pattern(pattern_lua_square_bracket_string) - -# Handles "concatenation" .. " of strings" -pattern_concat = re.compile(r'["\'][\s]*\.\.[\s]*["\']', re.DOTALL) - -# Handles a translation line in *.tr file. -# Group 1 is the source string left of the equals sign. -# Group 2 is the translated string, right of the equals sign. -pattern_tr = re.compile( - r'(.*)' # Source string - # the separating equals sign, if NOT preceded by @, unless - # that @ is preceded by another @ - r'(?:(?2.5 - if exc.errno == errno.EEXIST and os.path.isdir(path): - pass - else: raise - -# Converts the template dictionary to a text to be written as a file -# dKeyStrings is a dictionary of localized string to source file sets -# dOld is a dictionary of existing translations and comments from -# the previous version of this text -def strings_to_text(dkeyStrings, dOld, mod_name, header_comments, textdomain, templ = None): - # if textdomain is specified, insert it at the top - if textdomain != None: - lOut = [textdomain] # argument is full textdomain line - # otherwise, use mod name as textdomain automatically - else: - lOut = [f"# textdomain: {mod_name}"] - if templ is not None and templ[2] and (header_comments is None or not header_comments.startswith(templ[2])): - # header comments in the template file - lOut.append(templ[2]) - if header_comments is not None: - lOut.append(header_comments) - - dGroupedBySource = {} - - for key in dkeyStrings: - sourceList = list(dkeyStrings[key]) - sourceString = "\n".join(sourceList) - listForSource = dGroupedBySource.get(sourceString, []) - listForSource.append(key) - dGroupedBySource[sourceString] = listForSource - - lSourceKeys = list(dGroupedBySource.keys()) - lSourceKeys.sort() - for source in lSourceKeys: - localizedStrings = dGroupedBySource[source] - if params["print-source"]: - if lOut[-1] != "": - lOut.append("") - lOut.append(source) - for localizedString in localizedStrings: - val = dOld.get(localizedString, {}) - translation = val.get("translation", "") - comment = val.get("comment") - templ_comment = None - if templ: - templ_val = templ[0].get(localizedString, {}) - templ_comment = templ_val.get("comment") - if params["break-long-lines"] and len(localizedString) > doublespace_threshold and not lOut[-1] == "": - lOut.append("") - if templ_comment != None and templ_comment != "" and (comment is None or comment == "" or not comment.startswith(templ_comment)): - lOut.append(templ_comment) - if comment != None and comment != "" and not comment.startswith("# textdomain:"): - lOut.append(comment) - lOut.append(f"{localizedString}={translation}") - if params["break-long-lines"] and len(localizedString) > doublespace_threshold: - lOut.append("") - - unusedExist = False - if not params["truncate-unused"]: - for key in dOld: - if key not in dkeyStrings: - val = dOld[key] - translation = val.get("translation") - comment = val.get("comment") - # only keep an unused translation if there was translated - # text or a comment associated with it - if translation != None and (translation != "" or comment): - if not unusedExist: - unusedExist = True - lOut.append("\n\n" + comment_unused + "\n") - if params["break-long-lines"] and len(key) > doublespace_threshold and not lOut[-1] == "": - lOut.append("") - if comment != None: - lOut.append(comment) - lOut.append(f"{key}={translation}") - if params["break-long-lines"] and len(key) > doublespace_threshold: - lOut.append("") - return "\n".join(lOut) + '\n' - -# Writes a template.txt file -# dkeyStrings is the dictionary returned by generate_template -def write_template(templ_file, dkeyStrings, mod_name): - # read existing template file to preserve comments - existing_template = import_tr_file(templ_file) - - text = strings_to_text(dkeyStrings, existing_template[0], mod_name, existing_template[2], existing_template[3]) - mkdir_p(os.path.dirname(templ_file)) - with open(templ_file, "wt", encoding='utf-8') as template_file: - template_file.write(text) - -# Gets all translatable strings from a lua file -def read_lua_file_strings(lua_file): - lOut = [] - with open(lua_file, encoding='utf-8') as text_file: - text = text_file.read() - - strings = [] - - for s in pattern_lua_quoted_single.findall(text): - strings.append(s[1]) - for s in pattern_lua_bracketed_single.findall(text): - strings.append(s) - - # Only concatenate strings after matching - # single parameter call (without parantheses) - text = re.sub(pattern_concat, "", text) - - for s in pattern_lua_quoted.findall(text): - strings.append(s[1]) - for s in pattern_lua_bracketed.findall(text): - strings.append(s) - - for s in strings: - found_bad = pattern_bad_luastring.search(s) - if found_bad: - print("SYNTAX ERROR: Unescaped '@' in Lua string: " + s) - continue - s = s.replace('\\"', '"') - s = s.replace("\\'", "'") - s = s.replace("\n", "@n") - s = s.replace("\\n", "@n") - s = s.replace("=", "@=") - lOut.append(s) - return lOut - -# Gets strings from an existing translation file -# returns both a dictionary of translations -# and the full original source text so that the new text -# can be compared to it for changes. -# Returns also header comments in the third return value. -def import_tr_file(tr_file): - dOut = {} - text = None - in_header = True - header_comments = None - textdomain = None - if os.path.exists(tr_file): - with open(tr_file, "r", encoding='utf-8') as existing_file : - # save the full text to allow for comparison - # of the old version with the new output - text = existing_file.read() - existing_file.seek(0) - # a running record of the current comment block - # we're inside, to allow preceeding multi-line comments - # to be retained for a translation line - latest_comment_block = None - for line in existing_file.readlines(): - line = line.rstrip('\n') - # "##### not used anymore #####" comment - if line == comment_unused: - # Always delete the 'not used anymore' comment. - # It will be re-added to the file if neccessary. - latest_comment_block = None - if header_comments != None: - in_header = False - continue - # Comment lines - elif line.startswith("#"): - # Source file comments: ##[ file.lua ]## - if line.startswith(symbol_source_prefix) and line.endswith(symbol_source_suffix): - # This line marks the end of header comments. - if params["print-source"]: - in_header = False - # Remove those comments; they may be added back automatically. - continue - - # Store first occurance of textdomain - # discard all subsequent textdomain lines - if line.startswith("# textdomain:"): - if textdomain == None: - textdomain = line - continue - elif in_header: - # Save header comments (normal comments at top of file) - if not header_comments: - header_comments = line - else: - header_comments = header_comments + "\n" + line - else: - # Save normal comments - if line.startswith("# textdomain:") and textdomain == None: - textdomain = line - elif not latest_comment_block: - latest_comment_block = line - else: - latest_comment_block = latest_comment_block + "\n" + line - - continue - - match = pattern_tr.match(line) - if match: - # this line is a translated line - outval = {} - outval["translation"] = match.group(2) - if latest_comment_block: - # if there was a comment, record that. - outval["comment"] = latest_comment_block - latest_comment_block = None - in_header = False - - dOut[match.group(1)] = outval - return (dOut, text, header_comments, textdomain) - -# like os.walk but returns sorted filenames -def sorted_os_walk(folder): - tuples = [] - t = 0 - for root, dirs, files in os.walk(folder): - tuples.append( (root, dirs, files) ) - t = t + 1 - - tuples = sorted(tuples) - - paths_and_files = [] - f = 0 - - for tu in tuples: - root = tu[0] - dirs = tu[1] - files = tu[2] - files = sorted(files, key=str.lower) - for filename in files: - paths_and_files.append( (os.path.join(root, filename), filename) ) - f = f + 1 - return paths_and_files - -# Walks all lua files in the mod folder, collects translatable strings, -# and writes it to a template.txt file -# Returns a dictionary of localized strings to source file lists -# that can be used with the strings_to_text function. -def generate_template(folder, mod_name): - dOut = {} - paths_and_files = sorted_os_walk(folder) - for paf in paths_and_files: - fullpath_filename = paf[0] - filename = paf[1] - if fnmatch.fnmatch(filename, "*.lua"): - found = read_lua_file_strings(fullpath_filename) - if params["verbose"]: - print(f"{fullpath_filename}: {str(len(found))} translatable strings") - - for s in found: - sources = dOut.get(s, set()) - sources.add(os.path.relpath(fullpath_filename, start=folder)) - dOut[s] = sources - - if len(dOut) == 0: - return None - - # Convert source file set to list, sort it and add comment symbols. - # Needed because a set is unsorted and might result in unpredictable. - # output orders if any source string appears in multiple files. - for d in dOut: - sources = dOut.get(d, set()) - sources = sorted(list(sources), key=str.lower) - newSources = [] - for i in sources: - i = i.replace("\\", "/") - newSources.append(f"{symbol_source_prefix} {i} {symbol_source_suffix}") - dOut[d] = newSources - - templ_file = os.path.join(folder, "locale/template.txt") - write_template(templ_file, dOut, mod_name) - new_template = import_tr_file(templ_file) # re-import to get all new data - return (dOut, new_template) - -# Updates an existing .tr file, copying the old one to a ".old" file -# if any changes have happened -# dNew is the data used to generate the template, it has all the -# currently-existing localized strings -def update_tr_file(dNew, templ, mod_name, tr_file): - if params["verbose"]: - print(f"updating {tr_file}") - - tr_import = import_tr_file(tr_file) - dOld = tr_import[0] - textOld = tr_import[1] - - textNew = strings_to_text(dNew, dOld, mod_name, tr_import[2], tr_import[3], templ) - - if textOld and textOld != textNew: - print(f"{tr_file} has changed.") - if params["old-file"]: - shutil.copyfile(tr_file, f"{tr_file}.old") - - with open(tr_file, "w", encoding='utf-8') as new_tr_file: - new_tr_file.write(textNew) - -# Updates translation files for the mod in the given folder -def update_mod(folder): - if not os.path.exists(os.path.join(folder, "init.lua")): - print(f"Mod folder {folder} is missing init.lua, aborting.") - exit(1) - assert not is_modpack(folder) - modname = get_modname(folder) - print(f"Updating translations for {modname}") - (data, templ) = generate_template(folder, modname) - if data == None: - print(f"No translatable strings found in {modname}") - else: - for tr_file in get_existing_tr_files(folder): - update_tr_file(data, templ, modname, os.path.join(folder, "locale/", tr_file)) - -def is_modpack(folder): - return os.path.exists(os.path.join(folder, "modpack.txt")) or os.path.exists(os.path.join(folder, "modpack.conf")) - -def is_game(folder): - return os.path.exists(os.path.join(folder, "game.conf")) and os.path.exists(os.path.join(folder, "mods")) - -# Determines if the folder being pointed to is a game, mod or a mod pack -# and then runs update_mod accordingly -def update_folder(folder): - if is_game(folder): - run_all_subfolders(os.path.join(folder, "mods")) - elif is_modpack(folder): - run_all_subfolders(folder) - else: - update_mod(folder) - print("Done.") - -def run_all_subfolders(folder): - for modfolder in [f.path for f in os.scandir(folder) if f.is_dir() and not f.name.startswith('.')]: - update_folder(modfolder) - -main() diff --git a/util/test_multiplayer.sh b/util/test_multiplayer.sh index 624669ac1..b12908423 100755 --- a/util/test_multiplayer.sh +++ b/util/test_multiplayer.sh @@ -33,7 +33,8 @@ printf '%s\n' >"$testspath/client1.conf" \ printf '%s\n' >"$testspath/server.conf" \ max_block_send_distance=1 active_block_range=1 \ - devtest_unittests_autostart=true helper_mode=devtest + devtest_unittests_autostart=true helper_mode=devtest \ + "${serverconf:-}" ln -s "$dir/helper_mod" "$worldpath/worldmods/"